GudDesk
Docs
Self-Hosting

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.

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 -d

This 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 start

Use a process manager like PM2 for reliability:

pm2 start pnpm --name guddesk -- start
pm2 save
pm2 startup

Reverse 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:

VariableDescription
DATABASE_URLPostgreSQL connection string
AUTH_SECRETSession encryption secret (generate with openssl rand -base64 32)
NEXT_PUBLIC_APP_URLYour public URL (e.g., https://support.yourdomain.com)
RESEND_API_KEYEmail delivery API key
ANTHROPIC_API_KEYRequired for AI agent features
PUSHER_APP_ID / PUSHER_SECRETRequired 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.sql

Set 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 guddesk

Always review the changelog before updating to check for breaking changes or required migration steps.

System Requirements

ResourceMinimumRecommended
CPU1 vCPU2+ vCPU
RAM1 GB2+ GB
Storage10 GB20+ GB
PostgreSQL15+16+
Node.js20+22 LTS