compose.yaml that runs jc21/nginx-proxy-manager:2.16.0 with ports 80, 443 and 81, then start it with docker compose up -d. Open the admin interface on port 81, create your admin account, and add a Proxy Host for each domain with a free Let’s Encrypt certificate.
Before you start
- Nginx Proxy Manager (NPM) is a reverse proxy with a web interface. A reverse proxy receives visitors on ports 80 and 443 and passes each domain to the right app, so several apps can share one server and one IP.
- Ports 80 and 443 must be free. If Nginx, Apache or Caddy is already installed on the server, stop and disable it first, or Docker fails with
address already in use. - Point each domain at your server with an
Arecord (andAAAAfor IPv6) before you request a certificate. See point a domain to your server. - Run the commands as a user in the
dockergroup, or putsudoin front.
How to install Nginx Proxy Manager with Docker Compose
1
Create a shared Docker network
2
Create a project folder
3
Create compose.yaml
./data holds NPM’s database and settings, and ./letsencrypt holds your certificates. Both are folders next to compose.yaml.Port 81 is the admin interface. This file publishes it on 127.0.0.1 only, because Docker-published ports bypass ufw and firewalld, and the admin login should not face the internet.4
Start NPM
How to log in to the admin interface
Because port 81 listens on localhost only, open an SSH tunnel from your own computer:http://localhost:8181. NPM shows Welcome! and asks you to create your admin account. Use a long, unique password.
How to add a proxy host with free SSL
This example puts Uptime Kuma (Compose serviceuptime-kuma, port 3001) on status.example.com.
1
Connect the app to the proxy network
In the app’s Run
compose.yaml, remove its ports: lines and add:docker compose up -d in the app’s folder.2
Add the proxy host
In NPM, open Hosts > Proxy Hosts and click Add Proxy Host. On the Details tab enter:
Turn on Websockets Support if the app uses WebSockets (Uptime Kuma does) and Block Common Exploits.
3
Request the certificate
On the SSL tab, choose Request a new Certificate (with Let’s Encrypt), turn on Force SSL and HTTP/2 Support, and click Save.NPM asks Let’s Encrypt for a certificate over port 80 and renews it automatically.
How to check it worked
Up, and curl returns HTTP/2 200 (or a redirect your app sends). In NPM the host’s SSL column shows Let’s Encrypt.
How to update Nginx Proxy Manager
Change the tag incompose.yaml to the new release from the NPM releases page, then run:
data and letsencrypt folders first; see back up Docker volumes.
Frequently asked questions
Why does the certificate request fail?
Let’s Encrypt must reachhttp://your-domain/ on port 80. Check that the domain’s A record points to this server, that port 80 is not used by another program, and that nothing in front of the server blocks it. For wildcard certificates or servers without port 80, tick Use DNS Challenge and add your DNS provider’s API credentials.
Can NPM proxy an app that is not in Docker?
Yes. Set Forward Hostname / IP to the server’s public or private IP and the app’s port.127.0.0.1 points at the NPM container itself, not at the server.
Can I use MySQL or PostgreSQL instead of SQLite?
Yes. NPM uses SQLite by default, which suits most setups. Its setup guide shows theDB_MYSQL_* and DB_POSTGRES_* variables for an external database.
Should I use Nginx Proxy Manager or Traefik?
NPM is configured in a web interface, which suits beginners and small servers. Traefik reads labels from yourcompose.yaml files, which suits people who keep everything in code. Use one, not both, because each needs ports 80 and 443.
Related guides
VPS and dedicated server guides
Every guide in this section.
Traefik with Docker
Automatic HTTPS from Compose labels.
Docker Compose tutorial
Write compose.yaml files.
Secure Docker on a VPS
Keep container ports off the internet.
Set up Uptime Kuma
An app to put behind your proxy.
Nginx reverse proxy
The same job with plain Nginx config files.
Checked against the official Nginx Proxy Manager setup guide, advanced configuration and upgrade notes on 4 November 2026;
compose.yaml validated with Docker Compose v5.6.1 on Ubuntu 24.04 LTS. Menu names can change between NPM releases.Need Extra Help?
If you encounter any issues, our support team is ready to assist:- Live Chat: Quick assistance via our website.
- Support Ticket: Open a Ticket
- Discord: Join our Community
- Email: support@freakhosting.com
Last Updated: November 2026