diff --git a/NPM_CONFIG.md b/NPM_CONFIG.md new file mode 100644 index 0000000..33545aa --- /dev/null +++ b/NPM_CONFIG.md @@ -0,0 +1,62 @@ +# Konfiguracja Sieci i Bezpieczeństwa (Izolacja Aplikacji) + +Aby zapewnić, że Nginx Proxy Manager (NPM) widzi wszystkie aplikacje, ale **aplikacje nie widzą się nawzajem**, należy zastosować następującą strategię sieciową. + +## 1. Utworzenie głównej sieci dla Proxy + +Na serwerze utwórz jedną, wspólną sieć typu `bridge`, do której będzie podłączony **tylko** Nginx Proxy Manager oraz frontendy aplikacji, które mają być przez niego obsługiwane. + +```bash +docker network create npm_network +``` + +## 2. Konfiguracja Nginx Proxy Managera + +W pliku `docker-compose.yml` dla Nginx Proxy Managera dodaj tę sieć jako zewnętrzną: + +```yaml +version: '3' +services: + app: + image: 'jc21/nginx-proxy-manager:latest' + # ... reszta konfiguracji ... + networks: + - npm_network + - default # opcjonalnie, jeśli potrzebuje dostępu do swojej bazy w innym kontenerze + +networks: + npm_network: + external: true +``` + +## 3. Konfiguracja Aplikacji (np. Rubic Cube) + +Każda aplikacja powinna mieć **dwie** sieci: +1. Swoją własną, wewnętrzną sieć (`default` / `rubic-net`), w której komunikuje się ze swoimi serwisami (np. baza danych, redis) - **izolowaną od innych aplikacji**. +2. Sieć `npm_network`, aby Proxy mogło się do niej dostać. + +W pliku `docker-compose.yml` aplikacji: + +```yaml +services: + rubic-cube: + # ... + expose: + - "80" + networks: + - default # Wewnętrzna sieć aplikacji (automatyczna) + - npm_network # Połączenie TYLKO z proxy + +networks: + npm_network: + external: true +``` + +## Dlaczego to jest bezpieczne? + +* Kontener `rubic-cube` jest w sieci `npm_network`, więc NPM może go "widzieć" (proxy_pass). +* Inna aplikacja (np. `nonograms`), jeśli też jest podłączona do `npm_network`, teoretycznie może "widzieć" `rubic-cube` po nazwie hosta. +* **Pełna izolacja:** Aby uzyskać **pełną** izolację (żeby aplikacja A nie widziała aplikacji B), NPM musiałby być podłączony do wielu sieci naraz (np. `npm-rubic`, `npm-nonograms`), co jest trudne w zarządzaniu. +* **Rozwiązanie kompromisowe (zalecane):** Powyższy model (`npm_network`) jest standardem. Aplikacje "widzą się" w tej sieci, ale nie mają dostępu do swoich wewnętrznych baz danych (które są w sieci `default` każdej aplikacji). + +Jeśli chcesz **absolutnej** izolacji, musiałbyś dla każdej aplikacji tworzyć osobną sieć zewnętrzną (np. `proxy_rubic`, `proxy_nonograms`) i podłączać NPM do każdej z nich z osobna, co wymaga restartu NPM przy dodawaniu każdej nowej aplikacji. diff --git a/README.md b/README.md index ae35f0e..f3c4b64 100644 --- a/README.md +++ b/README.md @@ -12,18 +12,20 @@ Każdy push do gałęzi `main` automatycznie: 2. Zatrzymuje i usuwa stare kontenery. 3. Buduje i uruchamia nową wersję aplikacji przy użyciu `docker compose up -d --build`. -### Konfiguracja Nginx Proxy Manager +### Konfiguracja Sieci i Bezpieczeństwa (Izolacja) -Aplikacja nie wystawia publicznie żadnych portów. Komunikacja odbywa się wewnątrz sieci Dockerowej `npm_default`. +Aplikacja wykorzystuje dwie sieci dockerowe dla zapewnienia izolacji: +1. `npm_public` (zewnętrzna): Sieć, w której znajduje się Nginx Proxy Manager. Tylko kontener `rubic-cube` jest do niej podłączony, aby NPM mógł przekierować ruch. +2. `rubic-net` (wewnętrzna): Prywatna sieć aplikacji. Wszelkie inne serwisy (np. baza danych, redis - jeśli dodasz w przyszłości) powinny być tylko w tej sieci, niewidoczne dla NPM ani innych aplikacji. -W panelu Nginx Proxy Manager skonfiguruj Proxy Host: -* **Scheme:** `http` -* **Forward Hostname / IP:** `rubic-cube` (nazwa serwisu z docker-compose) -* **Forward Port:** `80` -* **Network:** Upewnij się, że Nginx Proxy Manager jest w sieci `npm_default`. - -**Uwaga:** Przed pierwszym uruchomieniem upewnij się, że sieć `npm_default` istnieje na serwerze: +**Wymagania:** +Przed uruchomieniem upewnij się, że na serwerze istnieje sieć publiczna dla proxy: ```bash -docker network create npm_default +docker network create npm_public ``` -(lub użyj nazwy sieci, w której znajduje się Twój kontener Nginx Proxy Managera). +(Jeśli Twój Nginx Proxy Manager używa innej sieci, zaktualizuj nazwę w `docker-compose.yml`). + +W panelu Nginx Proxy Manager skonfiguruj: +* **Network:** `npm_public` (lub odpowiednia sieć proxy). +* **Forward Hostname:** `rubic-cube` +* **Forward Port:** `80` diff --git a/docker-compose.yml b/docker-compose.yml index 3519b27..822b716 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -12,8 +12,11 @@ services: - "80" restart: always networks: - - npm_default + - npm_public + - rubic-net networks: - npm_default: + npm_public: external: true + rubic-net: + driver: bridge