Zero-downtime Docker deployments over SSH.
No Kubernetes. No complexity. Deploy containers to your own servers with automatic HTTPS via Caddy.
Deploy with confidence
Odysseus deploys containerized applications to your servers using SSH and Docker. New containers start, pass health checks, and receive traffic before old ones stop. If anything goes wrong, the old container keeps running.
Caddy runs as a container on each server, handling reverse proxying and automatic HTTPS certificates via Let's Encrypt. No manual nginx configs, no certbot.
Features
Zero-downtime deploys
New containers start and pass health checks before old ones stop. Traffic switches seamlessly with no dropped requests.
Automatic HTTPS
Caddy handles SSL certificates via Let's Encrypt automatically. Define your domain in config, Odysseus does the rest.
No registry required
Push images directly to servers via SSH using pussh — nothing to host, pay for, or authenticate against. Install the docker-pussh plugin on the machine you deploy from; registry-based deploys aren't officially supported yet.
Minimal server requirements
Just Docker and SSH access — any Linux distro works. Odysseus setup can install Docker for you on a fresh Ubuntu host. Caddy is deployed as a managed container automatically — no manual installation.
Host setup and diagnosis
Odysseus setup prepares a fresh Ubuntu host — deploy user, docker group, your key, Docker itself — enough for one host, with provisioning at scale left to OpenTofu or equivalent. Odysseus doctor reads a host back and reports whether it can be used, however it was prepared.
Roles & dependencies
Deploy web servers, background workers, databases, and Redis from one config. Each role can have different resources and commands.
Encrypted secrets
Built-in AES-encrypted secrets management. Generate a key, encrypt your secrets file, and deploy with confidence.
Health checks
Configurable HTTP health checks with thresholds. Containers only receive traffic after passing consecutive checks.
Plugin architecture (Sails)
Extend Odysseus with deploy strategy plugins. Rolling deploys, canary releases, and more — each as a separate gem.
How it works
Your machine
odysseus deploy
Your server
Docker + Caddy
Build
Docker image built locally or on a remote build host
Push
Image transferred to servers via SSH (pussh)
Start
New container starts on the Docker network
Health check
Odysseus polls the health endpoint until it passes
Route
Caddy updated to send traffic to the new container
Drain & cleanup
Old container drained and stopped, old containers cleaned up
One YAML file. That's it.
Servers & roles
Define web servers, workers, and their resource limits. Deploy different configurations to different hosts.
Automatic HTTPS proxy
Set your domain and port. Caddy handles certificates, routing, and health-check-based traffic switching.
Dependencies
Databases, Redis, and other services managed alongside your app. Named volumes are automatically namespaced to prevent collisions.
Quick Start
From zero to deployed.
Odysseus Pro
Advanced deploy strategies, web dashboard, and audit logs for production-critical infrastructure.
Learn more