Show HN: DCD – Deploy Docker Compose apps to any VPS with one command
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!
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.
Edit: Would be neat if this opened up ports with UFW... I still uses it on quite a few servers.