Deployment
Docker
Images are published to Docker Hub as dinhdobathi/gitdash: latest follows main, and every release adds 4.5.2-style and 4.5-style tags.
docker run -d --name gitdash -p 3000:3000 \ -e MODE=standalone \ -e SESSION_SECRET=your_32_char_secret_here \ --restart unless-stopped \ dinhdobathi/gitdash:latest
docker run -d --name gitdash -p 3000:3000 \ -e MODE=organization \ -e SESSION_SECRET=your_32_char_secret_here \ -e GITHUB_CLIENT_ID=... -e GITHUB_CLIENT_SECRET=... \ -e DATABASE_URL=postgres://... \ -e GITDASH_ADMIN_GITHUB_IDS=12345678 \ -e NEXT_PUBLIC_APP_URL=https://gitdash.example.com \ --restart unless-stopped \ dinhdobathi/gitdash:latest
The repository's docker-compose.yml builds the image locally and reads .env.local:
cp .env.local.example .env.local # fill in your values docker compose up --build -d docker compose logs -f docker compose down
Kubernetes (Helm)
helm upgrade --install gitdash ./helm/gitdash -n gitdash --create-namespace -f my-values.yaml
Everything is set in helm/gitdash/values.yaml. For organization mode set config.mode, config.adminGithubIds (a quoted string of numeric ids), config.allowedOrgs, config.rbacEnforce and secret.databaseUrl. The chart's values schema rejects organization mode without admin ids, and the image tag defaults to the chart's appVersion.
Vercel
Import the repository
Set environment variables
Point the OAuth App at Vercel
https://your-domain/api/auth/callback. Use one canonical host: the sign-in cookie belongs to the host that started sign-in.vercel.json schedules the two nightly sync crons; they need CRON_SECRET and GITHUB_TOKEN.Behind a reverse proxy
Set NEXT_PUBLIC_APP_URL to the public URL, update the OAuth App callback to match, and forward X-Forwarded-Proto and X-Forwarded-Host. Health probes can use /api/health, which answers 503 while required configuration is missing.