Choose where to run it
The same software runs in three places. This page compares them so you can pick one before you install. It is for whoever is deciding how to host the site.
The three ways
- Plain Node. You unpack the download on a Linux server (a virtual private server is typical) and run it with Node.js, usually as a systemd service behind a proxy that provides HTTPS.
- Docker. The same code in a container. You build a small image from the download, and run it alone or with Docker Compose. There is no published image to pull.
- Cloudflare Workers. The whole site runs as one Cloudflare Worker, with a D1 database, R2 file storage and an optional KV store for sessions. There is no server to look after.
Comparison
| Plain Node | Docker | Cloudflare Workers | |
|---|---|---|---|
| Databases | SQLite, PostgreSQL, MySQL or MariaDB | The same | D1 only |
| File storage | Local disk, or S3-compatible | The same | R2, or S3-compatible. Not local disk |
| Session stores | The database, Redis, or memory (for trials) | The same | KV, or the database (D1) |
| Email providers | Amazon SES, SMTP, Resend, SendGrid, Mailgun, Postmark, or log | The same | The same, except SMTP |
| Secrets | Environment variables, NAME_FILE files, or a secrets manager | The same (Docker secrets use NAME_FILE) | wrangler secret put and plain variables only. No NAME_FILE, no secrets manager |
| HTTPS | You provide it (proxy) | You provide it (proxy, or the Caddy service in the Compose file) | Provided by Cloudflare |
| Database schema | Applied when the server starts | The same | You apply it with wrangler d1 execute, and again for each update |
| One-click updates | Yes, when started with npm start | Yes, with the image's default command | No. Always by hand |
| What you maintain | The server, Node, the proxy, backups | The host, Docker, the proxy, backups | Your Cloudflare resources and your own backups |
Sessions kept in the database use the database the site already has, so there is nothing extra to run.
Which one should we choose?
For a small choir, choose one process or one container with SQLite and local files. It has the fewest parts: one program, one folder of data to back up. Either Install on a Linux server with Node or Docker Compose: one container with SQLite fits. Choose the one your volunteer already knows.
For a larger or managed set-up, choose PostgreSQL (or MySQL) and S3-compatible storage, which are looked after separately and can be backed up by their own tools. Docker Compose: PostgreSQL and MinIO is a ready-made example, and the same settings work on a host that runs several instances. With more than one instance, set UPDATE_MODE=notify and update by redeploying.
If you already use Cloudflare, or want no server at all, choose Cloudflare Workers. The price is more manual steps: you apply the database schema and deploy each update yourself.
If you are unsure, try the download on your own computer first: Try it on your own computer.
Other hosts
Fly.io, Railway, Render and similar services run a Node process or a container, so they work in principle. See Run it on a platform service for the constraints. No guide for a particular service has been tested.