version: "3.3"

services:
  node:
    build:
      context: ./
      dockerfile: ./Dockerfile
      args:
        - NODE_VERSION=latest
        - PROJECT_PATH=./
        - NODE_ENV=production
        - YARN=false
      labels:
        - traefik.backend=rollout
        - traefik.frontend.rule=Host:api.rollout
        - traefik.docker.network=web
        - traefik.port=80
    container_name: rollout
    working_dir: "/opt/app"
    volumes:
      - ./:/opt/app
    entrypoint: run-nodock "node server.js"
    command: "npx pm2 start ecosystem.config.js --no-daemon"
    tty: true
    user: node
    environment:
      - REDIS_URL=redis://redis
      - mongoURI: mongodb://kappy:Kappy123*@ds213053.mlab.com:13053/web-push
      - privateKey: Lckqnvu2RrAKlG3uutce3o-kiI7HSc1LXsy5AdlryXQ
      - publicKey: BLgFTwjElUH_Iz72TKDvmlsc-EcwziNP2X28BmN-znOXJhv35QybtfcN1HTh_eUlNffp12HkuruYpqtKNedN54s
      - GCM_Key: BC9lXOplpZsPQwvVrxN_29_9nqkzzsn1YWWNPUmfgo5m0aaXKmeOZDzUSxWBwrNH3pEDscqEW3oo9U3aHarrfB8
  mongo:
    # build: ./mongo
    image: mongo
    container_name: mongo
    restart: always
    labels:
      - traefik.backend=mongo
      - traefik.frontend.rule=Host:mongodb.rollout
      - traefik.docker.network=web
      - traefik.port=27017
    environment:
      - MONGO_INITDB_ROOT_USERNAME=kappy
      - MONGO_INITDB_ROOT_PASSWORD=Kappy123*
    expose:
      - "27017"
    ports:
      - "27017-2019:27017-2019"
    volumes:
      - ./data/mongo/:/var/lib/mongodb
    command: mongod --noauth --smallfiles
  nginx:
    build:
      context: ./nginx
    args:
      - WEB_REVERSE_PROXY_PORT=5000
      - WEB_SSL=false
      - SELF_SIGNED=false
      - NO_DEFAULT=false
    container_name: nginx
    volumes:
      - ./data/logs/nginx/:/var/log/nginx
      - ./certbot/certs/:/var/certs
    labels:
      - traefik.backend=nginx
      - traefik.frontend.rule=Host:nginx.rollout
      - traefik.docker.network=web
      - traefik.port=80
    ports:
      - "80:80"
      - "443:443"
    tty: true
  certbot:
    build:
      context: ./nodock/certbot
    links:
      # - apache
      - nginx.rollout
    container_name: certbot
    volumes:
      - ./certbot/letsencrypt/:/var/www/letsencrypt
      - ./certbot/certs/:/var/certs
  redis:
    build:
      context: ./nodock/redis
      container_name: rollout-redis
      labels:
        - traefik.backend=redis
        - traefik.frontend.rule=Host:redis.rollout
        - traefik.docker.network=web
        - traefik.port=6379
    expose:
      - "6379"
    volumes:
      - ./data/redis:/data
networks:
  web:
    driver: bridge
  # apache:
  #     build:
  #         context: ./apache
  #         args:
  #             - WEB_REVERSE_PROXY_PORT=8000
  #             - WEB_SSL=false
  #             - SELF_SIGNED=false
  #             - NO_DEFAULT=false
  #     volumes:
  #         - ./data/logs/apache/:/usr/local/apache2/logs
  #         - ./certbot/certs/:/var/certs
  #     ports:
  #         - "80:80"
  #         - "443:443"
  #     tty: true
  # rabbitmq:
  #     build:
  #         context: ./rabbitmq
  #         args:
  #             - MANAGEMENT=false
  #             - FEDERATION=false
  #             - RABBITMQ_DEFAULT_USER=guest
  #             - RABBITMQ_DEFAULT_PASS=guest
  #     expose:
  #         - "5672"
