Help us shape the future of Go! Take the 2026 Go Developer Survey

simpledeploy

module
v1.4.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 12, 2026 License: MIT

README

SimpleDeploy

CI Release GitHub stars

Lightweight deployment manager for Docker Compose apps. Single binary with built-in reverse proxy, automatic TLS, metrics, backups, alerts, and a web dashboard.

Designed for small VPS instances. Targets ~60MB RAM for 10-20 apps.

If SimpleDeploy is useful to you, please star us on GitHub - it helps other self-hosters find the project.

Install

macOS
brew install vazra/tap/simpledeploy
Ubuntu/Debian
curl -fsSL https://vazra.github.io/apt-repo/gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/vazra.gpg
echo "deb [signed-by=/usr/share/keyrings/vazra.gpg arch=$(dpkg --print-architecture)] https://vazra.github.io/apt-repo stable main" | sudo tee /etc/apt/sources.list.d/vazra.list
sudo apt update && sudo apt install simpledeploy
Docker (any Linux distro)
sudo mkdir -p /etc/simpledeploy /var/lib/simpledeploy
curl -fsSL https://raw.githubusercontent.com/vazra/simpledeploy/main/deploy/docker-compose.example.yml \
  | sudo tee /etc/simpledeploy/docker-compose.yml
cd /etc/simpledeploy && sudo docker compose up -d

Uses network_mode: host so Caddy binds 80/443 directly. Image: ghcr.io/vazra/simpledeploy.

Linux (binary)
VERSION=1.4.5   # latest: https://github.com/vazra/simpledeploy/releases # x-release-please-version
ARCH=amd64      # or arm64
FILE="simpledeploy_${VERSION}_linux_${ARCH}.tar.gz"
curl -fsSLO "https://github.com/vazra/simpledeploy/releases/download/v${VERSION}/${FILE}"
curl -fsSLO "https://github.com/vazra/simpledeploy/releases/download/v${VERSION}/checksums.txt"
grep " ${FILE}$" checksums.txt | sha256sum -c - \
  && tar xzf "$FILE" simpledeploy \
  && sudo install -m 0755 simpledeploy /usr/local/bin/simpledeploy

Installs only if the tarball matches the release's checksums.txt.

Build from source
git clone https://github.com/vazra/simpledeploy.git
cd simpledeploy
make build
# binary at bin/simpledeploy

Requires Go 1.22+ and Node.js 18+.

Features

  • Docker Compose deployments via config-as-code (compose files with labels)
  • Reverse proxy with automatic TLS (embedded Caddy, Let's Encrypt)
  • System and container metrics with tiered rollup (raw/1m/5m/1h)
  • Request tracking per app (rate, latency, status codes)
  • Per-app rate limiting via compose labels
  • Scheduled backups for Postgres (pg_dump) and volumes (tar+gzip) to S3 or local
  • Alerts with webhooks (Slack, Telegram, Discord, custom)
  • Log streaming via WebSocket
  • Private registry support for pulling from Docker Hub, GHCR, ECR, ACR, and self-hosted registries
  • Multi-user RBAC with per-app access scoping
  • Remote client CLI with context management (like kubectl)
  • Deploy safety with compose versioning, rollback, and audit trail
  • App lifecycle controls (restart, stop, start, pull, scale) via CLI, API, and UI
  • Web dashboard (embedded Svelte SPA)
  • Single binary, SQLite storage, minimal dependencies

Quick Start

Server Setup
# Generate config
simpledeploy init --config /etc/simpledeploy/config.yaml

# Edit config (set domain, TLS email, master secret)
vim /etc/simpledeploy/config.yaml

# Start server
simpledeploy serve --config /etc/simpledeploy/config.yaml

If installed via .deb, a systemd service is included. Enable with:

sudo systemctl enable --now simpledeploy
Deploy an App

Create a compose file with simpledeploy labels:

services:
  web:
    image: myapp:latest
    ports:
      - "3000:3000"
    labels:
      simpledeploy.domain: "myapp.example.com"
      simpledeploy.port: "3000"
    restart: unless-stopped

Deploy:

# Local (on the server)
simpledeploy apply -f docker-compose.yml --name myapp

# Remote (from your laptop)
simpledeploy context add prod --url https://manage.example.com --api-key sd_...
simpledeploy apply -f docker-compose.yml --name myapp
Create Users and API Keys
simpledeploy users create --username admin --password secret --role super_admin
simpledeploy apikey create --name "ci-deploy" --user-id 1

Development

make dev             # hot-reload API + UI
make test            # Go unit/integration tests
cd ui && npm test    # UI vitest suite (~4s)
make e2e             # full E2E browser tests (needs Docker)

CI runs lint, tests, and build on every PR. E2E tests run on push to main. See CONTRIBUTING.md for details.

Documentation

Full docs: https://vazra.github.io/simpledeploy

Markdown source lives in docs/.

Architecture

simpledeploy (single process)
+-- Caddy (embedded reverse proxy, TLS, rate limiting, request metrics)
+-- API server (REST + WebSocket, management UI)
+-- Reconciler (watches config dir, deploys via Docker Compose CLI)
+-- Metrics collector (Docker stats + gopsutil, every 10s)
+-- Metrics rollup (tiered aggregation + pruning)
+-- Backup scheduler (cron-based, Postgres/volume, S3/local)
+-- Alert evaluator (checks thresholds every 30s, fires webhooks)
+-- SQLite (WAL mode, all state)

License

MIT - see LICENSE and NOTICE.

Directories

Path Synopsis
cmd
simpledeploy command
internal
api
appbundle
Package appbundle builds and parses per-app config ZIP bundles used for export/import.
Package appbundle builds and parses per-app config ZIP bundles used for export/import.
audit/render
Package render pre-renders human-readable summaries for audit events at write time; the rendered string is stored directly in the audit_log row.
Package render pre-renders human-readable summaries for audit events at write time; the rendered string is stored directly in the audit_log row.
configsync
Package configsync mirrors user-editable DB rows to YAML sidecar files on disk.
Package configsync mirrors user-editable DB rows to YAML sidecar files on disk.
deployment
Package deployment detects how the simpledeploy server binary was launched (native vs containerized) so the API can surface mode-appropriate guidance.
Package deployment detects how the simpledeploy server binary was launched (native vs containerized) so the API can surface mode-appropriate guidance.
events
Package events provides an in-process publish/subscribe bus used to push notify-only realtime updates to UI clients via WebSocket.
Package events provides an in-process publish/subscribe bus used to push notify-only realtime updates to UI clients via WebSocket.
fsutil
Package fsutil holds small filesystem helpers that refuse to follow symlinks.
Package fsutil holds small filesystem helpers that refuse to follow symlinks.
gitsync
Package gitsync treats {apps_dir} as a git working tree, committing local changes and pulling remote changes on a poll interval or webhook trigger.
Package gitsync treats {apps_dir} as a git working tree, committing local changes and pulling remote changes on a poll interval or webhook trigger.
mirror
Package mirror rewrites docker.io image references in compose YAML to point at an alternate registry (typically a GHCR mirror).
Package mirror rewrites docker.io image references in compose YAML to point at an alternate registry (typically a GHCR mirror).
recipes
Package recipes is a small HTTP client for the SimpleDeploy community recipes catalog.
Package recipes is a small HTTP client for the SimpleDeploy community recipes catalog.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL