Self-Hosting

Visiban is designed for self-hosting. Your data stays on your infrastructure.

Requirements

A Linux server with Docker and Docker Compose v2. Minimum 2 vCPU / 4 GB RAM / 40 GB SSD — 1 GB RAM is not enough and will OOM under load.

Docker
24+
Compose
v2
Postgres
17 (bundled)
Redis
7 (bundled)
Site admin panel showing registration modes including open, invite-only, and closed
Site admin — registration mode (open / invite-only / closed), user management, and OAuth config
Board settings rules tab showing WIP limit enforcement and stale card thresholds
Board rules — enforce WIP and weight limits per column, configure stale card detection thresholds

Quick start

  1. 1

    Clone the repo

    git clone --branch v1.0.0 https://gitlab.com/visiban/visiban && cd visiban
  2. 2

    Configure environment

    cp .env.example .env
    # Edit .env — set DJANGO_SECRET_KEY and SITE_DOMAIN at minimum
  3. 3

    Start the stack

    docker compose up --build -d
  4. 4

    Retrieve the one-time admin password

    docker compose exec backend cat /tmp/visiban_admin_password
  5. 5

    Open the app

    # Visit http://localhost:5173 and sign in with the password above

Production deployment

For production, use docker-compose.prod.yml which adds an Nginx reverse proxy, serves the built frontend as static files, and uses daphne (ASGI) for WebSocket support.

docker compose -f docker-compose.prod.yml up --build -d
Required for any non-localhost hostname — whether you're on a LAN IP, internal domain, or public domain, set all four of these in .env before starting the stack. Missing any one will cause API failures or keep the WebSocket stuck on Reconnecting.
  • ALLOWED_HOSTS — your hostname or IP (e.g. 192.168.1.100 or boards.example.com)
  • CORS_ALLOWED_ORIGINS — full origin the browser uses (e.g. http://192.168.1.100:8080 or https://boards.example.com)
  • SITE_DOMAIN — hostname for OAuth callback URLs
  • FRONTEND_URL — full URL allauth redirects to after OAuth login

TLS termination can be handled by Nginx with Let's Encrypt — see the full installation guide for the complete production checklist.

Kubernetes / Helm

A Helm chart is included in the repository under helm/visiban/.

helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
helm dependency update helm/visiban

# Copy the secret values template and fill in your credentials
cp helm/visiban/values.secret.yaml.example helm/visiban/values.secret.yaml
# Edit values.secret.yaml — set djangoSecretKey and postgresql.auth.password

helm install visiban helm/visiban \
  --namespace visiban --create-namespace \
  -f helm/visiban/values.secret.yaml \
  --set ingress.host=boards.example.com \
  --set backend.settings.allowedHosts=boards.example.com \
  --set backend.settings.corsAllowedOrigins=https://boards.example.com \
  --set backend.settings.frontendUrl=https://boards.example.com \
  --set backend.settings.siteDomain=boards.example.com

After install, retrieve the one-time admin password:

kubectl exec -n visiban $(kubectl get pods -n visiban -l app.kubernetes.io/component=backend -o jsonpath='{.items[0].metadata.name}') \
  -- cat /run/visiban/admin_password

Need the complete guide? The full documentation covers upgrades, backups, OAuth setup, environment variables, and more.

Read the Full Docs →