Nginx Proxy Manager (NPM) is the easiest way to put HTTPS in front of your self-hosted apps. Instead of hand-writing Nginx configs and renewing certificates, you add a “proxy host” in a web UI and it requests a free Let’s Encrypt certificate for you. Every other guide on this site points here for the HTTPS step.
Prerequisites
- A VPS with Docker (which VPS).
- A domain pointed at the server (point a domain to a VPS).
- Ports 80 and 443 open in the firewall.
Step 1 — Compose file
services:
npm:
image: jc21/nginx-proxy-manager:latest
restart: always
ports:
- "80:80"
- "443:443"
- "81:81" # admin UI
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
docker compose up -d
Step 2 — First login
Open http://your-server-ip:81. The default credentials are:
- Email:
admin@example.com - Password:
changeme
Change both immediately on first login.
Step 3 — Add a proxy host with HTTPS
For each app:
- Hosts → Proxy Hosts → Add Proxy Host
- Domain: e.g.
cloud.yourdomain.com - Forward to the app’s container name and port (e.g.
app/80), or the host IP and published port. - SSL tab → Request a new Let’s Encrypt certificate, enable Force SSL.
Save, and the app is live on HTTPS.
Use it everywhere
This is the HTTPS step for every app guide here — Nextcloud and others. Run it on any small VPS — a Hetzner box is plenty. See Best VPS for Self-Hosting.