The Smart Way to Deploy Containers on Your VPS
Push image → Auto-deploy → Zero complexity
## Why Gordon?
**You have a $5 VPS. You want to run multiple apps. You don't want complex CI/CD pipelines, expensive PaaS solutions, or overcomplicated orchestration.**
Gordon is the missing piece that makes container deployment on budget VPS servers as simple as expensive PaaS solutions. One binary, one config file, unlimited apps.
### Perfect For
- **Solo developers** with multiple side projects on one VPS
- **Small teams** who want Heroku-like simplicity without the cost
- **Agencies** deploying client apps across VPS servers
- **Anyone** tired of complex deployment pipelines
## How It Works
```bash
# 1. Build & test locally
podman build -t myapp .
podman run -p 8080:8080 myapp # Works? Great!
# 2. Push to deploy
podman tag myapp registry.mydomain.com/myapp:latest
podman push registry.mydomain.com/myapp:latest
# 3. That's it. Gordon deploys it automatically.
```
**No build servers. No CI/CD complexity. If it runs on your machine, it runs in production.**
## Key Features
- **Local-First Development**: Your machine is the build server
- **Built-in Container Registry**: Your VPS becomes a private registry
- **Push-to-Deploy**: New images deploy instantly
- **Multi-Domain Routing**: Unlimited apps with automatic HTTPS via Cloudflare
- **Zero-Downtime Updates**: Graceful container swaps
- **Network Isolation**: Each app gets its own isolated network with attached services (databases, caches, etc.)
- **Auto-Route Creation** (Optional): Push `myapp.mydomain.com:latest` → route created automatically
- **Auto-Volume Management**: Zero-config persistent storage from Dockerfile VOLUME directives
- **Auto-Environment Injection**: Dockerfile ENV directives automatically merge with your custom environment variables
## Quick Start (5 minutes)
### 1. Setup VPS
```bash
# Install essentials on Ubuntu/Debian
sudo apt update && sudo apt install -y podman ufw
# Configure firewall
sudo ufw --force enable
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp 80/tcp 443/tcp
sudo ufw enable
```
### 2. Redirect Ports
```bash
# Redirect 80/443 to 8080
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8080
sudo apt install -y iptables-persistent
sudo netfilter-persistent save
```
### 3. Enable Rootless Containers
```bash
echo 'user.max_user_namespaces=28633' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
sudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 $USER
systemctl --user enable --now podman.socket
```
### 4. Configure Registry
```bash
mkdir -p ~/.config/containers
tee ~/.config/containers/registries.conf > /dev/null <