Skip to main content

🏗️ Kompletní instalace Nginx Proxy Manageru (NPM) s Cloudflare certifikátem

Tento návod popisuje instalaci reverzní proxy na Raspberry Pi 5 s využitím 15letého SSL certifikátu přímo od Cloudflare.

1. Příprava systému (Terminál)

Nejdříve vytvoříme strukturu složek v /opt/ a nastavíme správná oprávnění, aby kontejner mohl zapisovat data.

sudo mkdir -p /opt/nginx-proxy-manager/data
sudo mkdir -p /opt/nginx-proxy-manager/letsencrypt
sudo chown -R $USER:$USER /opt/nginx-proxy-manager
sudo chmod -R 775 /opt/nginx-proxy-manager
🔑 2. Cloudflare Origin Certifikát

Tento certifikát slouží výhradně pro šifrování trasy mezi Cloudflare a tvým RPi5.

  1. V Cloudflare: SSL/TLS -> Origin Server -> Create Certificate.

  2. Nastavení: RSA 2048, platnost 15 let.

  3. Zkopíruj si text Origin Certificate a Private Key.

[!CAUTION] BEZPEČNOSTNÍ VAROVÁNÍ: Cloudflare Origin certifikát není veřejně důvěryhodný pro prohlížeče. Pokud se na server pokusíš připojit přímo (mimo Cloudflare), prohlížeč nahlásí chybu zabezpečení.

📦 3. Konfigurace Portainer Stack (YAML)

Vytvoř nový stack. Používáme SQLite (vhodné pro homelab, šetří RAM, nepoužívat pro HA/produkční nasazení s vysokou zátěží).


version: "3.9"

services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    container_name: nginx-proxy-manager
    restart: unless-stopped
    ports:
      - '80:80'
      - '443:443'
      - '81:81' # Administrace NPM
    environment:
      - TZ=${TZ} # Definováno v Portainer UI
    volumes:
      - /opt/nginx-proxy-manager/data:/data
      - /opt/nginx-proxy-manager/letsencrypt:/etc/letsencrypt
4. Nastavení Environment Variables (Portainer UI)

Pod YAML kódem přidej proměnnou:

Name Value
TZ Europe/Prague
🔒 4. Zabezpečení přímého přístupu

Aby nedošlo k obejití Cloudflare (WAF, rate-limiting), je kriticky důležité zajistit, aby server nebyl přístupný napřímo z internetu.

  • Doporučené řešení: Použij Cloudflare Tunnel (z předchozího návodu), který porty 80/443 do internetu vůbec neotevírá.

  • Alternativa: Pokud nepoužíváš tunel, nastav na routeru/firewallu (UFW) povolení pouze pro IP rozsahy Cloudflare.

⚙️ 5. Konfigurace NPM a SSL

  1. Přihlas se na http://IP-ADRESA-RPI:81.

  2. LOGIN: admin@example.com / changeme.

  3. [!IMPORTANT] POVINNÝ KROK: Okamžitě po prvním přihlášení změň administrátorský e-mail a heslo!

  4. Jdi na SSL Certificates -> Add SSL Certificate -> Custom.

  5. Vlož Private Key a Origin Certificate z bodu 2.

🛡️ 6. Nastavení Cloudflare SSL Režimu

V Cloudflare dashboardu v sekci SSL/TLS -> Overview přepni režim na Full (strict).

  • Proč? Režim Flexible je nebezpečný, protože komunikace mezi Cloudflare a tvým serverem by nebyla šifrovaná. Full (strict) vyžaduje tvůj nahraný certifikát.


Výhody tohoto řešení:
  • Bezúdržbovost: Certifikát expiruje až za 15 let (odpadá starost o Let's Encrypt).

  • Konzistence: Všechna data jsou v /opt/ a proměnné v Portainer UI.

  • Výkon: SQLite na RPi5 reaguje okamžitě a je méně náchylná k poškození při tvrdém restartu než velká DB.