Configure network isolation: use npm_public for proxy access
All checks were successful
Deploy to Production / deploy (push) Successful in 4s

This commit is contained in:
2026-02-15 21:04:58 +01:00
parent ae9d643980
commit 2c6b1ad966
3 changed files with 80 additions and 13 deletions

62
NPM_CONFIG.md Normal file
View File

@@ -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.

View File

@@ -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`

View File

@@ -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