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:
Deploy with an AI agent (easiest)
Section titled “Deploy with an AI agent (easiest)”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.
Docker (recommended for most)
Section titled “Docker (recommended for most)”One command, everything containerized:
docker compose up -d --buildMulti-stage image, persistent SQLite volume, healthcheck built in. If you have Docker on your server, start here.
Bare VPS (no Docker)
Section titled “Bare VPS (no Docker)”Go + systemd + reverse proxy. More control, fewer moving parts, but ~6 manual steps for first-time setup.
Docker vs. bare VPS — which one?
Section titled “Docker vs. bare VPS — which one?”| 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.
After either path: reverse proxy
Section titled “After either path: reverse proxy”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.
Configuration
Section titled “Configuration”Env vars, the full .env reference table, and defaults from
app/config/config.go.