# Nginx Proxy Manager (NPM) Reverzní proxy s HTTPS (Let's Encrypt), web UI, ACL. Toto je **přesná kopie** `docker-compose.yml` z běžícího serveru `/home/mates/docker/nginx/`. > **Detailní návod** najdeš v Jotty knowledge base (kategorie: Docker a kontejnery). --- ## Přehled - **Image:** `jc21/nginx-proxy-manager:latest` + `mariadb:latest` - **Porty:** `80` (HTTP), `443` (HTTPS), `81` (admin UI) - **Databáze:** MariaDB (vestavěná, viz `db` service) - **User:** `1000:1000` (sedí na serveru) - **Network:** `nginx_proxy_manager_default` (izolovaný bridge) ## Rychlý start ### 1. Příprava ```bash cd nginx-proxy-manager # Vytvor .env z prikladu cp .env.example .env nano .env # nastav hesla pro MariaDB ``` ### 2. Vytvoření volume adresářů (pokud neexistují) ```bash mkdir -p data letsencrypt mysql ``` Tyto složky obsahují: - `data/` - NPM konfigurace, certifikáty, logy - `letsencrypt/` - Let's Encrypt certifikáty - `mysql/` - MariaDB data ### 3. Spuštění ```bash docker compose up -d ``` ### 4. První přístup Otevři `http://:81` v prohlížeči. **Výchozí přihlášení:** - Email: `admin@example.com` - Heslo: `changeme` **DŮLEŽITÉ:** Hned po prvním přihlášení změň heslo! --- ## Detailní nastavení ### SSL certifikát (Let's Encrypt) 1. V NPM UI jdi na **Proxy Hosts -> Add Proxy Host** 2. **Domain Names:** `app.example.com` 3. **Scheme:** `http` 4. **Forward Hostname/IP:** `` nebo `container_name` 5. **Forward Port:** port služby (např. 8080) 6. **Block Common Exploits:** 7. Ulož 8. Otevři záložku **SSL**: - **Request a new SSL Certificate** - **Force SSL** - **HTTP/2** - **HSTS Enabled** - Zadej email pro Let's Encrypt notifikace - Potvrď podmínky Let's Encrypt 9. **Save** ### Bezpečnost - **HTTPS** terminuje NPM (Let's Encrypt auto-renew) - **Force SSL** přesměruje HTTP -> HTTPS - **Block Common Exploits** chrání před známými útoky - **HSTS** říká prohlížečům "vždy HTTPS" - **Admin UI na portu 81** - přístupný jen z vnitřní sítě (nebo za VPN) ### Volumes | Mount | Účel | |---|---| | `./data:/data` | NPM konfigurace, custom SSL, logy | | `./letsencrypt:/etc/letsencrypt` | Let's Encrypt certifikáty | | `./mysql:/var/lib/mysql` | MariaDB data | ### Porty | Port | Služba | |---|---| | `80` | HTTP (přesměruje na 443) | | `443` | HTTPS (hlavní) | | `81` | Admin UI | --- ## Správa ### Update ```bash docker compose pull docker compose up -d ``` ### Zastavení ```bash docker compose stop ``` ### Logy ```bash docker compose logs -f ``` ### Záloha ```bash # data + letsencrypt + mysql tar -czf npm-backup-$(date +%Y%m%d).tar.gz \ data/ letsencrypt/ mysql/ ``` ### Obnova ```bash tar -xzf npm-backup-20240801.tar.gz docker compose up -d ``` --- ## Reverzní proxy pro ostatní služby Příklad konfigurace pro `jotty.example.com -> jotty:3000`: 1. **Proxy Hosts -> Add Proxy Host** 2. **Domain Names:** `jotty.example.com` 3. **Scheme:** `http` 4. **Forward Hostname/IP:** `jotty` (container name) 5. **Forward Port:** `3000` 6. **Cache Assets:** 7. **Block Common Exploits:** 8. SSL: Let's Encrypt (viz výše) **Stejný postup** pro všechny ostatní služby (portainer, gitea, vaultwarden, ...). --- ## Bezpečnostní poznámky - **Admin heslo** změnit hned po instalaci - **Port 81** - nedávej do internetu (firewall nebo VPN) - **Let's Encrypt** - nastavit SPF/DKIM záznamy pro email notifikace - **Logy** sledovat na neobvyklé dotazy (404, brute-force) --- ## Struktura ``` nginx-proxy-manager/ +-- README.md # Tento soubor +-- .env.example # Šablona pro .env +-- docker-compose.yml # Compose (1:1 kopie z RPi) +-- data/ # NPM data (po spuštění) +-- letsencrypt/ # Certifikáty (po spuštění) +-- mysql/ # MariaDB data (po spuštění) ``` --- ## Související - **Jotty:** Nginx Proxy Manager (detailní návod s SSL konfigurací) - **Jotty:** Docker + Portainer + NPM - skript (rychlá instalace všeho dohromady) - **Jotty:** Firewall (porty 80, 443, 81 musí být otevřené) ## Licence MIT - stejně jako celé `mates-docker-services` repo. --- **Poslední update:** 2026-08-01