Operations¶
Everyday commands¶
| What | Command |
|---|---|
| Status | systemctl status deployer |
| Logs (JSON lines) | journalctl -u deployer -f |
| Health | curl -s http://127.0.0.1:8150/api/health |
| Database | cd /opt/deployer && docker compose ps |
| Database shell | docker exec -it deployer-db psql -U deployer |
| Integrations | the System page: DNS API, Authentik, tool versions |
Upgrading¶
git pull
scripts/build.sh # type check, vet, tests, then the static binary in dist/
sudo scripts/deploy.sh # installs it, keeps the previous binary as .prev, restarts, checks health
Database migrations run automatically at start (embedded SQL files, applied once, in order). Rolling back:
sudo mv /opt/deployer/bin/deployer.prev /opt/deployer/bin/deployer && sudo systemctl restart deployer
A migration is never reverted automatically: before upgrading across a migration, take a dump
(docker exec deployer-db pg_dump -U deployer -Fc deployer > deployer-$(date +%F).dump).
Backups¶
| What | Where | How |
|---|---|---|
| Deployer database | /opt/deployer/backups/deployer-<date>.sql.gz |
deployer-backup container, daily, 14 days |
| Master key | /etc/deployer/master.key |
copy it somewhere safe once; without it sealed values are lost |
| Apps | <stacks>/<name>/ (compose, secrets, data) |
include the stacks folder in your server backup |
| Deleted apps | <stacks>/_archive/<name>-<time>/ |
kept unless deleted with "delete the data" |
Restore the database:
gunzip -c /opt/deployer/backups/deployer-<date>.sql.gz | docker exec -i deployer-db psql -U deployer deployer
What Deployer leaves on the server¶
Everything is plain and readable without Deployer:
cd <stacks>/<name> && docker compose ps|logs|up -dworks as usual (the README in each folder says so).- The nginx site is a normal file; certbot renews the certificate with its own timer.
- Authentik objects are named
dp-<name>(proxy),dp-<name>-sso(OIDC),dp-<name>-saml(SAML).
If you edit files by hand, the app page shows them as edited by hand and switches the editors to advanced mode instead of overwriting your changes.
Monitoring¶
- Each run ends
success,failedorrolled-back; the dashboard and the app pages show the last ones. - The audit log (admins) lists every acting request with user and IP.
- After each deploy, "Checking the sign-in" warns if the single sign-on does not answer as expected.
Recovery situations¶
| Situation | What to do |
|---|---|
| Deployer restarted during a run | The run is marked failed ("interrupted"); the app is failed and editable. Check the app's files, then redeploy or delete. |
| A deploy rolled back | Read the run log: the failing step is in red, with the last container logs when the app did not become healthy. Fix the draft and deploy again. |
| nginx refuses to reload | Deployer never installs a site that fails nginx -t; check nginx -t for a site edited by hand. |
| Authentik down during a delete | The delete continues and reports what it could not remove; remove the dp-<name>* objects in Authentik afterwards. |
| Lost admin access | Create an admin from the database: set role='admin' for your user, or delete all users to get the setup wizard again (a new setup token is printed). |