Configure network isolation: use npm_public for proxy access
All checks were successful
Deploy to Production / deploy (push) Successful in 4s
All checks were successful
Deploy to Production / deploy (push) Successful in 4s
This commit is contained in:
62
NPM_CONFIG.md
Normal file
62
NPM_CONFIG.md
Normal 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.
|
||||
24
README.md
24
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`
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user