Skip to main content

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 NodeDockerCloudflare Workers
DatabasesSQLite, PostgreSQL, MySQL or MariaDBThe sameD1 only
File storageLocal disk, or S3-compatibleThe sameR2, or S3-compatible. Not local disk
Session storesThe database, Redis, or memory (for trials)The sameKV, or the database (D1)
Email providersAmazon SES, SMTP, Resend, SendGrid, Mailgun, Postmark, or logThe sameThe same, except SMTP
SecretsEnvironment variables, NAME_FILE files, or a secrets managerThe same (Docker secrets use NAME_FILE)wrangler secret put and plain variables only. No NAME_FILE, no secrets manager
HTTPSYou provide it (proxy)You provide it (proxy, or the Caddy service in the Compose file)Provided by Cloudflare
Database schemaApplied when the server startsThe sameYou apply it with wrangler d1 execute, and again for each update
One-click updatesYes, when started with npm startYes, with the image's default commandNo. Always by hand
What you maintainThe server, Node, the proxy, backupsThe host, Docker, the proxy, backupsYour 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.

Next​