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

  npm:
    image: nginxproxymanager:dev
    container_name: 'npm.dev'
    build:
      context: ../
      dockerfile: ./docker/dev/Dockerfile
      args:
        GOPROXY: "${GOPROXY:-}"
        GOPRIVATE: "${GOPRIVATE:-}"
    ports:
      - 3080:80
      - 3081:81
      - 3443:443
    environment:
      #DEBUG: 'true'
      DEVELOPMENT: 'true'
      GOPROXY: "${GOPROXY:-}"
      GOPRIVATE: "${GOPRIVATE:-}"
      YARN_REGISTRY: "${YARN_REGISTRY:-}"
      NPM_LOG_LEVEL: 'debug'
      PUID: 1000
      PGID: 1000
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ../:/app
      - ./rootfs/var/www/html:/var/www/html
      - ./dev/resolv.conf:/etc/resolv.conf:ro
      - npm_data_vol:/data
    working_dir: /app
    networks:
      default:
        aliases:
          - website1.internal
          - website2.internal
          - website3.internal
    restart: unless-stopped

  npm-stepca:
    image: jc21/testca
    container_name: "npm.stepca"
    volumes:
      - ./dev/resolv.conf:/etc/resolv.conf:ro
    networks:
      default:
        aliases:
          - ca.internal

  npm-pebble:
    image: letsencrypt/pebble
    container_name: "npm.pebble"
    command: pebble -config /test/config/pebble-config.json
    environment:
      PEBBLE_VA_SLEEPTIME: 2
    volumes:
      - ./dev/pebble-config.json:/test/config/pebble-config.json
      - ./dev/resolv.conf:/etc/resolv.conf:ro
    networks:
      default:
        aliases:
          # required for https cert dns san
          - pebble

  npm-swagger:
    image: swaggerapi/swagger-ui:latest
    container_name: "npm.swagger"
    ports:
      - 3001:80
    environment:
      URL: "http://${SWAGGER_PUBLIC_DOMAIN:-127.0.0.1:3081}/api/schema"
      PORT: '80'
    depends_on:
      - npm

  npm-pdns:
    image: pschiffe/pdns-mysql
    container_name: "npm.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: npm-pdns-db
      PDNS_gmysql_port: 3306
      PDNS_gmysql_user: pdns
      PDNS_gmysql_password: pdns
      PDNS_gmysql_dbname: pdns
    depends_on:
      - npm-pdns-db
    networks:
      default:
        aliases:
          - ns1.pdns
          - ns2.pdns

  npm-pdns-db:
    image: mariadb:10.7.1
    container_name: "npm.pdns.db"
    environment:
      MYSQL_ROOT_PASSWORD: 'pdns'
      MYSQL_DATABASE: 'pdns'
      MYSQL_USER: 'pdns'
      MYSQL_PASSWORD: 'pdns'
    volumes:
      - npm_pdns_mysql_vol:/var/lib/mysql
      - /etc/localtime:/etc/localtime:ro
      - './dev/pdns-db.sql:/docker-entrypoint-initdb.d/01_init.sql:ro'

  npm-dnsrouter:
    image: jc21/dnsrouter
    container_name: "npm.dnsrouter"
    volumes:
      - ./dev/dnsrouter-config.json.tmp:/dnsrouter-config.json:ro

volumes:
  npm_data_vol:
  npm_pdns_mysql_vol: