# 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 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: "db-postgres" 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 networks: - nginx_proxy_manager environment: POSTGRES_USER: "npm" POSTGRES_PASSWORD: "npmpass" POSTGRES_DB: "npm" volumes: - psql_data:/var/lib/postgresql/data - ./ci/postgres:/docker-entrypoint-initdb.d stepca: image: jc21/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.js 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