4.4 KiB
4.4 KiB
Deckerr Docker Deployment
Self-host Deckerr with two deployment options:
Deployment Options
| Option | Use Case | Complexity |
|---|---|---|
| External Supabase | Use hosted Supabase (cloud or paid) | Simple |
| Self-hosted Supabase | Run everything locally | Advanced |
Option 1: External Supabase (Recommended)
Use your own Supabase instance (cloud, paid hosted, or separately self-hosted).
Quick Start
# 1. Copy environment template
cp .env.example .env
# 2. Edit .env with your Supabase credentials
VITE_SUPABASE_URL=https://your-project.supabase.co
VITE_SUPABASE_ANON_KEY=your-anon-key
PORT=3000
# 3. Run database migrations on your Supabase
# Go to Supabase Dashboard > SQL Editor and run:
# Contents of supabase/migrations/20250131132458_black_frost.sql
# 4. Start Deckerr
docker-compose up -d
# 5. Access at http://localhost:3000
Using Hosted Supabase (Paid Service)
Contact the Deckerr team for access credentials to use the hosted backend.
Option 2: Self-Hosted Supabase (Full Stack)
Run Deckerr with a complete self-hosted Supabase stack.
Prerequisites
- Docker & Docker Compose
- 2GB+ RAM
- Ports: 3000, 5432, 8000
Quick Start
# 1. Copy environment template
cp .env.example .env
# 2. Generate secure keys
# JWT Secret (required)
openssl rand -base64 32
# Generate Supabase API keys
# Option A: Use online generator at https://supabase.com/docs/guides/self-hosting#api-keys
# Option B: Use Supabase CLI
npx @supabase/cli@latest gen key --type anon --jwt-secret "YOUR_JWT_SECRET"
npx @supabase/cli@latest gen key --type service_role --jwt-secret "YOUR_JWT_SECRET"
# 3. Update .env with your generated values
POSTGRES_PASSWORD=<generated-password>
JWT_SECRET=<generated-jwt-secret>
ANON_KEY=<generated-anon-key>
SERVICE_ROLE_KEY=<generated-service-key>
# 4. Start all services
docker-compose -f docker-compose.selfhosted.yml up -d
# 5. Access Deckerr at http://localhost:3000
# API available at http://localhost:8000
Generate Keys Script
#!/bin/bash
JWT_SECRET=$(openssl rand -base64 32)
echo "JWT_SECRET=$JWT_SECRET"
echo ""
echo "Now generate API keys at:"
echo "https://supabase.com/docs/guides/self-hosting#api-keys"
echo "Use this JWT secret: $JWT_SECRET"
Self-Hosted Services
| Service | Port | Description |
|---|---|---|
| Deckerr | 3000 | Frontend app |
| Kong | 8000 | API Gateway |
| PostgreSQL | 5432 | Database |
| Auth | 9999 | Authentication (internal) |
| REST | 3000 | PostgREST API (internal) |
| Realtime | 4000 | WebSocket (internal) |
Environment Variables
External Supabase Mode
| Variable | Required | Description |
|---|---|---|
VITE_SUPABASE_URL |
Yes | Supabase project URL |
VITE_SUPABASE_ANON_KEY |
Yes | Supabase anonymous key |
PORT |
No | App port (default: 3000) |
Self-Hosted Mode
| Variable | Required | Description |
|---|---|---|
POSTGRES_PASSWORD |
Yes | PostgreSQL password |
JWT_SECRET |
Yes | JWT signing secret (32+ chars) |
ANON_KEY |
Yes | Supabase anonymous key |
SERVICE_ROLE_KEY |
Yes | Supabase service role key |
SITE_URL |
No | Your domain (default: localhost) |
SMTP_* |
No | Email configuration |
Commands
# Start (external Supabase)
docker-compose up -d
# Start (self-hosted)
docker-compose -f docker-compose.selfhosted.yml up -d
# Stop
docker-compose down
# View logs
docker-compose logs -f
# Rebuild after code changes
docker-compose build --no-cache
docker-compose up -d
# Reset database (self-hosted only)
docker-compose -f docker-compose.selfhosted.yml down -v
docker-compose -f docker-compose.selfhosted.yml up -d
Production Checklist
- Use strong passwords (generate with
openssl rand -base64 32) - Configure HTTPS with reverse proxy (nginx, Traefik, Caddy)
- Set up email (SMTP) for password reset
- Configure firewall rules
- Set up backups for PostgreSQL volume
- Consider rate limiting at reverse proxy level
Troubleshooting
Container won't start
docker-compose logs <service-name>
Database connection issues
# Check if database is healthy
docker-compose exec db pg_isready -U postgres
Reset everything
docker-compose down -v
docker-compose up -d --build
Check service health
docker-compose ps