-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
84 lines (78 loc) · 2.6 KB
/
Copy pathdocker-compose.yml
File metadata and controls
84 lines (78 loc) · 2.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
version: '3.8'
# 使用宿主机 MySQL(不在 Docker 内另起 mysql 容器)。
# 连接信息与 binlog 目录通过 .env 配置(参考 .env.example):
# - agent / provision 通过 host.docker.internal 访问宿主机 MySQL
# - 宿主机的 MySQL 数据目录(含 binlog 文件)只读挂载进 agent 容器
# - 宿主机 MySQL 必须开启 binlog:log-bin=mysql-bin、binlog-format=ROW、
# binlog-row-image=FULL(Windows: my.ini 中 [mysqld] 段)
services:
# 一次性初始化:提取 server CA → 通过 API 注册 agent → 签发 mTLS 证书 →
# 写入加密的 agent 配置(MySQL 连接指向宿主机)
provision:
build:
context: .
target: agent
entrypoint: ["/bin/sh", "/scripts/e2e-provision.sh"]
environment:
PITR_PASSPHRASE: ${PITR_PASSPHRASE:-pitr-test}
MYSQL_HOST: ${MYSQL_HOST:-host.docker.internal}
MYSQL_PORT: ${MYSQL_PORT:-3306}
MYSQL_USER: ${MYSQL_USER:-root}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE:-mysql}
# 容器内挂载点,config 的 binlog_dir 指向此处(覆盖 Windows 路径自动发现)
MYSQL_BINLOG_DIR: /var/lib/mysql
depends_on:
server:
condition: service_started
volumes:
- ./scripts:/scripts:ro
- server-data:/var/lib/mysql-pitr:ro
- agent-config:/etc/agent
- ${MYSQL_BINLOG_DIR_HOST:?set MYSQL_BINLOG_DIR_HOST in .env (host MySQL data dir)}:/var/lib/mysql:ro
extra_hosts:
- "host.docker.internal:host-gateway"
networks:
- pitr-network
restart: "no"
agent:
build:
context: .
target: agent
command: ["serve", "--config=/etc/agent/config.json", "--passphrase=${PITR_PASSPHRASE:-pitr-test}"]
depends_on:
provision:
condition: service_completed_successfully
volumes:
- ${MYSQL_BINLOG_DIR_HOST:?set MYSQL_BINLOG_DIR_HOST in .env (host MySQL data dir)}:/var/lib/mysql:ro
- agent-config:/etc/agent:ro
- agent-data:/var/lib/mysql-pitr
extra_hosts:
- "host.docker.internal:host-gateway"
networks:
- pitr-network
restart: unless-stopped
server:
build:
context: .
target: server
ports:
- "8080:8080"
- "9443:9443"
environment:
LISTEN_ADDR: ":8080"
AGENT_LISTEN_ADDR: ":9443"
AGENT_DATA_DIR: /var/lib/mysql-pitr
AGENT_CERT_HOSTS: "server,localhost,127.0.0.1"
volumes:
- server-data:/var/lib/mysql-pitr
networks:
- pitr-network
restart: unless-stopped
volumes:
server-data:
agent-data:
agent-config:
networks:
pitr-network:
driver: bridge