Skip to content

bnema/gordon

Repository files navigation

Gordon

License: GPL-3.0 Go Report Card

Self-hosted container deployment. Push an image, Gordon routes it to the web.


What is Gordon?

Gordon is a private container registry and HTTP reverse proxy for your VPS. Push a container image that exposes a web port — Gordon deploys it with zero downtime.

Quick Start

# Install
curl -fsSL https://gordon.bnema.dev/install.sh | sh

# Start the server
gordon serve

Config is created at ~/.config/gordon/gordon.toml. See the Getting Started guide for full setup.

Deploy with the CLI

Build locally, push directly to your Gordon server:

# Push an image and deploy it to a domain
gordon push app.example.com --image myapp:latest

# Or add a route manually, then deploy
gordon routes add app.example.com myapp:latest
gordon routes deploy app.example.com

# Check status
gordon status

Roll back, restart, or manage secrets — all from the command line:

gordon rollback app.example.com    # Revert to a previous image tag
gordon restart app.example.com     # Restart the container
gordon secrets set app.example.com DB_HOST=db.internal API_KEY=secret123

Deploy from CI/CD

Push to Gordon's registry from any CI pipeline. Gordon deploys automatically on image push.

GitHub Actions

- uses: bnema/gordon/.github/actions/deploy@main
  with:
    registry: registry.mydomain.com
    username: ${{ secrets.GORDON_USERNAME }}
    password: ${{ secrets.GORDON_TOKEN }}

Docker CLI

docker login registry.mydomain.com
docker build -t registry.mydomain.com/myapp:v1.0.0 .
docker push registry.mydomain.com/myapp:v1.0.0
# -> Deployed automatically

See the Deploy Action README for multi-platform builds, monorepo support, and all available options.

CLI Commands

Server

Command Description
gordon serve Start the Gordon server
gordon status Show server and route health
gordon config show Display server configuration

Deployment

Command Description
gordon push <domain> Tag and push an image to deploy
gordon routes list List all routes
gordon routes add <domain> <image> Create or update a route
gordon routes remove <domain> Remove a route
gordon routes deploy <domain> Redeploy a route
gordon rollback <domain> Roll back to a previous image
gordon restart <domain> Restart a route container

Images & Registry

Command Description
gordon images list List runtime and registry images
gordon images prune Clean up dangling images and old tags
gordon images tags <repo> List registry tags for a repository

Secrets & Config

Command Description
gordon secrets list <domain> List secrets for a route
gordon secrets set <domain> KEY=VAL Set secrets
gordon secrets remove <domain> <key> Remove a secret

Remotes & Auth

Command Description
gordon remotes list List remote Gordon endpoints
gordon remotes add <name> <url> Add a remote
gordon remotes use <name> Set the active remote
gordon auth login Authenticate to a remote
gordon auth token generate Generate a JWT token

Features

  • Private Docker registry on your VPS
  • Domain-to-container routing via HTTP reverse proxy
  • Automatic deployment on image push
  • Auto-routing from image labels
  • Remote CLI management
  • Zero downtime updates
  • Persistent volumes from Dockerfile VOLUME directives
  • Environment variable management with secrets support
  • Network isolation per application
  • Single binary, ~15MB RAM

Documentation

Full documentation at gordon.bnema.dev

  • Docs — Installation, configuration, CLI reference
  • Wiki — Tutorials, guides, and examples

Community

License

GPL-3.0 — Use freely, contribute back.

About

Minimalist self-hosted containerized webapp deployment tool.

Topics

Resources

License

Stars

Watchers

Forks

Contributors

Languages