Skip to main content
This guide covers deploying Vibe Kanban Cloud on any Linux server using Docker Compose. This approach works with any cloud provider (AWS, DigitalOcean, Hetzner, etc.) or on-premises server.

Prerequisites

  • A Linux server with:
    • Docker and Docker Compose v2.0+ installed
    • 2GB RAM minimum (4GB recommended)
    • 10GB disk space
    • A domain name pointing to your server
  • SSL certificate (we’ll use Caddy for automatic HTTPS)
  • One authentication method:
    • OAuth credentials from GitHub or Google, or
    • bootstrap local auth credentials for a single self-hosted admin user

Step 1: Prepare Your Server

SSH into your server and install Docker if not already installed:
Clone the Vibe Kanban repository:

Step 2: Configure Authentication

Choose one of these options:

Option A: OAuth

Update your OAuth application callback URLs to use your domain:
  • Authorization callback URL: https://your-domain.com/v1/oauth/github/callback

Option B: Bootstrap Local Auth

If you do not want to configure OAuth yet, you can bootstrap a single local admin login:
This is useful for initial self-hosted setup, but it is a single shared credential pair rather than a full multi-user identity system.

Step 3: Create Environment File

Generate a secure JWT secret:
Create .env.remote in the repository root:
.env.remote

Step 4: Create Production Docker Compose

Create docker-compose.prod.yml in the crates/remote directory:
docker-compose.prod.yml

Step 5: Create Caddyfile

Create a Caddyfile in the crates/remote directory for automatic HTTPS (core app/API):
Caddyfile
This base deployment serves the main Cloud app/API only. Relay/tunnel support is optional and requires additional relay routing plus wildcard DNS/TLS for your relay domain.

Step 6: Deploy

The first build takes 10-15 minutes. Subsequent deployments are faster as Docker caches the build layers.

Step 7: Verify Deployment

  1. Open https://your-domain.com in your browser
  2. You should see the Vibe Kanban Cloud login page
  3. Sign in with your configured auth method
  4. Create your first organisation and project

Optional: Enable Relay/Tunnel in Production

Relay/tunnel support requires:
  1. A running relay-server service
  2. Reverse proxy routing for both relay.your-domain.com and *.relay.your-domain.com
  3. A wildcard certificate for *.relay.your-domain.com (or equivalent managed TLS at your edge)
  4. VITE_RELAY_API_BASE_URL set to your public relay API base URL before building remote-server

Add relay-server to docker compose

docker-compose.prod.yml

Add relay proxy routes

Your reverse proxy must route:
  • relay.your-domain.com -> relay-server:8082
  • *.relay.your-domain.com -> relay-server:8082
Standard ACME HTTP challenge does not issue wildcard certificates. For wildcard relay hostnames, use a DNS-based ACME challenge or another edge provider that can terminate wildcard TLS certificates.

Updating

To update to a new version:

Backup and Restore

Backup Database

Restore Database

Monitoring

View Logs

Check Service Health

Troubleshooting

Caddy automatically obtains SSL certificates from Let’s Encrypt. Ensure:
  • Your domain’s DNS is correctly pointing to your server
  • Ports 80 and 443 are open in your firewall
  • Your domain is correctly set in the environment
The server may start before the database is ready. Check:
ElectricSQL requires the electric_sync database user, which the Remote Server creates automatically on first startup. If ElectricSQL cannot connect:
  1. Check that the Remote Server started successfully and ran its migrations
  2. Verify ELECTRIC_ROLE_PASSWORD matches in both your .env.remote and the Electric service config
  3. Restart ElectricSQL after the Remote Server is healthy:
If the build fails with memory errors, you may need a server with more RAM or add swap: