Self-hosted
Vapor deployment.

Deploy from GitHub to an Ubuntu server you control. Deployer runs tests, builds releases, manages systemd, and keeps deployment logs.

bash <(curl -sSL https://mottzi.codes/deployer/setup.sh)
Deployer mascot

Deployment status and logs.

The panel shows the running commit, recent deployments, test results, build times, binary sizes, and logs. Select a row to view its output.

Deployer

Ready
Logs
Port8081
Directory~/deployer
Branchdev
Version1b66ba5
Uservapor
Servicesystemd
Installationlocal build
Socket/panel/ws
Logs

mottzi

running
Port8080
Directory~/apps/mottzi
Branchmain
Build Moderelease
Deploy Modemanual
Testingenabled
Keep Buildsnewest:5
Push Event/pushevent/mottzi
Health CheckTCP
Logs Settings
Status Commit SHA Started Build Tests Actions
Pushed test 5a39e39 11:17:4710.07.26
——
—
pushed testing building built running failed queued stale

Self-hosted.

Deployer and your Vapor app run on the same Ubuntu server. No hosted control plane is required.

Deployment logs.

The panel and CLI show test output, build output, deployment status, and runtime logs.

Saved binaries.

Recent release binaries are stored by commit and can be started again without recompiling.

From GitHub push to a running service.

Automatic mode deploys each push. Manual mode records pushes until you start a deployment. Both use the same test, build, health-check, and promotion steps.

  1. Record the push

    A signed GitHub webhook records the commit SHA.

  2. Test and build

    Run swift test and compile the app in release mode.

  3. Start the candidate

    Save the predecessor, activate the new binary, and restart systemd.

  4. Check health

    Wait for a stable TCP or HTTP response before promotion.

Health checks gate promotion.

After systemd starts the candidate, Deployer requires a stable TCP or HTTP response for two seconds. If the probe fails, the previous binary remains available and can be started without rebuilding.

Install on an Ubuntu server.

The interactive installer can create a new installation or repair an existing one.

bash <(curl -sSL https://mottzi.codes/deployer/setup.sh)
  • Swift toolchainInstalled with Swiftly
  • Public routingNginx and Let's Encrypt TLS
  • Least privilegeNon-root service user and deploy key
  • Push detectionSigned GitHub webhook
  • Operator accessPanel, logs, and deployerctl

Control Deployer over SSH.

deployerctl is the terminal alternative to the web panel. It covers deployment and service control, configuration, logs, and updates.

Same operations
Panel and CLI use the same engine and cross-process lock.
Shared live output
CLI-triggered deployment progress appears in the panel.
Scriptable
Non-interactive flags support SSH scripts and remote automation.
vapor@server — ssh — 92×24
Last login: Tue Aug 12 14:22:08 on ttys001
macbook ~ % ssh vapor@server
vapor@server:~$ sudo deployerctl status
deployer   running   :8081
app        running   :8080

vapor@server:~$ sudo deployerctl deploy a8c7a3c --yes
testing ✓  build ✓  health ✓  live ✓

vapor@server:~$ 
Deployer mascot

Open source.
Contributions welcome.

Report issues, propose changes, or open a pull request on GitHub.

Contribute on GitHub