⚡ DCD - Deploy Docker Apps in Seconds, Not Hours
The simplest way to deploy Docker Compose applications to any server
Stop wrestling with complex CI/CD. Start shipping faster.
🎯 Quick Start • 🔥 Features • 📖 Examples • 🛠️ Install
💡 The Problem Every Developer Knows
You've built something amazing locally. docker-compose up works perfectly. Now you need to deploy it...
Option 1: Managed Platforms
- 💸 Expensive as you scale
- 🔒 Vendor lock-in
- ⚙️ Limited customization
- 🚫 Not all apps supported
Option 2: Complex CI/CD
- 📚 Hours learning Kubernetes/Docker Swarm
- 🔧 Complex pipeline setup
- 🐛 More things to break
- ⏰ Weeks to get right
What if there was a third way?
✨ Meet DCD - Your Deploy Button for Any Server
DCD gives you the simplicity of Heroku with the power of your own server. Deploy Docker Compose apps to any VPS with a single command.
# That's it. Your app is live. 🎉
Perfect for:
- 🏗️ Personal projects that outgrew localhost
- 💡 Side hustles that need production deployment
- 🚀 Startups wanting infrastructure control
- 👨💻 Developers who value simplicity over complexity
🔥 Why Developers Love DCD
🎯 Zero Configuration Deployment
No YAML hell, no pipeline setup. If it runs with docker-compose, it deploys with DCD.
⚡ Lightning Fast
From code change to live production in under 30 seconds. No build queues, no waiting.
🔒 Your Infrastructure, Your Rules
Deploy to any Linux server you control. Keep your data, control your costs.
🔄 GitHub Actions Ready
Drop-in action for automatic deployments. Perfect CI/CD in 5 lines of YAML.
💰 Save Money
$5/month VPS vs $20+/month managed platform. DCD pays for itself immediately.
🚀 Quick Start
Install DCD
# macOS
# Other platforms
Or download from releases
Deploy Your First App
# 1. Have a docker-compose.yml? ✅
# 2. Have SSH access to a server? ✅
# 3. Deploy!
# That's literally it. Your app is live!
Setup Automatic Deployments
Add this to .github/workflows/deploy.yml:
- name: Deploy to production
uses: g1ibby/dcd/dcd-deploy@v1
with:
target: ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}
ssh_private_key: ${{ secrets.SSH_PRIVATE_KEY }}
Push to main = instant deployment ⚡
🌟 Real-World Success Story
Why I Built DCD - My HomeLLM Deployment Story
I created DCD to solve my own deployment frustrations while building HomeLLM - a self-hosted AI platform with Open WebUI, LiteLLM proxy, PostgreSQL, and Traefik.
The Pain Before DCD: Every deployment was a manual nightmare:
This process took 5-10 minutes and often failed. I avoided deploying updates, which meant bugs stayed unfixed and features took weeks to reach production.
After Building DCD:
The transformation:
- ⚡ 10x faster
- 🔄 100% reliable
- 🚀 Deploy confidence
- 🎯 Focus on features
See the live deployment workflow →
Now HomeLLM automatically deploys every time I push to main. What used to be a stressful weekend task is now a seamless part of my development flow.
Real-World Examples
The Side Project That Became Profitable
Before DCD:
# Every deployment was a nightmare
With DCD:
Result: Went from deploying once a week (too scary) to deploying multiple times per day. Shipped features faster, caught bugs earlier, grew revenue 3x.
🎯 Perfect For Your Stack
What Works Great
- 🐳 Any Docker Compose app
- 🌐 Web apps (React, Vue, Next.js...)
- 🗄️ Full-stack apps with databases
- 🤖 AI/ML applications
- 📊 Data analytics platforms
- 🔗 API services and microservices
Supported Platforms
- 🐧 Ubuntu/Debian servers
- ☁️ Any VPS (DigitalOcean, Linode, AWS EC2...)
- 🏠 Self-hosted servers
- 🔒 Private infrastructure
🛠️ Advanced Features
Commands
dcd analyze- Preview what will be deployeddcd up <target>- Deploy or update your appdcd status <target>- Check deployment statusdcd destroy <target>- Clean removal
Global Options
)
Examples
# Multiple compose files
# Custom SSH key and port
# Different environment
Basic Setup
name: Deploy
on:
push:
branches:
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: g1ibby/dcd/dcd-deploy@v1
with:
target: ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}
ssh_private_key: ${{ secrets.SSH_PRIVATE_KEY }}
Advanced Configuration
- uses: g1ibby/dcd/dcd-deploy@v1
with:
command: up
target: ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}
compose_files: "docker-compose.yml docker-compose.prod.yml"
env_files: ".env.prod"
ssh_private_key: ${{ secrets.SSH_PRIVATE_KEY }}
remote_dir: "/opt/myapp"
no_health_check: false
Environment Management
jobs:
deploy:
environment: production # GitHub environment with secrets
env:
DATABASE_URL: ${{ secrets.DATABASE_URL }}
API_KEY: ${{ secrets.API_KEY }}
How DCD Works
- Analyzes your Docker Compose configuration locally
- Syncs necessary files to your server via SSH/SFTP
- Installs Docker if needed (optional)
- Deploys using
docker compose up - Verifies health checks pass
- Reports success or failure
File Synchronization
- Automatically detects referenced files in volumes
- Syncs only what's needed
- Preserves file permissions
- Creates backups before updates
Environment Variables
- Scans compose files for variable usage
- Sources from local environment
- Generates
.env.dcdfile for remote deployment - Secure handling of secrets
Security
- Uses SSH key authentication
- Files transferred over encrypted SFTP
- No credentials stored on remote server
- Configurable working directories
🤝 Join the Community
🌟 Show Your Support
Star this repo if DCD helps your deployments! ⭐
🐛 Found a Bug?
Open an issue - we respond fast!
💡 Have Ideas?
Join discussions and help shape DCD's future.
🔗 Spread the Word
📦 Installation
macOS (Homebrew)
Using Cargo
Download Binary
Get the latest release for your platform:
Verify Installation
🚀 Ready to Deploy Faster?
Stop spending hours on deployment setup. Start shipping features.
# Install DCD
# cargo install dcd # Other platforms
# Deploy your app
Made with ❤️ for developers who want to ship, not configure
🐛 Report Bug • 💡 Request Feature • 📖 Documentation
📝 Current Limitations
While DCD handles most Docker Compose deployments perfectly, there are a few current limitations:
- Build Context: Services using
build:directive aren't supported yet. Use pre-built images from registries instead. - Platform Support: Currently optimized for Debian/Ubuntu systems. Other Linux distributions may need adjustments.