version: '3.3'
services:
  ###############################################################################
  # Redis
  ###############################################################################
  redis:
    image: redis:7
    expose:
      - '$REDIS_PORT'
    volumes:
      - ./data/redis:/data
    command:
      - 'bash'
      - '-c'
      - 'docker-entrypoint.sh --requirepass $REDIS_PASSWORD'
    networks:
      - net
  ###############################################################################
  # Mongo
  ###############################################################################
  mongo:
    image: mongo:7
    command: --quiet
    expose:
      - '$MONGO_PORT'
    volumes:
      - ./data/mongodb:/data/db
      - ./backup:/backup
    networks:
      - net
  ###############################################################################
  # Gateway
  ###############################################################################
  gateway:
    image: ghcr.io/microrealestate/microrealestate/gateway:latest
    environment:
      - NODE_ENV
      - LOGGER_LEVEL=$LOGGER_LEVEL
      - PORT=8080
      - EXPOSE_FRONTENDS=$GATEWAY_EXPOSE_FRONTENDS
      - AUTHENTICATOR_URL=$AUTHENTICATOR_URL
      - API_URL=$API_URL
      - PDFGENERATOR_URL=$PDFGENERATOR_URL
      - LANDLORD_FRONTEND_URL=$LANDLORD_FRONTEND_URL
      - LANDLORD_BASE_PATH=$LANDLORD_BASE_PATH
      - TENANT_FRONTEND_URL=$TENANT_FRONTEND_URL
      - TENANT_BASE_PATH=$TENANT_BASE_PATH
      - DOMAIN_URL=$DOMAIN_URL
      - CORS_ENABLED=$CORS_ENABLED
      - TENANTAPI_URL=$TENANTAPI_URL
    ports:
      - '$GATEWAY_PORT:8080'
    networks:
      - net
    depends_on:
      - authenticator
      - api
      - pdfgenerator
  ###############################################################################
  # Authenticator
  ###############################################################################
  authenticator:
    image: ghcr.io/microrealestate/microrealestate/authenticator:latest
    environment:
      - NODE_ENV
      - PORT=$AUTHENTICATOR_PORT
      - LOGGER_LEVEL=$LOGGER_LEVEL
      - REDIS_URL=$REDIS_URL
      - REDIS_PASSWORD=$REDIS_PASSWORD
      - ACCESS_TOKEN_SECRET=$AUTHENTICATOR_ACCESS_TOKEN_SECRET
      - REFRESH_TOKEN_SECRET=$AUTHENTICATOR_REFRESH_TOKEN_SECRET
      - RESET_TOKEN_SECRET=$AUTHENTICATOR_RESET_TOKEN_SECRET
      - MONGO_URL=$MONGO_URL
      - EMAILER_URL=$EMAILER_URL
      - SIGNUP=$SIGNUP
      - DOMAIN_URL=$DOMAIN_URL
    expose:
      - '$AUTHENTICATOR_PORT'
    networks:
      - net
    depends_on:
      - redis
      - mongo
      - emailer
  ###############################################################################
  # PDFGenerator
  ###############################################################################
  pdfgenerator:
    image: ghcr.io/microrealestate/microrealestate/pdfgenerator:latest
    environment:
      - NODE_ENV
      - PORT=$PDFGENERATOR_PORT
      - LOGGER_LEVEL=$LOGGER_LEVEL
      - MONGO_URL=$MONGO_URL
      - ACCESS_TOKEN_SECRET=$AUTHENTICATOR_ACCESS_TOKEN_SECRET
      - CIPHER_KEY=$CIPHER_KEY
      - CIPHER_IV_KEY=$CIPHER_IV_KEY
      - UPLOAD_MAX_SIZE=$UPLOAD_MAX_SIZE
    expose:
      - '$PDFGENERATOR_PORT'
    networks:
      - net
    depends_on:
      - mongo
  ###############################################################################
  # Emailer
  ###############################################################################
  emailer:
    image: ghcr.io/microrealestate/microrealestate/emailer:latest
    environment:
      - NODE_ENV
      - ALLOW_SENDING_EMAILS=$ALLOW_SENDING_EMAILS
      - PORT=$EMAILER_PORT
      - LOGGER_LEVEL=$LOGGER_LEVEL
      - APP_NAME=$APP_NAME
      - LANDLORD_APP_URL=$LANDLORD_APP_URL
      - TENANT_APP_URL=$TENANT_APP_URL
      - MONGO_URL=$MONGO_URL
      - ACCESS_TOKEN_SECRET=$AUTHENTICATOR_ACCESS_TOKEN_SECRET
      - CIPHER_KEY=$CIPHER_KEY
      - CIPHER_IV_KEY=$CIPHER_IV_KEY
      - PDFGENERATOR_URL=$PDFGENERATOR_URL
      - GMAIL_EMAIL=$GMAIL_EMAIL
      - GMAIL_APP_PASSWORD=$GMAIL_APP_PASSWORD
      - MAILGUN_API_KEY=$MAILGUN_API_KEY
      - MAILGUN_DOMAIN=$MAILGUN_DOMAIN
      - SMTP_SERVER=$SMTP_SERVER
      - SMTP_PORT=$SMTP_PORT
      - SMTP_SECURE=$SMTP_SECURE
      - SMTP_USERNAME=$SMTP_USERNAME
      - SMTP_PASSWORD=$SMTP_PASSWORD
      - EMAIL_FROM=$EMAIL_FROM
      - EMAIL_REPLY_TO=$EMAIL_REPLY_TO
      - EMAIL_BCC=$EMAIL_BCC
    expose:
      - '$EMAILER_PORT'
    networks:
      - net
    depends_on:
      - mongo
      - pdfgenerator
  ###############################################################################
  # api
  ###############################################################################
  api:
    image: ghcr.io/microrealestate/microrealestate/api:latest
    volumes:
      - ./backup:/usr/app/backup
    environment:
      - NODE_ENV
      - PORT=$API_PORT
      - LOGGER_LEVEL=$LOGGER_LEVEL
      - MONGO_URL=$MONGO_URL
      - DEMO_MODE=$DEMO_MODE
      - EMAILER_URL=$EMAILER_URL
      - PDFGENERATOR_URL=$PDFGENERATOR_URL
      - RESTORE_DB=$RESTORE_DB
      - ACCESS_TOKEN_SECRET=$AUTHENTICATOR_ACCESS_TOKEN_SECRET
      - CIPHER_KEY=$CIPHER_KEY
      - CIPHER_IV_KEY=$CIPHER_IV_KEY
    expose:
      - '$API_PORT'
    networks:
      - net
    depends_on:
      - mongo
      - emailer
      - pdfgenerator
  ###############################################################################
  # tenant api
  ###############################################################################
  tenantapi:
    image: ghcr.io/microrealestate/microrealestate/tenantapi:latest
    environment:
      - NODE_ENV
      - PORT=$TENANTAPI_PORT
      - LOGGER_LEVEL=$LOGGER_LEVEL
      - MONGO_URL=$MONGO_URL
      - DEMO_MODE=$DEMO_MODE
      - ACCESS_TOKEN_SECRET=$AUTHENTICATOR_ACCESS_TOKEN_SECRET
    expose:
      - "$TENANTAPI_PORT"
    networks:
      - net
    depends_on:
      - mongo
  ###############################################################################
  # Landlord frontend
  ###############################################################################
  landlord-frontend:
    # base path cannot be set at runtime: https://github.com/vercel/next.js/discussions/41769
    build:
      args:
        - BASE_PATH=$LANDLORD_BASE_PATH
    image: ghcr.io/microrealestate/microrealestate/landlord-frontend:latest
    environment:
      - BASE_PATH=$LANDLORD_BASE_PATH
      - PORT=$LANDLORD_FRONTEND_PORT
      - DOCKER_GATEWAY_URL
      - APP_NAME
      - CORS_ENABLED
      - DEMO_MODE
      - GATEWAY_URL
      - NODE_ENV
      - SIGNUP
    expose:
      - '$LANDLORD_FRONTEND_PORT'
    networks:
      - net
    depends_on:
      - gateway
  ###############################################################################
  # Tenant frontend
  ###############################################################################
  tenant-frontend:
    # base path cannot be set at runtime: https://github.com/vercel/next.js/discussions/41769
    build:
      args:
        - BASE_PATH=$TENANT_BASE_PATH
    image: ghcr.io/microrealestate/microrealestate/tenant-frontend:latest
    environment:
      - BASE_PATH=$TENANT_BASE_PATH
      - PORT=$TENANT_FRONTEND_PORT
      - DOCKER_GATEWAY_URL
      - APP_NAME
      - CORS_ENABLED
      - DEMO_MODE
      - GATEWAY_URL
      - NODE_ENV
      - DOMAIN_URL
    expose:
      - '$TENANT_FRONTEND_PORT'
    networks:
      - net
    depends_on:
      - gateway
###############################################################################
# microservices network
###############################################################################
networks:
  net:
    driver: bridge
