Reference
Troubleshooting & Common Fixes
Resolving common operational issues, Docker permissions, and boot errors.
1. Production Boot: Insecure JWT Secret Error
Symptom: The server exits immediately with 'Refusing to boot in production with default JWT secret'.
# Fix: Generate a secure 256-bit random string and set NINEDEPLOY_JWT_SECRET in .env
openssl rand -hex 32
# Add to .env:
# NINEDEPLOY_JWT_SECRET=c9a0...3f22. Docker Daemon Permission Denied
Symptom: 'connect: permission denied' when communicating with /var/run/docker.sock.
# Ensure the service user belongs to the 'docker' group:
sudo usermod -aG docker $USER
newgrp docker
# For Docker-in-Docker containers, verify the socket volume mount:
# -v /var/run/docker.sock:/var/run/docker.sock3. SQLite Database Locked or Busy
Symptom: 'SQLITE_BUSY: database is locked'.
# NineDeploy uses synchronous file locks. Ensure only one NineDeploy instance is accessing the .data directory.
# If a previous crashed process holds a lock, verify no zombie processes:
pgrep -fl ninedeploy
# Restart the systemd service cleanly:
sudo systemctl restart ninedeploy4. Port 80/443 Conflicts with Existing Nginx/Apache
Symptom: Traefik container fails to bind port 80 or 443.
# Check which process is occupying port 80/443:
sudo ss -tulpn | grep -E ':(80|443)'
# Stop or disable conflicting standalone web servers:
sudo systemctl stop nginx
sudo systemctl disable nginx5. Remote Node Agent Connection Refused
Symptom: Controller reports 'Agent unreachable' when querying remote node.
# Check that the agent is running on the remote host:
curl http://<remote-node-ip>:3001/health
# Verify firewall allows port 3001 from the controller IP:
sudo ufw allow from <controller-ip> to any port 3001 proto tcp6. Docker Pull Exits with Code 143 (SIGTERM)
Exit 143 means an external supervisor sent SIGTERM. Older NineDeploy Type=notify/WatchdogSec units could terminate the service cgroup during a long image pull. OOM kills normally surface as exit 137.
# Upgrade in place; this migrates and verifies the systemd policy:
curl -fsSL https://ninedeploy.com/install.sh | bash
# Expected: Type=simple and WatchdogUSec=0
systemctl show ninedeploy -p Type -p WatchdogUSecThe canonical guides live in the repository's docs folder.