Files
rubic-cube/NPM_CONFIG.md
Grzegorz Kucmierz 2c6b1ad966
All checks were successful
Deploy to Production / deploy (push) Successful in 4s
Configure network isolation: use npm_public for proxy access
2026-02-15 21:04:58 +01:00

2.5 KiB

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.

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ą:

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:

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.