My App
DNS Panel

Deployment & operations

Deploying DNS Panel with Docker, Dokploy, or PM2, controlling migrations, and using the audit and DNS query logs.

This page covers running DNS Panel in production: the three supported deployment paths, how database migrations are applied, and the operational logs available to admins.

Docker

A Dockerfile is included. By default, migrations run on container start. To take control of when migrations run, set SKIP_MIGRATIONS=true and apply them separately:

npm run db:migrate

This is useful when several replicas start at once and you want exactly one of them (or a dedicated job) to run the migration.

Dokploy

For Dokploy, set the environment variables as the application environment so they are shared across all replicas. Use the internal connection string of the managed Postgres resource for DATABASE_URL.

Because cookies are signed with AUTH_SECRET, that value must be identical on every replica — otherwise sessions and passkey challenges won't validate across instances. See Installation & configuration for the full variable reference.

PM2

PM2 runs the process via ecosystem.config.cjs:

npm run pm2          # start
npm run pm2:restart  # restart
npm run pm2:stop     # stop

The production server listens on port 3010 (npm run start).

Logs

Two operational logs are available to admins:

  • Audit log — records all security-relevant actions in the panel (logins, user and role changes, permission changes, zone/record edits). Stored in PostgreSQL.
  • DNS query log — surfaces DNS query activity from Technitium.

Use these to review who changed what and to investigate DNS resolution behavior.

On this page