Nginx Proxy Manager w Dockerze: Kompletny poradnik instalacji i zarządzania ruchem w Home Labie
W poprzednim artykule pokazałem, jak zainstalować Dockera. Teraz czas na kolejny krok: pokażę Wam, jak udostępnić zahostowane kontenery za pomocą Nginx Proxy Manager, czyli tzw. odwróconego proxy (Reverse Proxy).
Spis treści
- Wymagania wstępne
- Przygotowanie struktury katalogów
- Tworzenie pliku docker-compose.yml
- Uruchomienie kontenera
- Rozwiązywanie problemów z uprawnieniami
- Pierwsze logowanie
- Konfiguracja Port Forwardingu (Przekierowanie portów)
- Jak dodać swój pierwszy Proxy Host? (Przykład)
- Aktualizacja systemu
- Częste problemy i porady
Nginx Proxy Manager to potężne, a zarazem proste w obsłudze narzędzie z interfejsem graficznym (GUI). Pozwala ono zarządzać przekierowaniami, certyfikatami SSL (Let’s Encrypt) oraz dostępem do usług sieciowych bez konieczności ręcznego edytowania skomplikowanych plików konfiguracyjnych Nginx.

Wymagania wstępne
Zanim zaczniesz, upewnij się, że masz:
- Serwer z systemem Linux (np. Ubuntu, Debian, Raspberry Pi OS).
- Zainstalowany Docker oraz Docker Compose.
- Publiczny adres IP (jeśli chcesz wystawiać usługi na zewnątrz) oraz domenę skierowaną na ten adres.
Przygotowanie struktury katalogów
Zaleca się trzymanie wszystkich plików konfiguracyjnych Dockera w uporządkowany sposób.
mkdir ~/nginx-proxy-manager && cd ~/nginx-proxy-managerTworzenie pliku docker-compose.yml
Nginx Proxy Manager został zaprojektowany jako aplikacja natywnie kontenerowa, dlatego jego instalacja za pomocą Dockera jest rozwiązaniem domyślnym i najbardziej zalecanym. Przygotujemy teraz plik konfiguracyjny, który zdefiniuje zarówno samą aplikację, jak i dedykowaną, oddzielną bazę danych MariaDB.
Wybraliśmy tę konfigurację zamiast wersji uproszczonej (SQLite), ponieważ zapewnia ona znacznie większą stabilność, wydajność oraz bezpieczeństwo Twoich danych. Dzięki oddzieleniu bazy danych od panelu zarządzania, Twoja konfiguracja będzie gotowa na obsłużenie nawet dużej liczby domen i usług, zgodnie z najlepszymi praktykami.
Utwórz plik konfiguracyjny:
nano docker-compose.ymlNastępnie wklej poniższą zawartość. Ważne:
- Architektura ARM (np. Raspberry Pi): Obraz bazy danych jc21/mariadb-aria:latest może sprawiać problemy na niektórych urządzeniach ARM. Jeśli korzystasz z takiej architektury i napotkasz błędy, w sekcji db zamień obraz na: yobasystems/alpine-mariadb:latest.
- Wolumeny: Zwróć uwagę na sekcję volumes – musisz tam podać ścieżkę do folderu, w którym będą przechowywane dane. Możesz użyć ścieżki względnej ./data, aby dane zapisywały się automatycznie w bieżącym folderze projektu.
- Uprawnienia (PUID/PGID): W sekcji environment znajdują się parametry PUID oraz PGID. Aby Docker mógł poprawnie zarządzać Twoimi plikami, sprawdź ID swojego użytkownika, wpisując w terminalu komendę:
id $USERlub
idZastąp domyślne wartości 1000 swoimi numerami (zazwyczaj jest to 1000, ale warto to zweryfikować).
version: '3.8'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
container_name: nginx-proxy-manager
restart: always
ports:
# Porty są w formacie <port-hosta>:<port-kontenera>
- '80:80' # Publiczny port HTTP
- '443:443' # Publiczny port HTTPS
- '81:81' # Port panelu administracyjnego (WWW)
environment:
# Uruchamianie procesów jako konkretny użytkownik/grupa (zastąp 1000 swoimi ID)
PUID: 1000
PGID: 1000
TZ: 'Europe/Warsaw'
# Parametry połączenia z bazą danych MySQL/MariaDB:
DB_MYSQL_HOST: 'db'
DB_MYSQL_PORT: 3306
DB_MYSQL_USER: 'npm'
DB_MYSQL_PASSWORD: 'npm'
DB_MYSQL_NAME: 'npm'
# Opcjonalne połączenie SSL z bazą (zobacz sekcję poniżej)
# DB_MYSQL_SSL: 'true'
# DB_MYSQL_SSL_REJECT_UNAUTHORIZED: 'true'
# DB_MYSQL_SSL_VERIFY_IDENTITY: 'true'
# Odkomentuj poniższą linię, jeśli protokół IPv6 nie jest włączony na Twoim hoście
# DISABLE_IPV6: 'true'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
depends_on:
- db
networks:
- proxy-network
db:
image: 'jc21/mariadb-aria:latest'
container_name: nginx-proxy-manager-db
restart: always
environment:
# Uruchamianie bazy danych jako konkretny użytkownik/grupa
PUID: 1000
PGID: 1000
MYSQL_ROOT_PASSWORD: 'npm'
MYSQL_DATABASE: 'npm'
MYSQL_USER: 'npm'
MYSQL_PASSWORD: 'npm'
MARIADB_AUTO_UPGRADE: '1'
volumes:
- ./mysql:/var/lib/mysql
networks:
- proxy-network
networks:
proxy-network:
driver: bridgeZapisz plik (Ctrl+O, Enter) i wyjdź (Ctrl+X).

Uruchomienie kontenera
Będąc w folderze z plikiem docker-compose.yml, uruchom komendę:
docker compose up -dDocker pobierze obrazy i uruchomi usługę w tle. Może to potrwać od kilkunastu sekund do kilku minut, zależnie od prędkości łącza.
Rozwiązywanie problemów z uprawnieniami
Jeśli panel się nie ładuje, a w logach (docker compose logs -f) widzisz błędy dotyczące bazy danych lub uprawnień, prawdopodobnie foldery ./data lub ./mysql zostały utworzone z uprawnieniami roota. Naprawisz to komendą:
sudo chown -R $USER:$USER .Pierwsze logowanie
Gdy kontenery już działają, otwórz przeglądarkę internetową i wpisz adres IP swojego serwera z portem 81:
http://adres-ip-serwera:81
Domyślne dane logowania:
- Email: ad***@*****le.com
- Password: changeme
Natychmiast po zalogowaniu system poprosi Cię o:
- Zmianę nazwy użytkownika i adresu e-mail administratora.
- Zmianę domyślnego hasła na własne, bezpieczne hasło.
Konfiguracja Port Forwardingu (Przekierowanie portów)
Aby Twoje usługi były widoczne w internecie pod Twoją domeną, musisz na swoim routerze przekierować dwa porty na adres IP serwera, na którym zainstalowałeś NPM:
- Port 80 (HTTP)
- Port 443 (HTTPS)
Jak dodać swój pierwszy Proxy Host? (Przykład)
Załóżmy, że masz inną usługę (np. Home Assistant lub Nextcloud) działającą na porcie 8080.
- W panelu NPM wejdź w zakładkę Hosts -> Proxy Hosts.
- Kliknij Add Proxy Host.
- Domain Names: Wpisz swoją domenę (np. mojaserwis.pl).
- Scheme: http
- Forward Hostname / IP: Wpisz lokalny adres IP maszyny, na której działa usługa (jeśli jest w tym samym Dockerze, możesz użyć nazwy kontenera lub adresu IP sieci Docker).
- Forward Port: 8080.
- Zaznacz Block Common Exploits.
- Przejdź do zakładki SSL:
- Wybierz Request a new SSL Certificate.
- Zaznacz Force SSL (wymusza bezpieczne połączenie).
- Zaakceptuj regulamin Let’s Encrypt.
- Kliknij Save.
Nginx Proxy Manager automatycznie wygeneruje certyfikat SSL, skonfiguruje Nginx i od teraz Twoja usługa będzie dostępna pod adresem https://mojaserwis.pl.
Aktualizacja systemu
Nginx Proxy Manager jest regularnie rozwijany. Aby zaktualizować go do najnowszej wersji, wystarczy wykonać poniższą komendę w folderze projektu:
docker compose pull && docker compose up -dTa komenda najpierw pobierze najnowsze obrazy z repozytorium, a następnie zrestartuje kontenery, używając nowych wersji przy zachowaniu całej Twojej dotychczasowej konfiguracji
Częste problemy i porady:
- Błąd 502 Bad Gateway: NPM nie może połączyć się z docelową usługą. Sprawdź, czy adres IP i port w konfiguracji “Forward Host” są poprawne.
- Błąd przy generowaniu SSL: Upewnij się, że porty 80 i 443 są poprawnie przekierowane na routerze i Twoja domena faktycznie wskazuje na Twój publiczny adres IP.
Właśnie uruchomiłeś własne centrum zarządzania ruchem w swojej sieci. Jeśli chcesz dowiedzieć się więcej o możliwościach kontenerów, zapraszam do lektury pozostałych wpisów w kategorii Docker.
Bez komentarza! Bądź pierwszy.