Self-hosting
Self-hosting overview
The sync server is a single Node.js file that stores one encrypted blob per account. Here is what it needs and how to try it.
What the server stores
user names a SHA-256 hash of each account’s login key the size and time of each upload the IP addresses of the devices that connect
server.js) with no dependencies. It needs Node.js 24 or newer for the built-in node:sqlite.
Requirements
a Linux server with Docker and Docker Compose v2 a reverse proxy on that server that already handles HTTPS for other sites, like Nginx Proxy Manager, Caddy, Traefik or nginx a domain for sync, like sync.example.com
localhost.
Configuration
PORT | 3000 | |
DB_PATH | ./sync.db | |
REGISTRATION_CODE | ||
TRUST_PROXY | 1 only when the server can be reached through your reverse proxy alone, and that proxy overwrites X-Real-IP with the client’s address. The address is used to slow down repeated failed logins. The header is only used when the connection comes from a local or private address (127.0.0.0/8, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, ::1, fc00::/7), which is where a proxy on the same server or in Docker connects from. |
Try it locally
cd server
REGISTRATION_CODE=test node server.jshttp://localhost:3000 as the server and test as the invite code.