# WARNING: This is a DEVELOPMENT docker-compose file, it should not be used for production.
services:

  fullstack:
    image: nginxproxymanager:dev
    container_name: npm_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:
      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_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:/app/frontend
      - ../global:/app/global
    healthcheck:
      test: ["CMD", "/usr/bin/check-health"]
      interval: 10s
      timeout: 3s
    depends_on:
      - db
    working_dir: /app

  db:
    image: jc21/mariadb-aria
    container_name: npm_db
    ports:
      - 33306:3306
    networks:
      - nginx_proxy_manager
    environment:
      MYSQL_ROOT_PASSWORD: 'npm'
      MYSQL_DATABASE: 'npm'
      MYSQL_USER: 'npm'
      MYSQL_PASSWORD: 'npm'
    volumes:
      - db_data:/var/lib/mysql

  stepca:
    image: jc21/testca
    volumes:
      - './dev/resolv.conf:/etc/resolv.conf:ro'
      - '/etc/localtime:/etc/localtime:ro'
    networks:
      nginx_proxy_manager:
        aliases:
          - ca.internal

  dnsrouter:
    image: jc21/dnsrouter
    volumes:
      - ./dev/dnsrouter-config.json.tmp:/dnsrouter-config.json:ro
    networks:
      - nginx_proxy_manager

  swagger:
    image: swaggerapi/swagger-ui:latest
    container_name: npm_swagger
    ports:
      - 3082:80
    environment:
      URL: "http://npm:81/api/schema"
      PORT: '80'
    depends_on:
      - fullstack

  squid:
    image: ubuntu/squid
    container_name: npm_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
    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
    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: "npm_dev_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

volumes:
  npm_data:
    name: npm_core_data
  le_data:
    name: npm_le_data
  db_data:
    name: npm_db_data
  pdns_mysql:
    name: npm_pdns_mysql

networks:
  nginx_proxy_manager:
    name: npm_network