dcd

Crates.iodcd
lib.rsdcd
version0.2.3
created_at2025-05-21 08:25:56.665928+00
updated_at2025-05-30 04:03:56.301388+00
descriptionDocker Compose Deployment tool for remote servers
homepage
repositoryhttps://github.com/g1ibby/dcd
max_upload_size
id1683025
size4,017,788
Sergey Varibrus (g1ibby)

documentation

README

⚡ DCD - Deploy Docker Apps in Seconds, Not Hours

Crates.io Downloads Stars License: MIT CI

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


DCD in action - deploy in seconds

Deploy your Docker app to production in one command ⚡

💡 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. 🎉
dcd up user@your-server.com

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
brew install g1ibby/dcd/dcd

# Other platforms
cargo install dcd

Or download from releases

Deploy Your First App

# 1. Have a docker-compose.yml? ✅
# 2. Have SSH access to a server? ✅  
# 3. Deploy!
dcd up user@your-server.com

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

ssh user@my-server.com
cd /opt/homellm
git pull origin main
docker-compose down
docker-compose pull
docker-compose up -d

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:

dcd up user@my-server.com

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
ssh user@server
git pull
docker-compose down
docker-compose pull  
docker-compose up -d

With DCD:

dcd up user@server

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

📋 Full Command Reference

Commands

  • dcd analyze - Preview what will be deployed
  • dcd up <target> - Deploy or update your app
  • dcd status <target> - Check deployment status
  • dcd destroy <target> - Clean removal

Global Options

-f, --file <FILES>...       Docker Compose files
-e, --env-file <FILES>...   Environment files  
-i, --identity <KEY>        SSH private key (Auto-detects ~/.ssh/id_rsa or ~/.ssh/id_ed25519 if not specified)
-w, --workdir <DIR>         Remote working directory
-v, --verbose               Debug output

Examples

# Multiple compose files
dcd -f docker-compose.yml -f docker-compose.prod.yml up user@server

# Custom SSH key and port
dcd -i ~/.ssh/deploy_key up user@server.com:2222

# Different environment
dcd -e .env.production up user@prod-server.com
🔄 GitHub Actions Integration

Basic Setup

name: Deploy
on:
  push:
    branches: [main]
    
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 }}
⚙️ Technical Details

How DCD Works

  1. Analyzes your Docker Compose configuration locally
  2. Syncs necessary files to your server via SSH/SFTP
  3. Installs Docker if needed (optional)
  4. Deploys using docker compose up
  5. Verifies health checks pass
  6. 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.dcd file 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)

brew install g1ibby/dcd/dcd

Using Cargo

cargo install dcd

Download Binary

Get the latest release for your platform:

Verify Installation

dcd --version

🚀 Ready to Deploy Faster?

Stop spending hours on deployment setup. Start shipping features.

# Install DCD
brew install g1ibby/dcd/dcd  # macOS
# cargo install dcd         # Other platforms

# Deploy your app
dcd up user@your-server.com


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.

Built with 🦀 Rust for maximum performance and reliability
Commit count: 79

cargo fmt