Skip to content

Troubleshooting

Start with the output of the failing command, then inspect state and logs.

Terminal window
dpl inspect <unit>

Common log paths:

<base>/state/<unit>/log/build.log
<base>/state/<unit>/log/runtime.log
<base>/state/<unit>/log/access.log # http-server only
<base>/state/<unit>/log/timers.log

Symptom:

podman: command not found

or a deploy fails when dpl tries to build or run a container.

Fix:

Terminal window
podman --version

If that fails, install Podman for your operating system. Then rerun the deploy:

Terminal window
dpl deploy <unit>

The install script prints a warning when Podman is missing. dpl still installs, but deploys cannot run containers until Podman exists.

Symptom:

  • dpl deploy updates state, but the container does not start.
  • Timers do not run.
  • dpl inspect shows a unit waiting for startup.

Fix on a systemd host:

Terminal window
systemctl status dpl
systemctl start dpl

Fix when running manually:

Terminal window
DPL_BASE=/opt/dpl dpl serve

Use the same DPL_BASE for dpl serve and your deploy commands.

After starting serve, redeploy or reload the daemon:

Terminal window
systemctl reload dpl

or send SIGHUP to the process that owns state/serve.pid (for example, kill -HUP $(cat state/serve.pid)).

Symptom:

Invalid reference
unknown export
unit '...' not found

Fix:

Terminal window
dpl check <unit>

Check that:

  • the referenced unit has a YAML file in conf
  • the unit name uses lowercase letters, digits, and dashes
  • the reference key is valid for that unit type
  • the secret exists

Look at the runtime log:

Terminal window
tail -n 100 /opt/dpl/state/<unit>/log/runtime.log

Common causes:

  • the app listens on a different port than runtime.port
  • a required environment value is missing
  • runtime.init failed
  • the database is not ready

Fix the config or app code, then deploy again.

HTTP requests fail or return the wrong status

Section titled “HTTP requests fail or return the wrong status”

For an http-server unit, nginx access records are stored separately:

Terminal window
tail -n 100 /opt/dpl/state/<http-server>/log/access.log

access.log is JSONL and contains only nginx access records. nginx error output is in the same unit’s runtime log:

Terminal window
tail -n 100 /opt/dpl/state/<http-server>/log/runtime.log

Check the app export and domain route:

exports:
- source: /app/dist
path: /
routes:
- kind: serve_files
location: /
root: ${site:export}

Then deploy in this order:

Terminal window
dpl deploy site ./site.tar.gz
dpl deploy domain

The domain deploy needs the app export to already exist.