Show HN: DCD – Deploy Docker Compose apps to any VPS with one command

4 g1ibby 2 6/3/2025, 1:39:13 PM github.com ↗
Hi HN, I built DCD (https://github.com/g1ibby/dcd ) to simplify deploying my Docker Compose based personal projects and side-hustles to cheap VPS instances.

I found managed platforms could get pricey/restrictive, and full K8s/complex CI felt like overkill for simple apps. Manual SSHing, git pull, docker-compose up was tedious and error-prone.

DCD aims for Heroku-like simplicity on your own server. If docker-compose up works locally, you deploy with: dcd up user@ssh-ip

It syncs your compose files, relevant local volumes, and .env files to your server via SSH/SFTP, then runs docker compose up -d. It can also (optionally) help install Docker/Compose on the remote server if needed (Debian/Ubuntu focused for now).

Key things: * Single command deploy: dcd up user@your-server.com * Cost-effective: Use any cheap VPS. * GitHub Actions integration: Simple YAML for CI/CD. Example: https://github.com/g1ibby/homellm/blob/main/.github/workflow... * Written in Rust.

Current Limitations (Important!): * No build: support yet: DCD expects pre-built images from a Docker registry. It won't build images on the remote server from a build: context in your compose file. * Platform focus: Best tested on Debian/Ubuntu. Other Linux distros might work but are less tested.

Installation: * Homebrew: brew install g1ibby/dcd/dcd * Cargo: cargo install dcd * Binaries: https://github.com/g1ibby/dcd/releases

I built this to solve my own pain point and hope it might be useful for others running personal projects, self-hosting, or small applications where you want control without heavy orchestration.

Would love to get your feedback and hear how you're currently deploying similar setups!

Comments (2)

krstak · 17h ago
I use Docker Compose a lot in production because my clients are businesses that need internal software. There’s no need for big scaling or complex tools like Kubernetes, docker compose works great for what I need.

I usually deploy everything over SSH, just like you described.

To send images to the server, I build them locally, save them to a file using docker save, copy that file to the server, and load it there with docker load. This way, I don’t need to use any remote image registry. I have a script that handles it all, and it might be helpful for others who also want to avoid using a registry.

I also manually copy over the nginx.conf file and run it once when setting up a new project.

For SSL, I run certbot manually as well.

When I move files to the server, I like to put everything—including the volumes—in a specific folder so it stays organized the way I like.

Just wanted to share how I’m using it, maybe it gives you some ideas for future improvements to your tool.

Anyway, your tool looks really promising. If I were you, I’d definitely keep working on it. There are plenty of developers who would find it useful.

johng · 3d ago
Neat, looks like a time saver.

Edit: Would be neat if this opened up ports with UFW... I still uses it on quite a few servers.