Overview

Coolify is a self-hosted platform-as-a-service (PaaS) similar to Dokploy but with more features including built-in monitoring, database backups, and GitHub Actions integration.
Recommended upgrade from Dokploy if you need better monitoring, backups, and more integration options.

Why Coolify?

Better UI/UX

More polished interface than Dokploy

Built-in Monitoring

Comprehensive metrics and log aggregation

Automatic Backups

Database backups with S3 integration

GitHub Actions

Advanced CI/CD integration

Comparison vs Dokploy

FeatureDokployCoolify
Web UIGoodExcellent
SSL Management✅ Let’s Encrypt✅ Let’s Encrypt
MonitoringBasicAdvanced
Database BackupsManualAutomated
GitHub IntegrationBasicGitHub Actions
Multi-ServerNoYes
Resource OverheadMediumMedium-High
CommunityGrowingMature

Prerequisites

Same as Dokploy:
  • Hetzner CPX32 (4 vCPU, 8GB RAM) or equivalent
  • Ubuntu 24.04 LTS
  • Root access
  • Domain with DNS access

Installation

Step 1: Prepare VPS

# SSH into VPS
ssh root@your-vps-ip

# Update system
apt update && apt upgrade -y

# Install essentials
apt install -y curl wget git

Step 2: Configure Firewall

ufw allow 22/tcp    # SSH
ufw allow 80/tcp    # HTTP
ufw allow 443/tcp   # HTTPS
ufw allow 8000/tcp  # Coolify dashboard
ufw enable

Step 3: Install Docker

# Install Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

# Enable Docker
systemctl enable docker
systemctl start docker

Step 4: Install Coolify

One-line installer:
curl -fsSL https://cdn.coollabs.io/coolify/install.sh | bash
Installation takes ~7-10 minutes. The installer will:
  • Install Docker (if needed)
  • Set up Coolify containers
  • Configure Traefik reverse proxy
  • Initialize PostgreSQL for Coolify metadata
  • Set up monitoring stack

Step 5: Access Dashboard

http://your-vps-ip:8000
Create admin account:
Coolify runs on port 8000 by default. You can configure a custom domain for the dashboard.

Initial Configuration

1. Connect Git Provider

  1. SettingsGit SourcesAdd New
  2. Select GitHub or GitLab
  3. Generate Personal Access Token (PAT)
  4. Paste token and save
GitHub PAT Permissions:
  • repo (full control)
  • read:packages
  • write:packages

2. Configure Email (Optional)

For deployment notifications:
  1. SettingsEmail Configuration
  2. Add SMTP details (e.g., Gmail, SendGrid)
  3. Test email delivery

3. Set Up S3 Backup Storage (Optional)

For automated database backups:
  1. SettingsBackup
  2. Add S3 credentials:
    • Access Key ID
    • Secret Access Key
    • Bucket name
    • Region
You can use AWS S3, Backblaze B2, or any S3-compatible storage.

Deployment Workflow

Phase 1: Infrastructure

1. PostgreSQL 18

  1. ResourcesNewDatabasePostgreSQL
  2. Configuration:
    Name: ripplecore-postgres
    Version: 18
    Database: ripplecore
    Username: ripplecore
    Password: [Auto-generated or custom]
    Port: 5432
    
  3. Storage:
    Enable Persistent Volume: Yes
    Volume Size: 20GB
    
  4. Backups (Coolify feature):
    Enable Automated Backups: Yes
    Frequency: Daily at 2:00 AM
    Retention: 7 days
    Destination: S3 bucket
    
  5. Deploy
Connection String:
postgresql://ripplecore:PASSWORD@ripplecore-postgres:5432/ripplecore

2. Redis 7

  1. ResourcesNewDatabaseRedis
  2. Configuration:
    Name: ripplecore-redis
    Version: 7-alpine
    Password: [Auto-generated]
    Port: 6379
    Persistent Volume: Yes
    
  3. Deploy
Connection String:
redis://:PASSWORD@ripplecore-redis:6379

Phase 2: Migrations

  1. ResourcesNewApplication
  2. Git Source:
    Repository: https://github.com/your-username/ripplecore-forge
    Branch: main
    Build Pack: Dockerfile
    Dockerfile: apps/migrations/Dockerfile
    Build Context: .
    
  3. Environment Variables:
    DATABASE_URL=postgresql://ripplecore:PASSWORD@ripplecore-postgres:5432/ripplecore
    NODE_ENV=production
    
  4. Advanced:
    Type: One-time Job
    Restart Policy: Never
    Resources:
      CPU: 0.5
      Memory: 512MB
    
  5. Deploy and monitor logs

Phase 3: Applications

Main App

  1. ResourcesNewApplication
  2. Git Source:
    Repository: ripplecore-forge
    Branch: main
    Auto Deploy: Yes (on push to main)
    Build Pack: Dockerfile
    Dockerfile: apps/app/Dockerfile
    Build Context: .
    
  3. Build Arguments:
    DATABASE_URL=postgresql://ripplecore:PASSWORD@ripplecore-postgres:5432/ripplecore
    REDIS_URL=redis://:PASSWORD@ripplecore-redis:6379
    BETTER_AUTH_SECRET=[Generate with: npx @better-auth/cli secret]
    NEXT_PUBLIC_APP_URL=https://app.yourdomain.com
    NEXT_PUBLIC_WEB_URL=https://yourdomain.com
    
  4. Environment Variables:
    # Infrastructure
    DATABASE_URL=postgresql://ripplecore:PASSWORD@ripplecore-postgres:5432/ripplecore
    REDIS_URL=redis://:PASSWORD@ripplecore-redis:6379
    
    # Auth
    BETTER_AUTH_SECRET=YOUR_SECRET
    BETTER_AUTH_URL=https://app.yourdomain.com
    BETTER_AUTH_TRUST_HOST=true
    
    # URLs
    NEXT_PUBLIC_APP_URL=https://app.yourdomain.com
    NEXT_PUBLIC_WEB_URL=https://yourdomain.com
    
    # System
    NODE_ENV=production
    PORT=3000
    
  5. Domain:
    Domain: app.yourdomain.com
    Force HTTPS: Yes
    Generate SSL: Yes (Let's Encrypt)
    
  6. Health Check:
    Enabled: Yes
    Path: /api/health
    Port: 3000
    Interval: 30s
    Timeout: 10s
    Retries: 3
    
  7. Resources:
    CPU: 1.0
    Memory: 1GB
    
  8. Deploy

API Service

Follow same pattern with:
Name: ripplecore-api
Dockerfile: apps/api/Dockerfile
Domain: api.yourdomain.com
Port: 3002

Marketing Website

Name: ripplecore-web
Dockerfile: apps/web/Dockerfile
Domain: yourdomain.com, www.yourdomain.com
Port: 3001

Environment:
  NEXT_PUBLIC_APP_URL=https://app.yourdomain.com
  NEXT_PUBLIC_WEB_URL=https://yourdomain.com
  NODE_ENV=production
  PORT=3001

GitHub Actions Integration

Coolify supports advanced CI/CD with GitHub Actions:

1. Generate Coolify API Token

  1. SettingsAPI TokensGenerate New
  2. Copy token (save securely)

2. Add GitHub Secrets

In GitHub repository:
  1. SettingsSecrets and variablesActions
  2. Add secrets:
    COOLIFY_API_TOKEN=your_coolify_token
    COOLIFY_WEBHOOK_URL=https://coolify.yourdomain.com/api/webhooks/deploy
    

3. Create Workflow

.github/workflows/deploy.yml:
name: Deploy to Coolify

on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Trigger Coolify Deployment
        run: |
          curl -X POST ${{ secrets.COOLIFY_WEBHOOK_URL }} \
            -H "Authorization: Bearer ${{ secrets.COOLIFY_API_TOKEN }}" \
            -H "Content-Type: application/json" \
            -d '{"branch":"main"}'
Now every push to main automatically triggers Coolify deployment.

Monitoring & Logs

Built-in Metrics

Coolify dashboard shows:
  • CPU usage per container
  • Memory usage per container
  • Network I/O
  • Disk usage
  • Request rate
  • Response times

Log Aggregation

  1. Resources[app-name]Logs
  2. View real-time logs with filtering:
    • Search by keyword
    • Filter by log level
    • Time range selection
    • Export logs

Alerts

Configure notifications:
  1. SettingsNotifications
  2. Add notification channels:
    • Email
    • Slack
    • Discord
    • Telegram
    • Webhook
  3. Set up alerts for:
    • Deployment failures
    • Health check failures
    • High CPU/Memory usage
    • Disk space warnings

Database Backups

Automated Backups

  1. Resourcesripplecore-postgresBackups
  2. Configuration:
    Schedule: Daily at 2:00 AM UTC
    Retention: 7 days
    Destination: S3 bucket
    Compression: gzip
    Encryption: AES-256
    
  3. Save and enable

Manual Backup

  1. Resourcesripplecore-postgresBackups
  2. Create Backup Now
  3. Download or send to S3

Restore from Backup

  1. Resourcesripplecore-postgresBackups
  2. Select backup
  3. Restore
  4. Confirm (this will replace current database)
Always test backup restoration in a staging environment before production.

Migration from Dokploy

  1. Keep Dokploy running on main VPS
  2. Spin up new VPS (Hetzner CX22, €4.49/month)
  3. Install Coolify on test VPS
  4. Deploy RippleCore to Coolify
  5. Test thoroughly (functionality, performance)
  6. Compare experience and features
  7. Decide migration path

Direct Migration Steps

If migrating from Dokploy to Coolify on same VPS:

1. Export Dokploy Data

# Backup PostgreSQL
docker exec ripplecore-postgres pg_dump -U ripplecore ripplecore > backup.sql

# Export environment variables
# Save from Dokploy dashboard

2. Stop Dokploy

# Stop Dokploy services
docker stop $(docker ps -q)

# Optional: Remove Dokploy
docker rm $(docker ps -aq)

3. Install Coolify

Follow installation steps above.

4. Restore Data

# Import database
cat backup.sql | docker exec -i ripplecore-postgres psql -U ripplecore ripplecore

5. Deploy Applications

Follow deployment workflow above. Estimated migration time: 2-3 hours

DNS Cutover

If using different VPS:
  1. Deploy everything to new VPS
  2. Test with /etc/hosts override
  3. Update DNS A records to new IP
  4. Wait for propagation (1-48 hours)
  5. Monitor new VPS for 24 hours
  6. Decommission old VPS

Troubleshooting

Issue: Build failing in CoolifyCheck:
  • Build context is . (monorepo root)
  • Dockerfile path is correct
  • Build arguments are set
  • Logs show specific error
Debug:
# View build logs in Coolify UI
Resources [app] → Deployments → [latest] → Logs
Issue: Let’s Encrypt SSL failingFix:
  • Verify DNS points to VPS: dig app.yourdomain.com
  • Check port 80/443 open: ufw status
  • Wait for DNS propagation
  • Check Coolify logs: SettingsLogs
Issue: Apps can’t connect to PostgreSQLFix:
  • Verify connection string format
  • Check PostgreSQL is running: docker ps | grep postgres
  • Test connection:
    docker exec -it ripplecore-postgres psql -U ripplecore
    
Issue: Webhook not deployingFix:
  • Verify API token is correct
  • Check GitHub webhook delivery logs
  • Ensure Coolify webhook URL is accessible
  • Test webhook manually:
    curl -X POST https://coolify.yourdomain.com/api/webhooks/deploy \
      -H "Authorization: Bearer YOUR_TOKEN"
    

Performance Optimization

Resource Allocation

Recommended for Hetzner CPX32:
PostgreSQL: 1 GB RAM, 0.5 vCPU
Redis: 512 MB RAM, 0.25 vCPU
App: 1 GB RAM, 1.0 vCPU
API: 1 GB RAM, 1.0 vCPU
Web: 512 MB RAM, 0.5 vCPU
Docs: 256 MB RAM, 0.25 vCPU
Coolify: 1.5 GB RAM, 0.5 vCPU
System: 2 GB RAM, 0.5 vCPU

Total: 7.75 GB RAM, 4.0 vCPU

Caching Strategy

Coolify supports Redis caching (already configured in RippleCore):
  • Evidence data: 5-minute TTL
  • Session data: 8-hour TTL
  • Static assets: CDN integration

CDN Integration

For static assets:
  1. Resources[app]Storage
  2. Configure S3-compatible CDN
  3. Set cache headers
  4. Enable compression

Pros & Cons

Advantages

  • Better UI than Dokploy
  • Advanced monitoring
  • Automated backups
  • GitHub Actions
  • Multi-server support
  • Active community

Limitations

  • More resource overhead
  • Steeper learning curve
  • More complex setup
  • Higher memory usage

Cost Comparison

Hetzner CPX32 (€11.99/month)

Dokploy:
  • App overhead: ~500MB RAM
  • Total available: ~7.5GB RAM for apps
Coolify:
  • App overhead: ~1.5GB RAM
  • Total available: ~6.5GB RAM for apps
Conclusion: Coolify uses ~1GB more RAM for platform overhead.

With S3 Backups

Backblaze B2 (cheapest):
  • 10GB storage: ~€0.50/month
  • Download: €0.01/GB
AWS S3:
  • 10GB storage: ~€2.30/month
  • Download fees apply

When to Choose Coolify

Choose Coolify over Dokploy if:
  • ✅ You need built-in monitoring
  • ✅ Automated backups are critical
  • ✅ Using GitHub Actions for CI/CD
  • ✅ Planning multi-server deployment
  • ✅ Want better UI/UX experience
  • ✅ Need advanced notification system
Stick with Dokploy if:
  • ⚠️ Current setup works well
  • ⚠️ Team prefers simpler platform
  • ⚠️ Don’t need advanced features
  • ⚠️ Want to minimize resource overhead

Next Steps

Test in Parallel

Deploy Coolify on test VPS (CX22, €4.49/month)

Migrate from Dokploy

Follow migration guide above

Set Up Monitoring

Configure alerts and log aggregation

Configure Backups

Set up automated S3 backups
Coolify provides the best balance of features and simplicity for teams ready to upgrade from Dokploy.