Self-host anything without hassle. Inspired by Fly, Coolify and Kamal.
Ferry is a lightweight terminal based alternative to Coolify. No runtime overhead. Config as code. Just a single CLI to deploy, preview and manage your Docker containers on any VPS.
Ferry is conceptually similar to Kamal, but does not and gives more out of the box. Preview deployments, secure your VPS and scale resources all from a CLI.
Ferry allows you to deploy Docker based apps to your own VPS. It provides a simple way to manage deployments, environment variables, logs, databases, rollbacks and more across multiple servers. And the beauty of it costs you nothing on top of your existing VPS hosting. It's stateless, config-as-code and no overhead on your machine.
Ferry is build on proven, boring technologies that do not promote any vendor lock-in. It's built on top of Traefik, Docker, Go and SSH.
- 💻 Deploy any application from a Dockerfile or docker-compose file
- ✊ Zero downtime deployment
- 🌏 High availability and load balancing
- 🔒 Zero config SSL Certs and auto renewal
- 🔑 Deploy and update environment variables with SOPS, Ansible Vault or Infisical
- 📄 View logs in real time
- 🔄 Rollback to previous versions
- 🚀 One command deployment
- Preview changes before deployment on a custom domain
- Setup your VPS with a single command
- init
- exec - run a remote command through SSH (used in other commands)
- proxy - abstract away all Traefik related logic (or kamal-proxy logic); used in preview and deploy
- logs - basical
- deploy - abstracts away all docker related deployment logic
- rollback
- env - abstracts away all ENV related logic (or infisical, sops, ansible vault)
- preview
go install github.com/ronxjansen/ferry@latest
cd ferry
go install
Before you can get started, this is what you will need:
- a Ubuntu LTS VPS with SSH access to it
- Traefik, SOPS and Docker installed on your VPS
- a git repo with a Dockerfile
That's it!
- Go 1.16 or later
- SSH access to remote servers
- a Ubuntu LTS VPS with SSH access to it
Contributions are welcome! Please open an issue or submit a PR.
Kamal and Sidekick are two major inspirations for writing this tool. Kamal is a great solution, but Ruby based. Sidekick is the Golang based Kamal alternative, yet very early stage. I've considered to write a few PR's, but considering the scope of the changes I wanted to bring, I decided to built it from scratch.
Ferry is intended to be less opinionated (you can use it without sops), has support for databases, allows you to inspect your production containers, monitor CPU, memory and log traffic in real time.
- Deploy databases (using docker or docker compose)
- Add
vps doctorcommand to check if your VPS is ready to go (has docker, ssh access) - Support multiple server nodes
- Add
initcommand to create a configuration - Parse current Config and parse current docker containers running and build config state from that
- Add SOPS, or Infisical or Ansible Vault support (maye can we manage this through a CLI / interactive editor?)
- Local build and deploy
- Generate a preview of the changes before applying them
- Hooks - run scripts before, during and after deploy
- Docker compose support
- Migrations
- Rolling restarts
- Rollback
- Better zero downtime deployment (we now only rely on Traefik)
- Add support for more Linux distros
- Asset bridging
- Minimal dashboard + metrics in a terminal UI (traffic, CPU, memory, etc.)
- Use Kamal-proxy instead of Traefik?
At least for the forseeable future, the following features are not in scope:
- Load balancing - you can build and deplly your own load balancer, using Ferry
- VPS provisioning (setting up Traefik, Docker, SOPS, etc.)
- VPS SSH and firewall hardening
- Windows support
- Docker compose support
