Your own Render,on one machine
Deploy from a git repo, a folder or a Docker image, with zero downtime. Add Postgres, Redis, cron jobs, custom domains and HTTPS, all on one server with Docker.
Install it on a fresh Ubuntu or Debian server with one command:
curl -fsSL https://github.com/rogerbentcha/ferry/releases/latest/download/install.sh | sudo shDeploy from your terminal and watch it go live
ferry up packs the folder, builds it and starts the new deploy next to the live one. Once its health check passes, the proxy sends it every new request in one step, and the old deploy stops after answering the requests it already had. Put the pointer on the harbor to slow the deploy down.
Builds and runs the stack you already have
- Node.js
- Python
- Go
- Rust
- Ruby
- Dockerfile
- Postgres
- Redis
- GitHub
- GitLab
- Let’s Encrypt
- nginx
Everything your apps needfrom the deploy to the database
One binary on one machine. The API, the dashboard, the builder, the proxy and the scheduler all run inside ferryd, and Docker is the only dependency.
Deploy froma git repository
GitHub, GitLab, any SSH URL or a local path. Add a GitHub webhook and every push to the branch deploys.
No Dockerfile needed: Ferry detects Node.js, Python, Go, Rust, Ruby and static sites, and uses your Dockerfile when there is one.
How builds workferry create api --repo https://github.com/you/api --branch main --followCreated web service 'api' (srv-8k2m4x7q1c9w5v3b6n0t)URL: https://api.example.comDeploy dep-c5n8x1q7k2w9v4b6m3ta queued (create), streaming logs…==> Cloning from https://github.com/you/api (branch main)==> Checked out 7c1e2f4: Add a health check==> Detected Node.js runtime==> Build successful 🎉==> Health check passed==> Your service is live 🎉==> Available at https://api.example.com
One command on a fresh serveror build it on your own machine
On Ubuntu 22.04, 24.04 or 26.04, or Debian 12 or 13 (x86_64 or arm64), the install script sets up Docker, git and Ferry as a systemd service. Elsewhere you need Docker, and Docker Desktop is fine on a Mac. To build from source you also need Rust 1.89 or later and Node.js 20 or later.
Install on your server
Run it as root or with
sudo. Run it again to upgrade: your apps, data and settings stay.curl -fsSL https://github.com/rogerbentcha/ferry/releases/latest/download/install.sh | sudo shOpen the dashboard
The script ends with an SSH tunnel and a link. Run the tunnel on your computer, then open the link to create your account.
ssh -N -L 7878:127.0.0.1:7878 root@your-serverOr build and start it on your machine
ferrydstarts in the background and prints a link: open it to create your account.ferryd stopstops the server.git clone https://github.com/rogerbentcha/ferry && cd ferry(cd web && npm ci && npm run build)cargo build --release./target/release/ferryd
Deploy the example app
In the clone,
ferry loginopens the dashboard, where you approve the terminal. The dashboard is athttp://127.0.0.1:7878.export PATH="$PWD/target/release:$PATH"ferry logincd examples/node-hello && ferry up --followcurl http://node-hello.localhost:8080
Put it on a server
Point a wildcard DNS record at the server, then give the install script your domain with --base-domain. Add --acme-email and it gets HTTPS certificates from Let’s Encrypt.
Click, type or script it
Manage everything from the web dashboard, the ferry CLI or the REST API. The API is described in OpenAPI 3.1, and each server has its own Swagger UI at /api/docs.
Open source, MIT licensedRead it, run it, change it
Ferry is built in the open, in Rust. Your apps run as plain Docker containers and your data stays in Docker volumes on your own machine.
ferrydThe server: wires everything togetherferry-apiREST API, live events, OpenAPI, the dashboardferry-engineDeploys, the reconciler, cron, datastores, logsferry-buildGit fetch, runtime detection, image buildsferry-proxyReverse proxy with HTTP/2 and WebSocketsferry-tlsCertificates from Let’s Encryptferry-dockerA typed Docker clientferry-coreModels, the SQLite store, validationferry-cliThe ferry command
Your own Render, on one machine
Start the server, run ferry up in a folder and open the URL it gives you.