services:
  cmdb-db:
    image: registry.cn-hangzhou.aliyuncs.com/veops/cmdb-db:2.3
    container_name: cmdb-db
    env_file:
      - .env
    environment:
      TZ: Asia/Shanghai
    volumes:
      - db-data:/var/lib/mysql
      - ./docs/mysqld.cnf:/etc/mysql/conf.d/mysqld.cnf
      - ./docs/cmdb.sql:/docker-entrypoint-initdb.d/cmdb.sql
    healthcheck:
      test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost", "-p$MYSQL_ROOT_PASSWORD"]
      interval: 10s
      timeout: 5s
      retries: 5
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    networks:
      new:
        aliases:
          - mysql
    ports:
      - '23306:3306'

  cmdb-cache:
    image: registry.cn-hangzhou.aliyuncs.com/veops/cmdb-cache:2.3
    container_name: cmdb-cache
    environment:
      TZ: Asia/Shanghai
    volumes:
      - cache-data:/data
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 10s
      timeout: 5s
      retries: 5
    networks:
      new:
        aliases:
          - redis

  cmdb-api:
    image: registry.cn-hangzhou.aliyuncs.com/veops/cmdb-api:2.4.6
    container_name: cmdb-api
    env_file:
      - .env
    environment:
      TZ: Asia/Shanghai
      WAIT_HOSTS: cmdb-db:3306, cmdb-cache:6379
    depends_on:
      cmdb-db:
        condition: service_healthy
      cmdb-cache:
        condition: service_healthy
    command:
      - /bin/sh
      - -c
      - |
        sed -i "s#USE_ACL = False#USE_ACL = True#g" settings.py
        /wait
        flask db-setup
        flask common-check-new-columns
        gunicorn --workers=4 autoapp:app -b 0.0.0.0:5000 -D
        
        celery -A celery_worker.celery worker -E -Q one_cmdb_async --autoscale=4,1 --logfile=one_cmdb_async.log -D
        celery -A celery_worker.celery worker -E -Q acl_async --logfile=one_acl_async.log --autoscale=2,1 -D
        
        nohup flask cmdb-trigger > trigger.log 2>&1 &
        flask cmdb-init-cache
        flask cmdb-init-acl
        flask init-import-user-from-acl
        flask init-department
        flask cmdb-counter > counter.log 2>&1
    networks:
      new:
        aliases:
          - cmdb-api
    healthcheck:
      timeout: 3s
      interval: 5s
      retries: 10
      test: "ps aux|grep -v grep|grep -v '1 root'|grep gunicorn || exit 1"

  cmdb-ui:
    image: registry.cn-hangzhou.aliyuncs.com/veops/cmdb-ui:2.4.6
    container_name: cmdb-ui
    depends_on:
      cmdb-api:
        condition: service_healthy
    environment:
      TZ: Asia/Shanghai
      CMDB_API_HOST: cmdb-api:5000
      NGINX_PORT: 80
    volumes:
      - ./docs/nginx.cmdb.conf.example:/etc/nginx/conf.d/nginx.cmdb.conf.example
    command:
      - /bin/sh
      - -c
      - |
        envsubst '$$CMDB_API_HOST  $$NGINX_PORT' < /etc/nginx/conf.d/nginx.cmdb.conf.example > /etc/nginx/conf.d/cmdb.conf
        nginx -g  'daemon off;'
    networks:
      - new
    ports:
      - "8000:80"

volumes:
  db-data:
    driver: local
    name: cmdb_db-data
  cache-data:
    driver: local
    name: cmdb_cache-data

networks:
  new:
    driver: bridge
    name: cmdb_network