NginxProxyManager / NginxProxyManager/nginx-proxy-manager

Process hangs at Completed SSL cert renew process

Open
#5,521 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug
Dominant language
TypeScript
Stars
34.2k
Forks
3.9k
Avg merge
21h 12m
Merged PRs (30d)
20

Description

Checklist

  • Have you pulled and found the error with jc21/nginx-proxy-manager:latest docker image?
    • Yes
  • Are you sure you're not using someone else's docker image?
    • Yes
  • Have you searched for similar issues (both open and closed)?
    • Yes

Describe the bug

WebUI never loads.

Last message from console is Completed SSL cert renew process.

Nginx Proxy Manager Version

can't reach the login page.

To Reproduce
Steps to reproduce the behavior:

  1. run docker compose up on new os install
  2. process hangs before any more steps can be taken
  3. remove volumes and try again - no change

Expected behavior

WebUI loads.

Screenshots

Image

Operating System

Endeavor OS (Docker)

Additional context

Console log:
✔ Container cloudflare-tunnel Running 0.0s
✔ Container proxy-app-1 Running 0.0s
Attaching to cloudflare-tunnel, app-1, db-1
app-1 | - /opt/certbot/lib/python3.11/site-packages ...
app-1 | SKIPPED
app-1 | ❯ Dynamic resolvers ...
app-1 | ❯ IPv6 ...
app-1 | Enabling IPV6 in hosts in: /etc/nginx/conf.d
app-1 | - /etc/nginx/conf.d/production.conf
app-1 | - /etc/nginx/conf.d/default.conf
app-1 | - /etc/nginx/conf.d/include/proxy.conf
app-1 | - /etc/nginx/conf.d/include/letsencrypt-acme-challenge.conf
app-1 | - /etc/nginx/conf.d/include/ssl-ciphers.conf
app-1 | - /etc/nginx/conf.d/include/block-exploits.conf
app-1 | - /etc/nginx/conf.d/include/log-proxy.conf
app-1 | - /etc/nginx/conf.d/include/assets.conf
app-1 | - /etc/nginx/conf.d/include/log-stream.conf
app-1 | - /etc/nginx/conf.d/include/ip_ranges.conf
app-1 | - /etc/nginx/conf.d/include/ssl-cache.conf
app-1 | - /etc/nginx/conf.d/include/ssl-cache-stream.conf
app-1 | - /etc/nginx/conf.d/include/force-ssl.conf
app-1 | - /etc/nginx/conf.d/include/resolvers.conf
app-1 | Enabling IPV6 in hosts in: /data/nginx
app-1 | ❯ Docker secrets ...
app-1 |
app-1 | -------------------------------------
app-1 | _ _ ____ __ __
app-1 | | \ | | _ | / |
app-1 | | | | |) | |/| |
app-1 | | |\ | __/| | | |
app-1 | |
| _|| || |_|
app-1 | -------------------------------------
app-1 | User: npm PUID:0 ID:0 GROUP:0
app-1 | Group: npm PGID:0 ID:0
app-1 | -------------------------------------
app-1 |
app-1 | ❯ Starting backend ...
app-1 | ❯ Starting nginx ...
db-1 |
db-1 | PostgreSQL Database directory appears to contain a database; Skipping initialization
db-1 |
db-1 | 2026-05-06 02:06:00.771 UTC [1] LOG: starting PostgreSQL 18.3 (Debian 18.3-1.pgdg13+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 14.2.0-19) 14.2.0, 64-bit
db-1 | 2026-05-06 02:06:00.806 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
db-1 | 2026-05-06 02:06:00.806 UTC [1] LOG: listening on IPv6 address "::", port 5432
db-1 | 2026-05-06 02:06:01.174 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
db-1 | 2026-05-06 02:06:01.543 UTC [33] LOG: database system was shut down at 2026-05-06 01:48:36 UTC
db-1 | 2026-05-06 02:06:01.985 UTC [1] LOG: database system is ready to accept connections
app-1 | [5/6/2026] [2:06:30 AM] [Global ] › ℹ info Using Postgres configuration
app-1 | [5/6/2026] [2:06:38 AM] [Migrate ] › ℹ info Current database version: 20260131163528
app-1 | [5/6/2026] [2:06:39 AM] [Setup ] › ℹ info Logrotate Timer initialized
app-1 | [5/6/2026] [2:06:39 AM] [Setup ] › ℹ info Logrotate completed.
app-1 | [5/6/2026] [2:06:39 AM] [Global ] › ℹ info IP Ranges fetch is enabled
app-1 | [5/6/2026] [2:06:39 AM] [IP Ranges] › ℹ info Fetching IP Ranges from online services...
app-1 | [5/6/2026] [2:06:39 AM] [IP Ranges] › ℹ info Fetching https://ip-ranges.amazonaws.com/ip-ranges.json
app-1 | [5/6/2026] [2:06:39 AM] [IP Ranges] › ℹ info Fetching https://www.cloudflare.com/ips-v4
app-1 | [5/6/2026] [2:06:39 AM] [IP Ranges] › ℹ info Fetching https://www.cloudflare.com/ips-v6
app-1 | [5/6/2026] [2:06:40 AM] [SSL ] › ℹ info Let's Encrypt Renewal Timer initialized
app-1 | [5/6/2026] [2:06:40 AM] [SSL ] › ℹ info Renewing SSL certs expiring within 30 days ...
app-1 | [5/6/2026] [2:06:40 AM] [IP Ranges] › ℹ info IP Ranges Renewal Timer initialized
app-1 | [5/6/2026] [2:06:40 AM] [Global ] › ℹ info Backend PID 169 listening on port 3000 ...
app-1 | [5/6/2026] [2:06:40 AM] [SSL ] › ℹ info Completed SSL cert renew process
db-1 | 2026-05-06 02:11:01.614 UTC [31] LOG: checkpoint starting: time
db-1 | 2026-05-06 02:11:02.240 UTC [31] LOG: checkpoint complete: wrote 1 buffers (0.0%), wrote 3 SLRU buffers; 0 WAL file(s) added, 0 removed, 0 recycled; write=0.219 s, sync=0.132 s, total=0.626 s; sync files=3, longest=0.054 s, average=0.044 s; distance=0 kB, estimate=0 kB; lsn=0/1D06040, redo lsn=0/1D05FD0

Docker-compose:
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
# These ports are in format :
- '80:80' # Public HTTP Port
- '443:443' # Public HTTPS Port
- '81:81' # Admin Web Port
# Add any other Stream port you want to expose
# - '21:21' # FTP
environment:
# Postgres parameters:
DB_POSTGRES_HOST: 'db'
DB_POSTGRES_PORT: '5432'
DB_POSTGRES_USER: 'npm'
DB_POSTGRES_PASSWORD: 'npmpass'
DB_POSTGRES_NAME: 'npm'
# Uncomment this if IPv6 is not enabled on your host
# DISABLE_IPV6: 'true'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
depends_on:
- db

db:
image: postgres:latest
environment:
POSTGRES_USER: 'npm'
POSTGRES_PASSWORD: 'npmpass'
POSTGRES_DB: 'npm'
volumes:
- ./postgres:/var/lib/postgresql

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reproducing the startup sequence with the supplied Docker Compose configuration and reviewing the app log around SSL renewal, especially the messages from “Renewing SSL certs expiring within 30 days” through “Completed SSL cert renew process.” Done means the application completes startup and the WebUI loads instead of hanging after that message.

Written by the indexing model from the issue text.

Assessment

Tech stack
docker, nginx, postgresql
Domain
backend, devops
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.