version: "3"

services:
  setup:
    container_name: DarkflameSetup
    build:
      context: .
      dockerfile: ./docker/setup.Dockerfile
    environment:
      - DATABASE=${MARIADB_DATABASE:-darkflame}
      - DATABASE_HOST=database
      - DATABASE_USER=${MARIADB_USER:-darkflame}
      - DATABASE_PASSWORD=${MARIADB_PASSWORD:-darkflame}
      - EXTERNAL_IP=${EXTERNAL_IP:-darkflame}
      - BUILD_VERSION=${BUILD_VERSION:?171022}
    volumes:
      - ${CLIENT_PATH:?missing_client_path}:/client
      - shared_configs:/docker/

  database:
    container_name: DarkflameDatabase
    build:
      context: .
      dockerfile: ./docker/database.Dockerfile
    environment:
      - MARIADB_USER=${MARIADB_USER:-darkflame}
      - MARIADB_PASSWORD=${MARIADB_PASSWORD:-darkflame}
      - MARIADB_ROOT_PASSWORD=${MARIADB_ROOT_PASSWORD:-darkflame}
      - MARIADB_DATABASE=${MARIADB_DATABASE:-darkflame}
    volumes:
      - database:/var/lib/mysql
    networks:
      - darkflame
    # You can expose these so that DB management tools can connect (WARNING: INSECURE)
    # ports:
    #   - 3306:3306

  darkflame:
    container_name: DarkflameServer
    networks:
      - darkflame
    build:
      context: .
      dockerfile: ./docker/Dockerfile
      args:
        - BUILD_THREADS=${BUILD_THREADS:-1}
        - BUILD_VERSION=${BUILD_VERSION:-171022}
    volumes:
      - ${CLIENT_PATH:?missing_client_path}:/client:ro
      - shared_configs:/shared_configs:ro
    depends_on:
      - database
    ports:
      - "1001:1001/udp"
      - "2000:2000/udp"
      - "2005:2005/udp"
      - "3000-3300:3000-3300/udp"

  brickbuildfix:
    container_name: DarkflameBrickBuildFix
    networks:
      - darkflame
    build:
      context: .
      dockerfile: ./docker/brickfix.Dockerfile
    ports:
      - 80:80
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:80"]
      interval: 2m
      timeout: 3s
      retries: 3
      start_period: 40s

  account-manager:
    container_name: DarkflameAccountManager
    networks:
      - darkflame
    build:
      context: .
      dockerfile: ./docker/AccountManager.Dockerfile
    environment:
      - DATABASE=${MARIADB_DATABASE:-darkflame}
      - DATABASE_HOST=database
      - DATABASE_USER=${MARIADB_USER:-darkflame}
      - DATABASE_PASSWORD=${MARIADB_PASSWORD:-darkflame}
      - ACCOUNT_SECRET=${ACCOUNT_MANAGER_SECRET:?missing_account_secret}
    ports:
      - 5000:5000
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:5000"]
      interval: 2m
      timeout: 3s
      retries: 3
      start_period: 40s
    depends_on:
      - database

networks:
  darkflame:

volumes:
  database:
  shared_configs: