Overview
Dokploy is your current deployment platform - a Docker-based deployment tool with web UI, Traefik reverse proxy, and Let’s Encrypt SSL integration.This is the production-tested method currently running RippleCore on your Hetzner CPX32 VPS.
Why Dokploy?
Simple Setup
One-line installer gets you running in minutes
Web UI
Manage deployments through intuitive dashboard
Automatic SSL
Free Let’s Encrypt certificates with auto-renewal
Git Integration
Deploy directly from GitHub/GitLab repositories
Prerequisites
VPS Requirements
VPS Requirements
- Hetzner CPX32 (4 vCPU, 8GB RAM) or equivalent
- Ubuntu 24.04 LTS (recommended) or 22.04
- Root or sudo access
- Public IPv4 address
Domain Setup
Domain Setup
- Registered domain name
- DNS access (Cloudflare, Namecheap, etc.)
- A records pointing to VPS IP
Local Tools
Local Tools
- SSH client
- Git
- Code editor
Installation
Step 1: Prepare VPS
SSH into your Hetzner VPS:Step 2: Configure Firewall
Step 3: Install Docker
Dokploy requires Docker. Install using official script:Step 4: Install Dokploy
One-line installer:- Install Docker (if not already installed)
- Install Docker Compose
- Set up Traefik reverse proxy
- Create Dokploy containers
- Configure SSL with Let’s Encrypt
Step 5: Access Dashboard
Open browser and navigate to:- Email:
your-email@example.com - Password: Strong password (save to password manager)
DNS Configuration
Add A Records
In your domain registrar, add these A records:| Type | Name | Value | TTL |
|---|---|---|---|
| A | @ | 46.224.2.100 | Auto |
| A | www | 46.224.2.100 | Auto |
| A | app | 46.224.2.100 | Auto |
| A | api | 46.224.2.100 | Auto |
| A | docs | 46.224.2.100 | Auto |
yourdomain.com→ Marketing websiteapp.yourdomain.com→ Main applicationapi.yourdomain.com→ API servicesdocs.yourdomain.com→ Documentation
Verify DNS Propagation
Deployment Workflow
Phase 1: Infrastructure Services
1. PostgreSQL 18
- Dokploy Dashboard → New Service → Database → PostgreSQL
- Configuration:
- Deploy and wait for “Running” status
2. Redis 7
- Dokploy Dashboard → New Service → Database → Redis
- Configuration:
- Deploy and wait for “Running” status
Phase 2: Database Migrations
Create Migration Job
- Dokploy Dashboard → New Service → Application
-
Configuration:
-
Environment Variables:
-
Advanced Settings:
- Deploy and monitor logs
Phase 3: Main Application
Generate Better Auth Secret
Run locally:Deploy App
- Dokploy Dashboard → New Service → Application
-
Git Source:
-
Build Arguments (in Build Args section):
-
Environment Variables (runtime):
-
Domain Configuration:
-
Port Mapping:
-
Resource Limits:
-
Health Check:
- Deploy and monitor build logs
Phase 4: API Service
Follow same pattern as App, with these differences:Phase 5: Marketing Website
Phase 6: Documentation (Optional)
Verification
Test Health Endpoints
Test SSL Certificates
Test Application
- Navigate to
https://app.yourdomain.com - Sign up for account
- Verify email functionality
- Test evidence logging (kindness, volunteer, etc.)
Monitoring
Dokploy Built-in Monitoring
Access via dashboard:- CPU usage per container
- Memory usage per container
- Request rate
- Container logs
Log Viewing
Set Up Alerts
In Dokploy dashboard:- Settings → Notifications
- Add email or webhook for:
- Health check failures
- High CPU/Memory usage
- Deployment failures
Updating Deployments
Code Updates
Database Schema Updates
Environment Variable Updates
- Dokploy Dashboard → Apps → [app-name] → Environment
- Edit variables
- Restart container
- Verify with health check
Troubleshooting
Build Failures
Build Failures
Issue: “Cannot find module ‘@repo/…’”Fix:
- Verify build context is
.(monorepo root) - Check
pnpm-workspace.yamlis copied in Dockerfile - Ensure COPY command includes all packages
Database Connection Failed
Database Connection Failed
Issue: 503 health check responsesFix:Verify connection string format:
SSL Certificate Not Generated
SSL Certificate Not Generated
Issue: Let’s Encrypt SSL failingFix:
- Verify DNS points to correct IP:
dig app.yourdomain.com - Check firewall allows ports 80/443:
ufw status - Wait for DNS propagation (up to 48 hours)
- Check Dokploy logs for Let’s Encrypt errors
Container Keeps Restarting
Container Keeps Restarting
Issue: App container in restart loopFix:
Resource Optimization
Current Allocation (Hetzner CPX32)
Optimization Tips
- Enable caching - Redis cache already configured
- Use health checks - Automatic recovery from failures
- Monitor metrics - Watch for high CPU/memory usage
- Scale resources - Upgrade to CPX42 if needed (8 vCPU, 16GB RAM)
Pros & Cons
Advantages
- Simple web UI
- Automatic SSL
- Git integration
- Quick deployment
- Production-tested
Limitations
- Basic monitoring
- Limited rollback
- Fewer integrations
- Single-server focus
Migration Path
From Dokploy to Coolify
If you need more features, see Coolify deployment guide. Migration steps:- Set up Coolify on new VPS
- Deploy RippleCore to Coolify
- Test thoroughly
- Update DNS to point to new VPS
- Monitor for 24 hours
- Decommission Dokploy VPS
From Dokploy to Docker Compose
For maximum control, see Docker Compose guide. Migration steps:- Export Dokploy configurations
- Create docker-compose.yml
- Set up Traefik manually
- Configure Let’s Encrypt
- Deploy and test
Next Steps
Monitoring Setup
Configure alerts and log aggregation
Backup Strategy
Set up database and volume backups
Explore Alternatives
Compare other deployment methods
Performance Tuning
Optimize resource allocation
Production Deployment Complete! Your RippleCore instance is now running with Dokploy on Hetzner VPS.
