PDNS Manager

Updates

If you used install.sh or option B, you already have update.sh in the project folder. It does what's safe and unsurprising – and asks before doing anything bigger.

Standard flow

cd /path/to/dns-manager
./update.sh

What happens, in order:

  1. git fetch with tags. If checkout sits on a release tag, switches to the newest v*. If on main, runs git pull.
  2. Offers a DB backup (skip with --no-backup) – writes a backup_<version>_<ts>.sql via mysqldump --single-transaction.
  3. Warns on a major version jump (red box, explicit confirmation needed).
  4. docker compose build backend – with --no-cache only on actual version bumps or with explicit --rebuild. Saves 3–5 min on patches.
  5. docker compose up -d.

Flags

FlagPurpose
--rebuild / --no-cacheForce build --no-cache, even without a version bump.
--no-backupSkip the DB backup prompt.
--skip-fetchNo git fetch/pull, use the local state.
--help / -hPrint help.

What is preserved across updates

  • MariaDB data (mariadb_data volume).
  • .env (never overwritten).
  • Uploaded files like the branding logo (backend_uploads volume).
  • All tokens, webhook definitions, server configs, users – everything in the DB.

Manually pin to a specific version

cd dns-manager
git fetch origin --tags --force --prune --prune-tags
git checkout v2.3.7              # or: git checkout main && git pull
docker compose build --no-cache backend
docker compose up -d

Rollback

docker compose down
docker compose up -d mariadb
sleep 10
docker exec -i dns-manager-db mysql -u root -p dns_manager < backup_v2.3.7_20260420-153000.sql

git checkout v2.3.7
docker compose build backend
docker compose up -d

Pre-update checklist

  • Fresh DB dump (auto-done by ./update.sh unless you pass --no-backup).
  • Read the target version's notes – see Changelog.
  • For major jumps: try a stage VM first.
  • Enough disk for a second backend image during the build.