| 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! |
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.