Self-Hosting
Deploy GudDesk on your own infrastructure with Docker or bare metal.
GudDesk is fully open source (GPL-3.0) and designed to run on your own infrastructure. This guide covers deployment options for production environments.
Docker Compose (Recommended)
The easiest way to self-host GudDesk:
git clone https://github.com/guddesk/guddesk.git
cd guddesk
cp .env.example .env
# Edit .env with your production configuration
docker compose up -dThis starts GudDesk and a PostgreSQL database. The app will be available on port 3000.
Production Docker Configuration
For production, we recommend:
- Set
NODE_ENV=production - Use an external managed PostgreSQL database (e.g., Neon, Supabase, AWS RDS)
- Put GudDesk behind a reverse proxy with TLS (Nginx, Caddy, or Traefik)
- Enable real-time features by configuring Pusher or a compatible WebSocket service
Bare Metal
If you prefer running directly on your server:
# Install dependencies
pnpm install
# Run database migrations
pnpm db:push
# Build for production
pnpm build
# Start the production server
pnpm startUse a process manager like PM2 for reliability:
pm2 start pnpm --name guddesk -- start
pm2 save
pm2 startupReverse Proxy
Nginx
server {
listen 443 ssl http2;
server_name support.yourdomain.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}Caddy
support.yourdomain.com {
reverse_proxy localhost:3000
}
Caddy automatically provisions TLS certificates via Let's Encrypt.
Environment Variables
See the Quickstart guide for the full list of environment variables. Key production variables:
| Variable | Description |
|---|---|
DATABASE_URL | PostgreSQL connection string |
AUTH_SECRET | Session encryption secret (generate with openssl rand -base64 32) |
NEXT_PUBLIC_APP_URL | Your public URL (e.g., https://support.yourdomain.com) |
RESEND_API_KEY | Email delivery API key |
ANTHROPIC_API_KEY | Required for AI agent features |
PUSHER_APP_ID / PUSHER_SECRET | Required for real-time chat |
Backups
You own the database, so you're responsible for backups:
# Manual backup
pg_dump $DATABASE_URL > backup-$(date +%Y%m%d).sql
# Restore from backup
psql $DATABASE_URL < backup-20250615.sqlSet up automated daily backups via cron or your cloud provider's managed backup service.
Updating
git pull origin main
pnpm install
pnpm db:push
pnpm build
pm2 restart guddeskAlways review the changelog before updating to check for breaking changes or required migration steps.
System Requirements
| Resource | Minimum | Recommended |
|---|---|---|
| CPU | 1 vCPU | 2+ vCPU |
| RAM | 1 GB | 2+ GB |
| Storage | 10 GB | 20+ GB |
| PostgreSQL | 15+ | 16+ |
| Node.js | 20+ | 22 LTS |