SaveHere is a minimal cloud file manager that allows you to download files from the internet and store them on your own server, either locally or on a VPS. It uses Docker, React for frontend, ASP.NET Core for backend, Nginx for serving downloaded files and a few Docker images for other functionalities.
The app was built to address the issue of downloading large files from slow servers or unstable connections. With SaveHere, you can enter the URL of the file you want to download, and the app will download it to your server. You can then download the file from your own server using your own domain name and URL, with the ability to pause and resume the download as needed.
SaveHere keeps a list of all download requests and downloaded files, allowing you to easily manage your files. You can delete files from the server at any time. The app currently does not support uploading files from your local machine, but that feature is planned for a future release.
SaveHere is designed to be lightweight and easy to use, with a focus on simplicity and functionality. Whether you're downloading files for personal or professional use, SaveHere can help you do it more efficiently and reliably.
To run SaveHere, you will need to have the following dependencies installed:
- Docker: SaveHere is containerized using Docker, so you will need to have Docker installed on your machine.
- Docker Compose: SaveHere uses Docker Compose to manage its containers, so you will need to have Docker Compose installed as well.
- (Optional) Visual Studio 2022 and vscode for development.
In addition, it is recommended that you run SaveHere behind a reverse proxy such as Nginx or Nginx Proxy Manager. This will allow you to access the app using your own domain name and SSL certificate, and provide additional security and performance benefits.
To run SaveHere, follow these steps:
- Clone the repository from GitHub and navigate into the directory:
git clone https://github.com/gudarzi/SaveHere.git
cd SaveHere
- (Optional) If you are upgrading from a previous version and the app is throwing errors at you, try removing everything inside
db
:
sudo rm -rf db/
- Run the containers using Docker Compose in detached mode, using production environment settings:
docker compose -f docker-compose.production.yml up -d --build --force-recreate
- (Note) If you are running the app in development environment (
docker compose up -d --build --force-recreate
), nginx serves the prebuilt frontend files onhttp://localhost:80
andhttps://localhost:443
. - (Note) If you want to work on frontend, first run the backend in dev mode using
docker compose up -d --build --force-recreate
, then donpm run dev
insavehere.frontend
and check the app running atlocalhost:5173
.
-
The app is now available at the address
http://172.17.0.1:18480
. Put it behind a reverse proxy and a domain. Change the address in settings if you need to. The user:pass to the filebrowser app isadmin
:admin
. -
(Optional) If you encounter permission issues with the downloads folder, change the owner of the folder and all of its content to
1000:1000
and set the permissions to777
:
sudo chown -R 1000:1000 downloads/
sudo chmod -R 777 downloads/
- Fix the packaging of the app and create 1 single docker image
- Add user accounts and set their access policies
- Check issues for more!
I welcome contributions from the community to help improve SaveHere. If you're interested in contributing, please check the To Do list or take a look at the project's issues page to see if there are any open issues that you can help with. You can also submit pull requests with bug fixes, new features, or other improvements. Before submitting a pull request, please make sure that your code follows the project's coding standards and that all tests are passing. I will review all pull requests as soon as possible and provide feedback if necessary.
This is a hobby project that I work on in my spare time. While I try to make it as good as possible, I cannot guarantee that it is free of bugs or errors, or that it will meet your specific needs. As such, I cannot be held responsible for any damage or loss that may result from using this project.
I welcome any contributions that can help improve the project, but I cannot guarantee that I will be able to incorporate all suggested changes or respond to all feedback. I also reserve the right to reject any contributions that I deem inappropriate or not in line with the project's goals.