droppy install guide

WARNING: Droppy is out-of-date and not supported anymore! Development has stopped and the project has been archived!

Why use droppy?

Warning: Do not use droppy. I neither recommend nor actually use droppy anymore. For a minimalistic new file-hosting service you could use TinyFileManager (PHP). For a bigger solution use Nextcloud.
Droppy is a "google-drive"-like file server. You can drag and drop files into your browser to upload them to your server.
It is a good alternative for simple and static ftp servers that don't have an easily accessible upload/download interface.
It has less features than nextcloud. Droppy uses NodeJS, Nextcloud uses PHP.
It has basic authentication, but users can't have their own folders, every user sees every folder and file.
You can view Images in a gallery, listen to music straight from your browser and watch videos live from your browser without downloading it.
The github says that it's minimalistic and perfect for running on low hardware like a raspberry pi.
It runs on a raspberry pi zero w (single core ARM6) without any problems.

Link to github: https://github.com/silverwind/droppy

The main problem: Development is very slow, issues on github keep piling up without any of them being resolved. The Project is now archived!

Installation

Requirements: Have nodejs and npm installed (example: sudo apt-get install nodejs)

Now simply install droppy:

npm install -g droppy
Now you can start it locally with droppy start -c /srv/droppy/config -f /srv/droppy/files, but it's better to create a user for it and start it via a system service.
If you want to start it as a background deamon you can use --daemon behind the command.
A better solution would be:

Install it as a service via systemd

First create a user for droppy and set the directories:
useradd -r -s /bin/false -d /srv/droppy droppy
mkdir -p /srv/droppy/config /srv/droppy/files
chown -R droppy:droppy /srv/droppy
chmod 755 /srv/droppy
Now edit the file /etc/systemd/system/droppy.service and add the following to it:
[Unit]
Description=droppy
After=network.target

[Service]
ExecStart=/usr/bin/droppy start -c /srv/droppy/config -f /srv/droppy/files
WorkingDirectory=/srv/droppy
Environment="NODE_ENV=production"
AmbientCapabilities=CAP_NET_BIND_SERVICE
Restart=always
User=droppy
Group=droppy
SyslogIdentifier=droppy
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target
Now simply create the config, enable the service and start droppy:
sudo su droppy -c 'droppy --home /srv/droppy config'
systemctl enable droppy
systemctl start droppy

reverse-proxy via nginx

If you want it to be accessible via example.com/droppy instead of example.com:8989 then you can use a reverse proxy like NGINX.
Simply add the following to your NGINX server block:
location /droppy/ {
      proxy_pass http://localhost:8989/;
      proxy_set_header Host $host;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection $http_connection;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Real-Port $remote_port;
      proxy_http_version 1.1;
      proxy_cache off;
      proxy_buffering off;
      proxy_redirect off;
      proxy_request_buffering off;
      proxy_ignore_client_abort on;
      proxy_connect_timeout 7200;
      proxy_read_timeout 7200;
      proxy_send_timeout 7200;
      client_max_body_size 0;
}
Then check the config via sudo nginx -t.
If there are no problems you can reload the config via sudo nginx -s reload.