docker-compose.yml
4.74 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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# 芋道 Boot 单体版 Docker Compose 入门部署:yudao-server + 前端 Nginx + MySQL + Redis
# 使用说明见同目录 README.md;需 Docker Compose V2.20.2 及以上(docker compose 命令)
# 本文件中的相对路径,均相对于本文件所在目录,与执行命令时的当前目录无关
name: yudao-boot
services:
mysql:
image: mysql:8.4
restart: unless-stopped
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
environment:
TZ: Asia/Shanghai
MYSQL_DATABASE: ${MYSQL_DATABASE:-ruoyi-vue-pro}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:?请在 .env 中设置 MYSQL_ROOT_PASSWORD}
MYSQL_USER: ${MYSQL_USER:-yudao}
MYSQL_PASSWORD: ${MYSQL_PASSWORD:?请在 .env 中设置 MYSQL_PASSWORD}
volumes:
- mysql-data:/var/lib/mysql
# 仅在 mysql-data 卷为空(首次启动)时,按文件名顺序执行;SQL 文件不存在时直接报错,避免被创建成空目录
- type: bind
source: ../../sql/mysql/ruoyi-vue-pro.sql
target: /docker-entrypoint-initdb.d/01-ruoyi-vue-pro.sql
read_only: true
bind:
create_host_path: false
- type: bind
source: ../../sql/mysql/quartz.sql
target: /docker-entrypoint-initdb.d/02-quartz.sql
read_only: true
bind:
create_host_path: false
# 默认不对宿主机开放;需要本机客户端连接时,取消注释(避免与本机已有 3306 冲突)
# ports:
# - "127.0.0.1:13306:3306"
healthcheck:
# 首次初始化时 MySQL 临时实例不监听 TCP,因此 127.0.0.1 可连通即表示初始化完成
test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -u root -p\"$$MYSQL_ROOT_PASSWORD\" --silent"]
interval: 10s
timeout: 5s
retries: 30
start_period: 60s
redis:
image: redis:7.4-alpine
restart: unless-stopped
command: ["redis-server", "--appendonly", "yes", "--requirepass", "${REDIS_PASSWORD:?请在 .env 中设置 REDIS_PASSWORD}"]
environment:
REDISCLI_AUTH: ${REDIS_PASSWORD}
volumes:
- redis-data:/data
# 默认不对宿主机开放;需要时取消注释(避免与本机已有 6379 冲突)
# ports:
# - "127.0.0.1:16379:6379"
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 10
yudao-server:
# 使用模块自带的 Dockerfile,需先在源码根目录执行 mvn 打包,生成 yudao-server/target/yudao-server.jar
build:
context: ../../yudao-server
image: yudao-server:${IMAGE_TAG:-local}
restart: unless-stopped
environment:
SPRING_PROFILES_ACTIVE: ${SPRING_PROFILES_ACTIVE:-dev}
JAVA_OPTS: ${JAVA_OPTS:--Xms512m -Xmx512m -Djava.security.egd=file:/dev/./urandom}
# 数据库:主库、从库都要覆盖,否则会使用 application-${SPRING_PROFILES_ACTIVE}.yaml 中的 127.0.0.1
SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_URL: jdbc:mysql://mysql:3306/${MYSQL_DATABASE:-ruoyi-vue-pro}?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_USERNAME: ${MYSQL_USER:-yudao}
SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_PASSWORD: ${MYSQL_PASSWORD}
SPRING_DATASOURCE_DYNAMIC_DATASOURCE_SLAVE_URL: jdbc:mysql://mysql:3306/${MYSQL_DATABASE:-ruoyi-vue-pro}?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
SPRING_DATASOURCE_DYNAMIC_DATASOURCE_SLAVE_USERNAME: ${MYSQL_USER:-yudao}
SPRING_DATASOURCE_DYNAMIC_DATASOURCE_SLAVE_PASSWORD: ${MYSQL_PASSWORD}
# Redis:Spring Boot 3.x 使用 spring.data.redis.*
SPRING_DATA_REDIS_HOST: redis
SPRING_DATA_REDIS_PORT: 6379
SPRING_DATA_REDIS_PASSWORD: ${REDIS_PASSWORD}
# 需与前端打包时的 VITE_APP_CAPTCHA_ENABLE 一致
YUDAO_CAPTCHA_ENABLE: ${YUDAO_CAPTCHA_ENABLE:-true}
YUDAO_DEMO: "false"
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_healthy
# 默认只通过 web 的 Nginx 访问;需要直连后端排查时,取消注释
# ports:
# - "127.0.0.1:48080:48080"
web:
image: nginx:1.28-alpine
restart: unless-stopped
ports:
- "${WEB_PORT:-8080}:80"
volumes:
# 前端打包产物(包含 index.html 的目录内容)复制到 ./web/dist
- type: bind
source: ./web/dist
target: /usr/share/nginx/html
read_only: true
bind:
create_host_path: false
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
depends_on:
- yudao-server
volumes:
mysql-data:
redis-data: