1+ # 定义一个 YAML 锚点,用于定义通用的日志配置,方便在多个服务中引用
12x-logging : &default-logging
3+ # 使用 json-file 日志驱动,这是 Docker 的默认驱动
24 driver : json-file
35 options :
6+ # 设置单个日志文件的最大大小为 10M
47 max-size : " 10m"
8+ # 设置最大日志文件数量为 5 个,达到上限后会进行轮转(删除最旧的日志文件)
59 max-file : " 5"
610
711services :
12+ # ======================================
13+ # 1. MySQL 数据库服务 (goj-mysql)
14+ # ======================================
815 goj-mysql :
16+ # 使用官方 MySQL 8.0 镜像
917 image : mysql:8.0
18+ # 容器名称
1019 container_name : goj-mysql
20+ # 重启策略:容器无论退出状态如何都会自动重启
1121 restart : always
1222 security_opt :
23+ # 禁用 seccomp 安全限制,有时能解决 MySQL 在容器内的一些权限问题 (可选, 默认不禁用)
1324 - seccomp:unconfined
25+ # 容器启动时执行的命令,用于配置 MySQL 运行参数
1426 command :
27+ # 设置默认认证插件,提高旧客户端兼容性
1528 - --default-authentication-plugin=mysql_native_password
29+ # 设置最大连接数
1630 - --max_connections=1024
31+ # 设置线程缓存大小
1732 - --thread_cache_size=256
33+ # 设置服务器字符集为 utf8mb4,支持全字符集
1834 - --character-set-server=utf8mb4
35+ # 设置服务器排序规则
1936 - --collation-server=utf8mb4_general_ci
37+ # 启用对 TIMESTAMP 类型的严格控制
2038 - --explicit_defaults_for_timestamp=true
39+ # 允许在存储过程和函数中使用不安全的 SQL
2140 - --log_bin_trust_function_creators=1
41+ # 环境变量,用于配置 MySQL 的初始化
2242 environment :
2343 - MYSQL_DATABASE=goj
2444 - MYSQL_USER=goj
2545 - MYSQL_PASSWORD=goj123456
2646 - MYSQL_ROOT_PASSWORD=root123456
2747 volumes :
48+ # 数据卷挂载:将宿主机上的具名卷 mysql_data 挂载到容器内的 MySQL 数据目录,实现数据持久化
2849 - mysql_data:/var/lib/mysql
2950 ports :
51+ # 端口映射:将宿主机的 3306 端口映射到容器的 3306 端口
3052 - " 3306:3306"
3153 networks :
54+ # 加入 goj-network 网络
3255 - goj-network
56+ # 应用前面定义的日志配置
3357 logging : *default-logging
3458
59+ # ======================================
60+ # 2. Redis 缓存服务 (goj-redis)
61+ # ======================================
3562 goj-redis :
63+ # 使用基于 Alpine Linux 的轻量级 Redis 镜像
3664 image : redis:alpine
3765 container_name : goj-redis
3866 restart : always
67+ # 启动命令:开启 AOF(Append Only File)持久化
3968 command : redis-server --appendonly yes
4069 volumes :
70+ # 数据卷挂载:将宿主机上的具名卷 redis_data 挂载到容器内的 /data 目录,实现数据持久化
4171 - redis_data:/data
4272 ports :
73+ # 端口映射
4374 - " 6379:6379"
4475 networks :
4576 - goj-network
4677 logging : *default-logging
4778
79+ # ======================================
80+ # 3. 判题服务 (goj-judge)
81+ # ======================================
4882 goj-judge :
83+ # 使用自定义的 goj-judge 镜像
4984 image : krisliu16/goj-judge:latest
5085 container_name : goj-judge
5186 restart : always
87+ # 赋予容器几乎所有权限,通常用于需要进行低级别系统操作或沙箱隔离的判题环境
5288 privileged : true
89+ # 设置共享内存大小为 512m (默认是 64m),判题过程可能需要更大的共享内存
5390 shm_size : 512m
5491 ports :
92+ # 端口映射
5593 - " 5050:5050"
5694 networks :
5795 - goj-network
5896 logging : *default-logging
5997
98+ # ======================================
99+ # 4. 后端 API 服务 (goj-backend)
100+ # ======================================
60101 goj-backend :
102+ # 从本地路径 ./goj-backend 查找 Dockerfile 并构建镜像
61103 build : ./goj-backend
62104 container_name : goj-backend
63105 restart : always
106+ # 环境变量:配置后端服务连接其他组件的地址
64107 environment :
65- - DB_HOST=goj-mysql
108+ - DB_HOST=goj-mysql # 数据库主机名为服务名 goj-mysql
66109 - DB_USER=goj
67110 - DB_PASSWORD=goj123456
68111 - DB_NAME=goj
69- - REDIS_ADDR=goj-redis:6379
70- - JUDGE_ADDR=http://goj-judge:5050
112+ - REDIS_ADDR=goj-redis:6379 # Redis 地址为服务名 goj-redis
113+ - JUDGE_ADDR=http://goj-judge:5050 # 判题服务地址为服务名 goj-judge
71114 ports :
115+ # 端口映射:宿主机 3000 -> 容器 3000
72116 - " 3000:3000"
73117 volumes :
118+ # 挂载自定义数据卷(例如用于存储上传文件、配置文件等),使用相对路径
74119 - ./goj-backend/data:/app/data
120+ # 依赖服务:确保 goj-mysql 和 goj-redis 启动后,再启动 goj-backend
75121 depends_on :
76122 - goj-mysql
77123 - goj-redis
78124 networks :
79125 - goj-network
80126 logging : *default-logging
81127
128+ # ======================================
129+ # 5. 前端 Web 服务 (goj-frontend)
130+ # ======================================
82131 goj-frontend :
132+ # 从本地路径 ./goj-frontend 查找 Dockerfile 并构建镜像
83133 build : ./goj-frontend
84134 container_name : goj-frontend
85135 restart : always
86136 ports :
137+ # 端口映射:宿主机 80 端口(标准 HTTP)-> 容器 80 端口
87138 - " 80:80"
139+ # 依赖服务:确保 goj-backend 启动后,再启动 goj-frontend
88140 depends_on :
89141 - goj-backend
90142 networks :
91143 - goj-network
92144 logging : *default-logging
93145
146+ # ======================================
147+ # 网络配置
148+ # ======================================
94149networks :
150+ # 自定义网络 goj-network,用于连接所有服务
95151 goj-network :
152+ # 网络驱动:使用 bridge 驱动,这是默认的驱动类型,允许服务间通过服务名相互访问 (driver: bridge 可省略)
96153 driver : bridge
97154
155+ # ======================================
156+ # 卷(Volume)配置,用于数据持久化
157+ # ======================================
98158volumes :
99159 mysql_data :
100160 redis_data :
101- problem_data:
161+ problem_data :
0 commit comments