First deploy
Prerequisites
Section titled “Prerequisites”- Linux VPS (Ubuntu 22.04+ recommended)
- Docker Engine with Docker Compose plugin installed and running
- Domain pointing to the server (for automatic TLS)
- Ports 80 and 443 open (for Let’s Encrypt and HTTPS)
SimpleDeploy requires Docker and Docker Compose. If either is missing, the server will exit with an error and a link to the install guide: https://docs.docker.com/engine/install/
Installation
Section titled “Installation”Pick your platform:
- Ubuntu / Debian (APT)
- Generic Linux (binary)
- Docker (any distro)
- macOS (Homebrew, CLI only)
- From source
Verify:
simpledeploy versionServer Setup
Section titled “Server Setup”1. Generate Config
Section titled “1. Generate Config”sudo simpledeploy init --config /etc/simpledeploy/config.yaml2. Edit Config
Section titled “2. Edit Config”sudo vim /etc/simpledeploy/config.yamlKey settings to configure:
domain: manage.yourdomain.com # management UI domaintls: mode: auto email: you@example.com # for Let's Encryptmaster_secret: "generate-a-random-string-here"Generate a master secret:
openssl rand -hex 323. Create Directories
Section titled “3. Create Directories”sudo mkdir -p /var/lib/simpledeploysudo mkdir -p /etc/simpledeploy/apps4. Run with systemd
Section titled “4. Run with systemd”If installed via .deb package (APT), the systemd service is already installed. Just enable and start:
sudo systemctl enable --now simpledeployIf installed manually, create /etc/systemd/system/simpledeploy.service:
[Unit]Description=SimpleDeployAfter=docker.serviceRequires=docker.service
[Service]Type=simpleExecStart=/usr/local/bin/simpledeploy serve --config /etc/simpledeploy/config.yamlRestart=alwaysRestartSec=5
[Install]WantedBy=multi-user.targetThen enable and start:
sudo systemctl daemon-reloadsudo systemctl enable simpledeploysudo systemctl start simpledeploy5. Create Admin Account
Section titled “5. Create Admin Account”On first run, simpledeploy prints a setup message. Create the admin account:
# Option A: via CLI (on the server)simpledeploy users create --username admin --password yourpassword --role super_admin
# Option B: via APIcurl -X POST http://localhost:8443/api/setup \ -H "Content-Type: application/json" \ -d '{"username":"admin","password":"yourpassword"}'
# Option C: via web UI# Open https://manage.yourdomain.com and click "Create admin account"6. Create API Key
Section titled “6. Create API Key”For CLI and automation access:
simpledeploy apikey create --name "deploy-key" --user-id 1# Save the printed key (sd_...)Client Setup (Local Machine)
Section titled “Client Setup (Local Machine)”Configure Remote Context
Section titled “Configure Remote Context”simpledeploy context add production \ --url https://manage.yourdomain.com \ --api-key sd_your_api_key_here
simpledeploy context use productionDeploy Apps
Section titled “Deploy Apps”# Single appsimpledeploy apply -f ./myapp/docker-compose.yml --name myapp
# All apps in a directorysimpledeploy apply -d ./apps/
# Check statussimpledeploy listApp Configuration
Section titled “App Configuration”Create a compose file with SimpleDeploy labels:
services: web: image: myapp:latest ports: - "3000:3000" environment: DATABASE_URL: postgres://db:5432/myapp labels: simpledeploy.domain: "myapp.yourdomain.com" simpledeploy.port: "3000" depends_on: - db restart: unless-stopped
db: image: postgres:16 environment: POSTGRES_DB: myapp POSTGRES_PASSWORD: secret volumes: - pgdata:/var/lib/postgresql/data labels: simpledeploy.backup.strategy: "postgres" simpledeploy.backup.schedule: "0 2 * * *" simpledeploy.backup.target: "local" simpledeploy.backup.retention: "7" restart: unless-stopped
volumes: pgdata:Deploy:
simpledeploy apply -f apps/myapp/docker-compose.yml --name myappThe app will be:
- Deployed via Docker
- Accessible at
https://myapp.yourdomain.com(automatic TLS) - Backed up daily at 2 AM (7 backups retained)
- Monitored with default alerts (CPU > 80%, memory > 90%)
Backup configuration
Section titled “Backup configuration”See Backups overview for local and S3 setup.
Alert configuration
Section titled “Alert configuration”See Alert rules and Webhooks.
Behind a load balancer
Section titled “Behind a load balancer”Monitoring
Section titled “Monitoring”# Server logsjournalctl -u simpledeploy -f
# App logssimpledeploy logs myapp --followMetrics
Section titled “Metrics”Access via the dashboard at https://manage.yourdomain.com or the API:
# System metricscurl https://manage.yourdomain.com/api/metrics/system \ -H "Authorization: Bearer sd_..."
# App metricscurl https://manage.yourdomain.com/api/apps/myapp/metrics \ -H "Authorization: Bearer sd_..."Resource Usage
Section titled “Resource Usage”SimpleDeploy targets ~60MB RAM for the management layer (excluding app containers).
| Component | Estimated RAM |
|---|---|
| Go runtime + Caddy | ~30-35MB |
| SQLite | ~5-8MB |
| Metrics buffers | ~2-3MB |
| Other | ~5MB |
| Total | ~45-55MB |