Notploy Instance
Fix a Notploy UI that isn't accessible and recreate the core Notploy services.
My Notploy UI Instance is Not Accessible
If you can't access your Notploy UI instance, there could be several causes. While this issue won't occur with Notploy Cloud (where our team manages the infrastructure), self-hosted instances might encounter configuration problems.
Let's go through the possible cases where your Notploy UI instance might be inaccessible:
1. Insufficient Storage Space
If you've made many deployments and don't have available space on your server, the Notploy database might enter recovery mode, preventing access to the user interface. Here's a quick solution to clear cache and free up server space:
docker system prune -a
docker builder prune -a
docker image prune -a2. Container Race Condition During Restart
During a restart, a race condition might occur where Notploy's dependent containers don't start in the correct order. To troubleshoot this:
First, verify the running containers:
docker psYou should see all three of these containers running:
2a5b955c32b6 ghcr.io/skygenesisenterprise/notploy:latest "docker-entrypoint.s…" 4 days ago Up 4 days 0.0.0.0:3000->3000/tcp, :::3000->3000/tcp notploy.1.4bkuszk98muz372kw5mvwkw0h
5a989bf52bc6 postgres:16 "docker-entrypoint.s…" 4 days ago Up 4 days 5432/tcp notploy-postgres.1.9hvjaxrmby7ex2denjtwo0csf
05be01c5612f traefik:v2.5 "/entrypoint.sh trae…" 4 days ago Up 4 days 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp, 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp notploy-traefik.1.2oktabjmfu558x2d2dy6czt8mNote: If you're running a version older than v0.29.9, you'll also see a notploy-redis container. Redis is no longer used in self-hosted Notploy since v0.29.9.
If all three containers are running but you still can't access the interface, it's time to debug:
Debugging Process
1. Check Container Logs
Start by examining the logs of each container:
docker service logs notploy # Notploy UI
docker service logs notploy-postgres # Postgres
docker logs notploy-traefik # Traefik2. Common Database Connection Issue
A common case is when the Postgres container starts after the Notploy container, preventing Notploy from connecting to the database. You might see logs like this when running docker service logs notploy:
> notploy@v0.22.3 start /app
> node -r dotenv/config dist/server.mjs
Default middlewares already exists
Network is already initilized
Main config already exists
Default traefik config already exists
Migration failed [Error: getaddrinfo ENOTFOUND notploy-postgres] {
errno: -3008,
code: 'ENOTFOUND',
syscall: 'getaddrinfo',
hostname: 'notploy-postgres'
}
Setting up cron jobs....
Main Server Error [Error: getaddrinfo ENOTFOUND notploy-postgres] {
errno: -3008,
code: 'ENOTFOUND',
syscall: 'getaddrinfo',
hostname: 'notploy-postgres'
}To fix this, restart the Notploy service:
docker service scale notploy=0
# Then
docker service scale notploy=13. Traefik Configuration Issues
If all containers are running but you still can't access the UI, and Notploy logs show no errors, the Traefik container might have configuration issues.
When running docker logs notploy-traefik, you might see errors like:
2025-04-07T15:20:18Z ERR Error occurred during watcher callback error="/etc/notploy/traefik/dynamic/notploy.yml: field not found, node: passHostHeader" providerName=fileFirst, try restarting Traefik:
docker restart notploy-traefikIf you still can't access it and the same error persists in the Traefik logs, you'll need to check the Traefik configuration. In this case, the error indicates that the passHostHeader field is missing in the configuration.
If you've modified any Traefik configuration for an application and added invalid configuration, the logs will point to the error. For example, the error above mentions field not found, node: passHostHeader, which means we need to manually modify the configuration files in /etc/notploy/traefik.
Here's an example of an invalid configuration:
http:
routers:
notploy-router-app:
rule: Host(`my-domain.com`)
service: notploy-service-app
entryPoints:
- web
middlewares:
- redirect-to-https
notploy-router-app-secure:
rule: Host(`my-domain.com`)
service: notploy-service-app
entryPoints:
- websecure
tls:
certResolver: letsencrypt
services:
notploy-service-app:
loadBalancer:
servers:
- url: http://notploy:3000
- passHostHeader: trueThe correct configuration should be:
http:
routers:
notploy-router-app:
rule: Host(`my-domain.com`)
service: notploy-service-app
entryPoints:
- web
middlewares:
- redirect-to-https
notploy-router-app-secure:
rule: Host(`my-domain.com`)
service: notploy-service-app
entryPoints:
- websecure
tls:
certResolver: letsencrypt
services:
notploy-service-app:
loadBalancer:
servers:
- url: http://notploy:3000
passHostHeader: trueAfter fixing the configuration, restart Traefik:
docker restart notploy-traefikYou should now be able to access the user interface.
Recreate notploy containers
In the case you want to recreate the notploy services, you can do the following:
Important: Before recreating services, make sure you have backups of your data. Recreating services will not delete your volumes, but it's always good to have backups.
Recreate Postgres Service
Remove and recreate the notploy-postgres service:
docker service rm notploy-postgres
# Create a new notploy-postgres service with Docker Secrets
docker service create \
--name notploy-postgres \
--constraint 'node.role==manager' \
--network notploy-network \
--env POSTGRES_USER=notploy \
--env POSTGRES_DB=notploy \
--secret source=notploy_postgres_password,target=/run/secrets/postgres_password \
--env POSTGRES_PASSWORD_FILE=/run/secrets/postgres_password \
--mount type=volume,source=notploy-postgres,target=/var/lib/postgresql/data \
postgres:16Note: Using Docker Secrets is the recommended approach for managing sensitive data like passwords. The secret is encrypted and only available to services that have been granted access to it.
Recreate Traefik Service
Remove the notploy-traefik service:
# If you are using docker standalone traefik
docker rm -f notploy-traefik
docker run -d \
--name notploy-traefik \
--restart always \
-v /etc/notploy/traefik/traefik.yml:/etc/traefik/traefik.yml \
-v /etc/notploy/traefik/dynamic:/etc/notploy/traefik/dynamic \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
-p 80:80/tcp \
-p 443:443/tcp \
-p 443:443/udp \
traefik:v3.6.25
docker network connect notploy-network notploy-traefik
# If you are using docker service traefik
docker service rm notploy-traefik
# Create a new notploy-traefik service
docker service create \
--name notploy-traefik \
--constraint 'node.role==manager' \
--network notploy-network \
--mount type=bind,source=/etc/notploy/traefik/traefik.yml,target=/etc/traefik/traefik.yml \
--mount type=bind,source=/etc/notploy/traefik/dynamic,target=/etc/notploy/traefik/dynamic \
--mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock \
--publish mode=host,published=443,target=443 \
--publish mode=host,published=80,target=80 \
--publish mode=host,published=443,target=443,protocol=udp \
traefik:v3.6.25Recreate Notploy Service
Remove and recreate the notploy service:
If the notploy_auth_secret secret doesn't exist on your server (installations older than v0.29.3), create it first: openssl rand -hex 32 | docker secret create notploy_auth_secret -
docker service rm notploy
# Create the notploy service
docker service create \
--name notploy \
--replicas 1 \
--network notploy-network \
--mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock \
--mount type=bind,source=/etc/notploy,target=/etc/notploy \
--mount type=volume,source=notploy,target=/root/.docker \
--secret source=notploy_postgres_password,target=/run/secrets/postgres_password \
--secret source=notploy_auth_secret,target=/run/secrets/notploy_auth_secret \
--publish published=3000,target=3000,mode=host \
--update-parallelism 1 \
--update-order stop-first \
--constraint 'node.role == manager' \
-e POSTGRES_PASSWORD_FILE=/run/secrets/postgres_password \
-e BETTER_AUTH_SECRET_FILE=/run/secrets/notploy_auth_secret \
ghcr.io/skygenesisenterprise/notploy:latestFor Proxmox LXC environments, add the --endpoint-mode dnsrr flag to all services:
docker service create \
--name notploy \
--replicas 1 \
--network notploy-network \
--mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock \
--mount type=bind,source=/etc/notploy,target=/etc/notploy \
--mount type=volume,source=notploy,target=/root/.docker \
--secret source=notploy_postgres_password,target=/run/secrets/postgres_password \
--secret source=notploy_auth_secret,target=/run/secrets/notploy_auth_secret \
--publish published=3000,target=3000,mode=host \
--update-parallelism 1 \
--update-order stop-first \
--constraint 'node.role == manager' \
--endpoint-mode dnsrr \
-e POSTGRES_PASSWORD_FILE=/run/secrets/postgres_password \
-e BETTER_AUTH_SECRET_FILE=/run/secrets/notploy_auth_secret \
ghcr.io/skygenesisenterprise/notploy:latestFinal Notes
While the specific issues may vary, the general troubleshooting approach remains similar to what we've described above, and is the general way we always follow when correcting a problem related to the notploy instance not starting.. If you still can't access the user interface:
- Check that all containers are running properly
- Review the logs of each container for specific error messages
- Verify all configuration files
- Make sure to read the Traefik documentation for detailed configuration options: https://doc.traefik.io/traefik/
Notploy Cloud
If you are using Notploy Cloud, you don't need to worry about this, our team will handle the infrastructure for you.
Start using Notploy Cloud https://app.notploy.com/