Self-host with Docker
Crewtavo runs anywhere Docker does: a laptop, an office server or a rented server (VPS). It’s the same five services the Railway template creates. This page is for whoever looks after the server; most businesses are better off on Railway.
What you need
Section titled “What you need”Start it
Section titled “Start it”git clone https://github.com/jviars/crewtavo.gitcd crewtavonpm run instanceThe first run writes .env.instance with new secrets, builds Crewtavo, starts everything and prints the address: http://localhost:8080. Open it and create the owner account.
Day to day
Section titled “Day to day”npm run instance -- logs # follow what's happeningnpm run instance -- stop # stop it; the data stays in Docker volumesnpm run instance # start again, or update after a git pulldocker compose --env-file .env.instance down -v # delete the instance and all its dataTo update, run git pull in the Crewtavo folder, then npm run instance again.
On a server with your own domain
Section titled “On a server with your own domain”Settings → Web address walks you through these steps with your domain filled in, and checks each one.
- Point a DNS record for your domain (say
ops.example.com) at the server. - In
.env.instance, setAPP_URL=https://ops.example.com, then runnpm run instanceagain. - Put a web server with HTTPS in front of port 8080, on the same server. With Caddy, this whole
Caddyfilegets a certificate and forwards everything:
ops.example.com { reverse_proxy localhost:8080}Port 8080 only answers on the server itself (CREWTAVO_BIND, 127.0.0.1 by default), so visitors come in through the web server.
Visitors’ addresses
Section titled “Visitors’ addresses”Public pages (booking forms, promo codes, Client Hub payments and messages, sign-in links, the first-run setup) limit how often each visitor can use them, by the visitor’s address. Crewtavo only trusts the address its own proxy sets:
- Caddy adds each visitor’s address to
X-Forwarded-For, which is what Crewtavo reads. Nothing to change. - nginx needs
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;. - A web server on another machine: set
CREWTAVO_BINDto this server’s address on the private network between them, not0.0.0.0. - No web server, trying Crewtavo from other computers on your network: set
CREWTAVO_BIND=0.0.0.0andCREWTAVO_VISITOR_IP=connection. - Something else in front, like Cloudflare’s proxy before Caddy: set
CREWTAVO_VISITOR_IP. See Behind other proxies.
Backups
Section titled “Backups”Back up the crewtavo-instance_db-data and crewtavo-instance_storage-data Docker volumes, and .env.instance. See Back up and export your data.
Optional features
Section titled “Optional features”Texting, online payments, maps, AI and accounting each take a key or two in .env.instance. See Optional settings.
© 2026 Crewtavo · Website · Compare · Deploy on Railway · GitHub · Contact