mirror of
https://github.com/NginxProxyManager/nginx-proxy-manager.git
synced 2026-11-14 11:20:29 +00:00
Some paths rendered host configs without fully loading the relations the templates depend on, silently dropping access rules (and SSL): - Enabling a proxy host loaded the access list without its clients or auth items, so the host came back with no access restrictions. - Requesting a Let's Encrypt certificate re-rendered every host sharing its domains from bare rows, dropping access rules and SSL. generateConfig now loads any referenced certificate or access list that isn't fully loaded, so no caller can render a partial config. The two callers above also fetch the relations themselves, and a warning is logged when a host's access list is missing or has no rules. Adds integration tests covering access lists across disable/enable. Fixes #5919, #4286, #5710 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
274 lines
6.8 KiB
YAML
274 lines
6.8 KiB
YAML
# WARNING: This is a DEVELOPMENT docker-compose file, it should not be used for production.
|
|
services:
|
|
fullstack:
|
|
image: npm2dev:core
|
|
container_name: npm2dev.core
|
|
build:
|
|
context: ./
|
|
dockerfile: ./dev/Dockerfile
|
|
ports:
|
|
- 3080:80
|
|
- 3081:81
|
|
- 3443:443
|
|
networks:
|
|
nginx_proxy_manager:
|
|
aliases:
|
|
- website1.example.com
|
|
- website2.example.com
|
|
- website3.example.com
|
|
- website4.example.com
|
|
environment:
|
|
TZ: "${TZ:-Australia/Brisbane}"
|
|
PUID: 1000
|
|
PGID: 1000
|
|
FORCE_COLOR: 1
|
|
# specifically for dev:
|
|
DEBUG: "true"
|
|
DEVELOPMENT: "true"
|
|
LE_STAGING: "true"
|
|
# db:
|
|
# DB_MYSQL_HOST: 'db'
|
|
# DB_MYSQL_PORT: '3306'
|
|
# DB_MYSQL_USER: 'npm'
|
|
# DB_MYSQL_PASSWORD: 'npm'
|
|
# DB_MYSQL_NAME: 'npm'
|
|
# db-postgres:
|
|
DB_POSTGRES_HOST: "pgdb.internal"
|
|
DB_POSTGRES_PORT: "5432"
|
|
DB_POSTGRES_USER: "npm"
|
|
DB_POSTGRES_PASSWORD: "npmpass"
|
|
DB_POSTGRES_NAME: "npm"
|
|
# DB_SQLITE_FILE: "/data/database.sqlite"
|
|
# DISABLE_IPV6: "true"
|
|
# Required for DNS Certificate provisioning testing:
|
|
LE_SERVER: "https://ca.internal/acme/acme/directory"
|
|
REQUESTS_CA_BUNDLE: "/etc/ssl/certs/NginxProxyManager.crt"
|
|
volumes:
|
|
- npm_data:/data
|
|
- le_data:/etc/letsencrypt
|
|
- "./dev/resolv.conf:/etc/resolv.conf:ro"
|
|
- ../backend:/app
|
|
- ../frontend:/frontend
|
|
- "/etc/localtime:/etc/localtime:ro"
|
|
healthcheck:
|
|
test: ["CMD", "/usr/bin/check-health"]
|
|
interval: 10s
|
|
timeout: 3s
|
|
depends_on:
|
|
- db
|
|
- db-postgres
|
|
- authentik
|
|
- authentik-worker
|
|
- authentik-ldap
|
|
working_dir: /app
|
|
|
|
db:
|
|
image: jc21/mariadb-aria
|
|
container_name: npm2dev.db
|
|
ports:
|
|
- 33306:3306
|
|
networks:
|
|
- nginx_proxy_manager
|
|
environment:
|
|
TZ: "${TZ:-Australia/Brisbane}"
|
|
MYSQL_ROOT_PASSWORD: "npm"
|
|
MYSQL_DATABASE: "npm"
|
|
MYSQL_USER: "npm"
|
|
MYSQL_PASSWORD: "npm"
|
|
volumes:
|
|
- db_data:/var/lib/mysql
|
|
- "/etc/localtime:/etc/localtime:ro"
|
|
|
|
db-postgres:
|
|
image: postgres:17
|
|
container_name: npm2dev.db-postgres
|
|
environment:
|
|
POSTGRES_USER: "npm"
|
|
POSTGRES_PASSWORD: "npmpass"
|
|
POSTGRES_DB: "npm"
|
|
volumes:
|
|
- psql_data:/var/lib/postgresql/data
|
|
- ./ci/postgres:/docker-entrypoint-initdb.d
|
|
networks:
|
|
nginx_proxy_manager:
|
|
aliases:
|
|
- pgdb.internal
|
|
|
|
stepca:
|
|
image: nginxproxymanager/testca
|
|
container_name: npm2dev.stepca
|
|
volumes:
|
|
- "./dev/resolv.conf:/etc/resolv.conf:ro"
|
|
- "/etc/localtime:/etc/localtime:ro"
|
|
networks:
|
|
nginx_proxy_manager:
|
|
aliases:
|
|
- ca.internal
|
|
|
|
dnsrouter:
|
|
image: jc21/dnsrouter
|
|
container_name: npm2dev.dnsrouter
|
|
volumes:
|
|
- ./dev/dnsrouter-config.json.tmp:/dnsrouter-config.json:ro
|
|
networks:
|
|
- nginx_proxy_manager
|
|
|
|
swagger:
|
|
image: swaggerapi/swagger-ui:latest
|
|
container_name: npm2dev.swagger
|
|
ports:
|
|
- 3082:80
|
|
environment:
|
|
URL: "http://npm:81/api/schema"
|
|
PORT: "80"
|
|
depends_on:
|
|
- fullstack
|
|
|
|
squid:
|
|
image: ubuntu/squid
|
|
container_name: npm2dev.squid
|
|
volumes:
|
|
- "./dev/squid.conf:/etc/squid/squid.conf:ro"
|
|
- "./dev/resolv.conf:/etc/resolv.conf:ro"
|
|
- "/etc/localtime:/etc/localtime:ro"
|
|
networks:
|
|
- nginx_proxy_manager
|
|
ports:
|
|
- 8128:3128
|
|
|
|
pdns:
|
|
image: pschiffe/pdns-mysql:4.8
|
|
container_name: npm2dev.pdns
|
|
volumes:
|
|
- "/etc/localtime:/etc/localtime:ro"
|
|
environment:
|
|
PDNS_master: "yes"
|
|
PDNS_api: "yes"
|
|
PDNS_api_key: "npm"
|
|
PDNS_webserver: "yes"
|
|
PDNS_webserver_address: "0.0.0.0"
|
|
PDNS_webserver_password: "npm"
|
|
PDNS_webserver-allow-from: "127.0.0.0/8,192.0.0.0/8,10.0.0.0/8,172.0.0.0/8"
|
|
PDNS_version_string: "anonymous"
|
|
PDNS_default_ttl: 1500
|
|
PDNS_allow_axfr_ips: "127.0.0.0/8,192.0.0.0/8,10.0.0.0/8,172.0.0.0/8"
|
|
PDNS_gmysql_host: pdns-db
|
|
PDNS_gmysql_port: 3306
|
|
PDNS_gmysql_user: pdns
|
|
PDNS_gmysql_password: pdns
|
|
PDNS_gmysql_dbname: pdns
|
|
depends_on:
|
|
- pdns-db
|
|
networks:
|
|
nginx_proxy_manager:
|
|
aliases:
|
|
- ns1.pdns
|
|
- ns2.pdns
|
|
|
|
pdns-db:
|
|
image: mariadb
|
|
container_name: npm2dev.pdns-db
|
|
environment:
|
|
MYSQL_ROOT_PASSWORD: "pdns"
|
|
MYSQL_DATABASE: "pdns"
|
|
MYSQL_USER: "pdns"
|
|
MYSQL_PASSWORD: "pdns"
|
|
volumes:
|
|
- "pdns_mysql:/var/lib/mysql"
|
|
- "/etc/localtime:/etc/localtime:ro"
|
|
- "./dev/pdns-db.sql:/docker-entrypoint-initdb.d/01_init.sql:ro"
|
|
networks:
|
|
- nginx_proxy_manager
|
|
|
|
cypress:
|
|
image: npm2dev:cypress
|
|
container_name: npm2dev.cypress
|
|
build:
|
|
context: ../
|
|
dockerfile: test/cypress/Dockerfile
|
|
environment:
|
|
HTTP_PROXY: "squid:3128"
|
|
HTTPS_PROXY: "squid:3128"
|
|
volumes:
|
|
- "../test/results:/results"
|
|
- "./dev/resolv.conf:/etc/resolv.conf:ro"
|
|
- "/etc/localtime:/etc/localtime:ro"
|
|
command: cypress run --browser chrome --config-file=cypress/config/ci.mjs
|
|
networks:
|
|
- nginx_proxy_manager
|
|
|
|
authentik-redis:
|
|
image: "redis:alpine"
|
|
container_name: npm2dev.authentik-redis
|
|
command: --save 60 1 --loglevel warning
|
|
networks:
|
|
- nginx_proxy_manager
|
|
restart: unless-stopped
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "redis-cli ping | grep PONG"]
|
|
start_period: 20s
|
|
interval: 30s
|
|
retries: 5
|
|
timeout: 3s
|
|
volumes:
|
|
- redis_data:/data
|
|
|
|
authentik:
|
|
image: ghcr.io/goauthentik/server:2024.10.1
|
|
container_name: npm2dev.authentik
|
|
restart: unless-stopped
|
|
command: server
|
|
networks:
|
|
- nginx_proxy_manager
|
|
env_file:
|
|
- ci.env
|
|
ports:
|
|
- 9000:9000
|
|
depends_on:
|
|
- authentik-redis
|
|
- db-postgres
|
|
|
|
authentik-worker:
|
|
image: ghcr.io/goauthentik/server:2024.10.1
|
|
container_name: npm2dev.authentik-worker
|
|
restart: unless-stopped
|
|
command: worker
|
|
networks:
|
|
- nginx_proxy_manager
|
|
env_file:
|
|
- ci.env
|
|
depends_on:
|
|
- authentik-redis
|
|
- db-postgres
|
|
|
|
authentik-ldap:
|
|
image: ghcr.io/goauthentik/ldap:2024.10.1
|
|
container_name: npm2dev.authentik-ldap
|
|
networks:
|
|
- nginx_proxy_manager
|
|
environment:
|
|
AUTHENTIK_HOST: "http://authentik:9000"
|
|
AUTHENTIK_INSECURE: "true"
|
|
AUTHENTIK_TOKEN: "wKYZuRcI0ETtb8vWzMCr04oNbhrQUUICy89hSpDln1OEKLjiNEuQ51044Vkp"
|
|
restart: unless-stopped
|
|
depends_on:
|
|
- authentik
|
|
|
|
volumes:
|
|
npm_data:
|
|
name: npm2dev_core_data
|
|
le_data:
|
|
name: npm2dev_le_data
|
|
db_data:
|
|
name: npm2dev_db_data
|
|
pdns_mysql:
|
|
name: npnpm2dev_pdns_mysql
|
|
psql_data:
|
|
name: npm2dev_psql_data
|
|
redis_data:
|
|
name: npm2dev_redis_data
|
|
|
|
networks:
|
|
nginx_proxy_manager:
|
|
name: npm2dev_network
|