Skip to content

Deployment

Laju Go ships as a single Go binary that serves both the backend and the compiled Svelte frontend. There is no separate API server or static file host to wire up. Pick one path:

Don’t want to touch a terminal? Hand the deployment to an AI coding agent. Copy-paste a prompt, the agent SSHes in, installs everything, and starts the app. Works with omp.sh, Claude Code, Cursor, or any agent that can run shell commands.

→ AI agent deployment guide

One command, everything containerized:

Terminal window
docker compose up -d --build

Multi-stage image, persistent SQLite volume, healthcheck built in. If you have Docker on your server, start here.

→ Docker guide

Go + systemd + reverse proxy. More control, fewer moving parts, but ~6 manual steps for first-time setup.

→ Linux VPS guide

Docker Bare VPS (systemd)
First-time setup docker compose up -d --build (1 command after clone) ~6 steps: install Go + Node, create user, clone, .env, systemd unit, start
Routine update git pull && docker compose up -d --build git pull && npm run build:all && systemctl --user restart laju-go
Downtime on update ~2s (container swap) ~1s (process restart)
Install on server Docker + Docker Compose Go + Node.js (or cross-compile with Zig, no Go on server)
Isolation Containerized (filesystem, network, process) Runs directly on host
Memory overhead ~120 MB (container runtime) ~40 MB (single Go binary)
Best for Most users — simplest setup, reproducible environment Users who want minimal overhead, already comfortable with Linux

Both paths serve the same app on port 8080 and need a reverse proxy for HTTPS. For a single-process Go + SQLite app, systemd is faster and lighter — Docker’s benefits (isolation, reproducibility) kick in when orchestrating multiple services.


Your app is running on port 8080, but it speaks plain HTTP — no encryption. Before users can visit https://your-domain.com (with the lock icon), you need a reverse proxy in front to handle TLS (HTTPS certificates) and route traffic to port 8080. If your domain is on Cloudflare, that’s the proxy — nothing to install. Otherwise, Caddy or Nginx both work.

→ Reverse proxy guide

Env vars, the full .env reference table, and defaults from app/config/config.go.

→ Configuration