All apps · 0 apps
vibe-kanban-cloud
Docker app from rorar's Repository
Overview
Readme
View on GitHubVibe Kanban Cloud - True DinD Wrapper
This project provides a pristine, "one-click" deployable Docker image for Vibe Kanban Cloud, specifically optimized for UnRAID and other container management systems.
Note: This repository builds the Cloud Server (multi-user, auth-enabled) version of Vibe Kanban. If you are looking for a single-user local development environment, refer to the official documentation.
🏗️ Architecture: True Docker-in-Docker (DinD)
Vibe Kanban Cloud relies on a complex stack of interconnected services (remote-server, postgres, electricsql, and optionally caddy).
To prevent cluttering your UnRAID WebUI (or Portainer interface) with multiple unmanaged "sibling" containers, this project utilizes a True DinD approach based on docker:dind.
How it works:
- You run exactly one container (
ghcr.io/rorar/vibe-kanban-cloud). - This wrapper container spins up its own fully isolated, internal Docker daemon.
- An
entrypoint.shscript automatically provisions secure secrets (DB_PASSWORD,JWT_SECRET, etc.) to a persistent/data/.envfile. - The script then orchestrates the internal
docker-composestack entirely within the wrapper.
Requirement: The container MUST be run in Privileged mode to allow the internal Docker daemon to function.
🚀 Features
- Pristine UnRAID Integration: Exposes the entire stack via a single XML template without spamming the Docker tab.
- Fully Automated Upstream Sync: A GitHub Action runs every 6 hours. It checks the official
BloopAI/vibe-kanbanrepository for new commits or updated dependency versions (Caddy, Postgres, ElectricSQL). If updates are found, it automatically syncs the versions, builds a fresh DinD image, and publishes it to GHCR. - Weekly Security Rebuilds: Every Sunday, the pipeline forces a full rebuild even if no upstream changes were detected. This ensures your deployment always includes the latest OS security patches and base image updates.
- Zero-Touch Initial Setup: Automatically generates the required 48-character base64 secrets on the first run.
- Flexible Proxy & SSL Routing: Built-in support for both standalone deployments and setups behind external reverse proxies (like Nginx Proxy Manager or Traefik).
⚙️ Configuration & Environment Variables
All configuration is driven by standard environment variables. If you are using UnRAID, these are exposed in the provided XML template.
Core Variables
| Variable | Description |
|---|---|
DOMAIN |
Your domain name (e.g., kanban.yourdomain.com). If you use a local IP or hostname (e.g., 192.168.1.100), the internal Caddy will automatically generate a local Root CA for internal HTTPS. |
USE_EXTERNAL_PROXY |
true or false (Default: false). See the Proxy Modes section below. |
PUID & PGID |
Defines the permissions for the generated files in the /data directory. |
Authentication (Choose One)
Option A: Local Bootstrap (Recommended for initial setup)
| Variable | Description |
|---|---|
SELF_HOST_LOCAL_AUTH_EMAIL |
Email address for the initial local admin user. |
SELF_HOST_LOCAL_AUTH_PASSWORD |
Secure password for the initial local admin user. |
Option B: OAuth
| Variable | Description |
|---|---|
GITHUB_OAUTH_CLIENT_ID / _SECRET |
Credentials for GitHub login. |
GOOGLE_OAUTH_CLIENT_ID / _SECRET |
Credentials for Google login. |
🌐 Proxy Modes
Vibe Kanban requires HTTPS. This wrapper provides two ways to handle it:
1. Internal Caddy Mode (Default: USE_EXTERNAL_PROXY=false)
The wrapper runs its own internal Caddy server to handle SSL termination.
- Public Domain: If
DOMAINis a public FQDN, Caddy uses Let's Encrypt (ACME) to fetch a valid certificate. (Optionally provideTLS_EMAIL). Map host port443-> container port443(e.g.,1443:443). - Local IP/Hostname: If
DOMAINis a local IP, Caddy usestls internal. It generates its own Certificate Authority. The wrapper automatically exports this Root CA to your persistent storage at/data/TRUST_ME_FOR_LOCAL_SSL.crt. Install this certificate on your local machine to trust the connection.
2. External Proxy Mode (USE_EXTERNAL_PROXY=true)
For users who already run Nginx Proxy Manager, Traefik, or an external Caddy instance.
- The internal Caddy container is completely disabled.
- The internal
remote-serverexposes plain HTTP on port8081. - Map host port
8081-> container port8081. Point your external reverse proxy to this port. Your external proxy handles the SSL.
💾 Persistence
All stateful data is kept in a single volume mount to ensure backups are simple and data survives container recreation.
Mount a host directory (e.g., /mnt/user/appdata/vibe-kanban-cloud) to /data inside the container.
What lives in /data?
.env(Auto-generated secure secrets)remote-db-data/(Postgres database)electric-data/(ElectricSQL sync state)caddy_data/&caddy_config/(SSL certificates and internal proxy state)TRUST_ME_FOR_LOCAL_SSL.crt(Exported Root CA if using local domain mode)
🐳 Manual Docker Compose Installation (Non-UnRAID)
While optimized for UnRAID, you can run this wrapper anywhere:
services:
vibe-kanban-cloud:
image: ghcr.io/rorar/vibe-kanban-cloud:latest
container_name: vibe-kanban-cloud
privileged: true
restart: unless-stopped
ports:
- "180:80" # Internal Caddy HTTP
- "1443:443" # Internal Caddy HTTPS
# - "8081:8081" # Uncomment if USE_EXTERNAL_PROXY=true
volumes:
- ./vibe-data:/data
environment:
- DOMAIN=vibe.local
- USE_EXTERNAL_PROXY=false
- SELF_HOST_LOCAL_AUTH_EMAIL=admin@example.com
- SELF_HOST_LOCAL_AUTH_PASSWORD=changeme
- PUID=1000
- PGID=1000
Install vibe-kanban-cloud on Unraid in a few clicks.
Find vibe-kanban-cloud in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.
Requirements
Categories
Related apps
Explore more like this
Explore allDetails
ghcr.io/rorar/vibe-kanban-cloud:latestRuntime arguments
- Web UI
http://[IP]:[PORT:80]/- Network
bridge- Shell
bash- Privileged
- true
- Extra Params
--hostname=vibe-kanban-cloud
Template configuration
Internal Caddy HTTP Port (used if USE_EXTERNAL_PROXY=false).
- Target
- 80
- Default
- 180
Internal Caddy HTTPS Port (used if USE_EXTERNAL_PROXY=false).
- Target
- 443
- Default
- 1443
Direct access to Vibe Kanban App (used if USE_EXTERNAL_PROXY=true). Point your external reverse proxy to this port.
- Target
- 8081
- Default
- 8081
Persistent storage for all data (database, electric, SSL certs, generated secrets in .env).
- Target
- /data
- Default
- /mnt/user/appdata/vibe-kanban-cloud
Main server settings.
Your domain. If you enter a local IP/hostname (e.g. 192.168.x.x), Caddy uses internal SSL. If public FQDN, Caddy uses Let's Encrypt.
- Target
- DOMAIN
- Default
- vibe.local
Set to 'true' if you use Nginx Proxy Manager, Traefik, or an external Caddy. This disables the internal Caddy.
- Target
- USE_EXTERNAL_PROXY
- Default
- false
(Optional) Email address for Let's Encrypt ACME registration if you use a public domain and internal Caddy.
- Target
- TLS_EMAIL
Bootstrap credentials for initial setup without OAuth.
The email address to use for the bootstrap admin.
- Target
- SELF_HOST_LOCAL_AUTH_EMAIL
- Default
- admin@example.com
Secure password for the bootstrap admin.
- Target
- SELF_HOST_LOCAL_AUTH_PASSWORD
- Default
- changeme
Configure GitHub or Google login.
Client ID for GitHub Auth.
- Target
- GITHUB_OAUTH_CLIENT_ID
Client Secret for GitHub Auth.
- Target
- GITHUB_OAUTH_CLIENT_SECRET
Client ID for Google Auth.
- Target
- GOOGLE_OAUTH_CLIENT_ID
Client Secret for Google Auth.
- Target
- GOOGLE_OAUTH_CLIENT_SECRET
Advanced user and permission settings.
Container User ID for file ownership in /data (default: 99).
- Target
- PUID
- Default
- 99
Container Group ID for file ownership in /data (default: 100).
- Target
- PGID
- Default
- 100