version: "3.7"

networks:
  dm-tiup:
    ipam: # for static IP
      config:
        - subnet: "172.28.0.0/24"

# re-usable extension fields, https://docs.docker.com/compose/compose-file/#extension-fields.
x-node: &default-node
  # build: ./node
  image: csuzhangxc/dm-tiup-work:latest
  env_file: ./secret/node.env
  working_dir: /root
  privileged: true
  networks:
    - dm-tiup
  ports:
    - 22
    - 3000
    - 8261
    - 8262
    - 8291
    - 9090

services:
  mysql1: # upstream MySQL-1
    container_name: mysql1
    hostname: mysql1
    networks:
      dm-tiup:
        ipv4_address: 172.28.0.201
    image: mysql:5.7.32
    command: --default-authentication-plugin=mysql_native_password --log-bin=/var/lib/mysql/mysql-bin --server-id=1 --binlog-format=ROW --gtid_mode=ON --enforce-gtid-consistency=true --lower_case_table_names=0
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: ""
      MYSQL_ALLOW_EMPTY_PASSWORD: 1

  mariadb2: # upstream MariaDB
    container_name: mariadb2
    hostname: mariadb2
    networks:
      dm-tiup:
        ipv4_address: 172.28.0.202
    image: mariadb:10.5.8
    command: --log-bin --server-id=1 --binlog-format=ROW --lower_case_table_names=0
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: ""
      MYSQL_ALLOW_EMPTY_PASSWORD: 1

  tidb: # downstream TiDB
    container_name: tidb
    hostname: tidb
    networks:
      dm-tiup:
        ipv4_address: 172.28.0.203
    image: pingcap/tidb:v4.0.7
    command:
      - --path=/data
    volumes: # persist data for upgrade
      - ./data:/data
    restart: always

  control:
    <<: *default-node
    container_name: control
    hostname: control
    # build: ./control
    image: csuzhangxc/dm-tiup-control:latest
    env_file: ./secret/control.env
    environment:
      - ref='refs/heads/main'
    networks:
      dm-tiup:
        ipv4_address: 172.28.0.100
    volumes: # mount the whole GOPATH because we put the repo under it.
      - ${GOPATH}:/go

  master1: # node for deploy DM-master-1 (add more nodes if needed)
    <<: *default-node
    container_name: master1
    hostname: master1
    networks:
      dm-tiup:
        ipv4_address: 172.28.0.101

  worker1: # node for deploy DM-worker-1
    <<: *default-node
    container_name: worker1
    hostname: worker1
    networks:
      dm-tiup:
        ipv4_address: 172.28.0.111

  worker2: # node for deploy DM-worker-2
    <<: *default-node
    container_name: worker2
    hostname: worker2
    networks:
      dm-tiup:
        ipv4_address: 172.28.0.112

  monitor: # node for deploy Prometheus and Grafana
    <<: *default-node
    container_name: monitor
    hostname: monitor
    networks:
      dm-tiup:
        ipv4_address: 172.28.0.121

