基于 Docker 的高可用 WordPress 集群部署:分布式 Nginx + Keepalived、MySQL 主从复制与 ProxySQL 读写分离
本教程指导您在 Docker 环境中部署一个高可用、高性能的 WordPress 网站,包含以下组件:
- 负载均衡服务器(192.168.0.119 及 192.168.0.120):运行 Nginx,负责请求分发,通过 Keepalived 实现高可用,通过虚拟 IP(192.168.0.100)绑定域名
wordpress.mxdx.com
。 - 主服务器(192.168.0.118):运行 MySQL 主库、ProxySQL、WordPress 和 Nginx。
- 从服务器(192.168.0.117):运行 MySQL 从库、WordPress 和 Nginx。
架构图
正常状态
VIP漂移后
1. 架构特点
- MySQL 主从复制:主库(192.168.0.118)与从库(192.168.0.117)实现数据同步。
- ProxySQL 读写分离:部署在主库服务器,优化数据库查询性能。
- Nginx 负载均衡:分发请求到主库和从库的 WordPress 服务,通过分布式 Nginx 和 Keepalived 实现高可用。
- WordPress 文件共享:通过 NFS 共享
/data/wordpress/uploads
和/data/nginx/ssl
目录,新增/data/nginx/conf
共享以支持分布式 Nginx 配置一致性。 - 高可用设计:Nginx Master 宕机时,Keepalived 将服务切换到 Nginx Slave,确保业务连续性。
- 域名绑定:通过域名
wordpress.mxdx.com
访问站点,解析到虚拟 IP(192.168.0.100)。
2. 准备工作
2.1 所有服务器通用配置
确保所有服务器(192.168.0.117、192.168.0.118、192.168.0.119、192.168.0.120)已安装 Docker 和 Docker Compose。若未安装,请参考官方文档安装。
# 创建必要目录
sudo mkdir -p /data/{mysql/{data,conf},wordpress/{html,uploads},nginx/{conf,logs,ssl},proxysql/{conf,data}}
# 新增 Nginx Slave 配置目录(192.168.0.120)
sudo mkdir -p /data/nginx/{conf,logs,ssl} # 在 192.168.0.120 上执行
# 设置 WordPress 目录权限(通常无需手动设置)
sudo chown -R 1000:1000 /data/wordpress/{html,uploads}
提示:目录权限需与容器内用户(通常 UID/GID 为 1000)匹配。
2.2 安装 Keepalived(192.168.0.119 和 192.168.0.120)
在负载均衡服务器上安装 Keepalived:
sudo apt update
sudo apt install -y keepalived
2.3 域名解析配置
将域名 wordpress.mxdx.com
解析到虚拟 IP(192.168.0.100)。在你的 DNS 服务商处添加以下记录:
记录类型 | 主机记录 | 解析线路 | 记录值 | TTL |
---|---|---|---|---|
A | wordpress | 默认 | 192.168.0.100 | 600 |
提示:若使用本地测试,可在
/etc/hosts
文件中添加:192.168.0.100 wordpress.mxdx.com
3. 主服务器配置 (192.168.0.118)
3.1 创建 Docker Compose 文件
在主库服务器上创建 /Docker/docker-compose.yml
:
mkdir -p /Docker
cd /Docker
vim docker-compose.yml
写入以下内容:
version: '3.8'
services:
mysql:
image: hub.yumesakura.com/library/mysql:8.0
container_name: docker-mysql-master
environment:
MYSQL_ROOT_PASSWORD: 12345678
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: 12345678
volumes:
- /data/mysql/data:/var/lib/mysql
- /data/mysql/conf:/etc/mysql/conf.d
ports:
- "3306:3306"
restart: unless-stopped
command:
- --server-id=1
- --log-bin=mysql-bin
- --binlog-format=ROW
- --bind-address=0.0.0.0
networks:
- wp_network
proxysql:
image: proxysql/proxysql:latest
container_name: proxysql
ports:
- "6032:6032"
- "6033:6033"
volumes:
- /data/proxysql/conf/proxysql.cnf:/etc/proxysql.cnf
- /data/proxysql/data:/var/lib/proxysql
depends_on:
- mysql
networks:
- wp_network
wordpress:
image: hub.yumesakura.com/library/wordpress:php8.2-fpm
environment:
WORDPRESS_DB_HOST: proxysql
WORDPRESS_DB_PORT: 6033
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: 12345678
WORDPRESS_DB_NAME: wordpress
volumes:
- /data/wordpress/html:/var/www/html
- /data/wordpress/uploads:/var/www/html/wp-content/uploads
- /data/wordpress/php.ini:/usr/local/etc/php/conf.d/custom.ini
depends_on:
- proxysql
networks:
- wp_network
nginx:
image: hub.yumesakura.com/library/nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- /data/nginx/conf:/etc/nginx/conf.d
- /data/nginx/logs:/var/log/nginx
- /data/wordpress/html:/var/www/html
- /data/nginx/ssl:/etc/ssl
depends_on:
- wordpress
networks:
- wp_network
networks:
wp_network:
driver: bridge
3.2 配置 ProxySQL 读写分离
创建 ProxySQL 配置文件 /data/proxysql/conf/proxysql.cnf
:
vim /data/proxysql/conf/proxysql.cnf
写入以下内容:
datadir="/var/lib/proxysql"
admin_variables=
{
admin_credentials="admin:admin"
mysql_ifaces="0.0.0.0:6032"
}
mysql_variables=
{
threads=4
max_connections=2048
default_query_timeout=36000000
interfaces="0.0.0.0:6033"
monitor_username="monitor"
monitor_password="12345678"
}
mysql_servers=
(
{ hostgroup_id=10, hostname="192.168.0.118", port=3306, status="ONLINE", weight=1000 },
{ hostgroup_id=20, hostname="192.168.0.117", port=3306, status="ONLINE", weight=1000 }
)
mysql_replication_hostgroups=
(
{ writer_hostgroup=10, reader_hostgroup=20 }
)
mysql_query_rules=
(
{ rule_id=1, active=1, match_pattern="^SELECT.*FOR UPDATE", destination_hostgroup=10, apply=1 },
{ rule_id=2, active=1, match_pattern="^SELECT", destination_hostgroup=20, apply=1 },
{ rule_id=3, active=1, match_pattern="^INSERT", destination_hostgroup=10, apply=1 },
{ rule_id=4, active=1, match_pattern="^UPDATE", destination_hostgroup=10, apply=1 },
{ rule_id=5, active=1, match_pattern="^DELETE", destination_hostgroup=10, apply=1 }
)
mysql_users=
(
{ username="wordpress", password="12345678", active=1, default_hostgroup=10, default_schema="wordpress" }
)
3.3 配置主服务器 Nginx
创建 Nginx 配置文件 /data/nginx/conf/wordpress.conf
:
server {
listen 80;
server_name default_server;
root /var/www/html;
index index.php;
access_log /var/log/nginx/wordpress.access.log;
error_log /var/log/nginx/wordpress.error.log;
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
expires 30d;
access_log off;
try_files $uri =404;
}
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass wordpress:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1; mode=block";
}
3.4 启动服务
docker-compose up -d
3.5 配置 MySQL 主从复制
进入 MySQL 容器:
docker exec -it docker-mysql-master mysql -uroot -p12345678
执行以下 SQL 创建复制用户(使用 copy
用户,密码 12345678
):
CREATE USER 'copy'@'%' IDENTIFIED BY '12345678';
GRANT REPLICATION SLAVE ON *.* TO 'copy'@'%';
FLUSH PRIVILEGES;
SHOW MASTER STATUS;
记录输出的 File
和 Position
值,用于从库配置。
3.6 创建 ProxySQL 监控账户
在主库 MySQL 中执行:
CREATE USER 'monitor'@'%' IDENTIFIED BY '12345678';
GRANT REPLICATION SLAVE ON *.* TO 'monitor'@'%';
FLUSH PRIVILEGES;
提示:监控账户用于 ProxySQL 检查 MySQL 服务器状态和复制延迟。
4. 从服务器配置 (192.168.0.117)
4.1 创建 Docker Compose 文件
在 /Docker
目录下创建 docker-compose.yml
:
version: '3.8'
services:
mysql:
image: hub.yumesakura.com/library/mysql:8.0
container_name: docker-mysql-slave
environment:
MYSQL_ROOT_PASSWORD: 12345678
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: 12345678
volumes:
- /data/mysql/data:/var/lib/mysql
- /data/mysql/conf:/etc/mysql/conf.d
ports:
- "3306:3306"
restart: unless-stopped
command:
- --server-id=2
- --relay-log=mysql-relay-bin
- --read-only=1
- --skip-slave-start
networks:
- wp_network
wordpress:
image: hub.yumesakura.com/library/wordpress:php8.2-fpm
environment:
WORDPRESS_DB_HOST: 192.168.0.118
WORDPRESS_DB_PORT: 6033
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: 12345678
WORDPRESS_DB_NAME: wordpress
volumes:
- /data/wordpress/html:/var/www/html
- /data/wordpress/uploads:/var/www/html/wp-content/uploads
- /data/wordpress/php.ini:/usr/local/etc/php/conf.d/custom.ini
depends_on:
- mysql
networks:
- wp_network
nginx:
image: hub.yumesakura.com/library/nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- /data/nginx/conf:/etc/nginx/conf.d
- /data/nginx/logs:/var/log/nginx
- /data/wordpress/html:/var/www/html
- /data/nginx/ssl:/etc/ssl
depends_on:
- wordpress
networks:
- wp_network
networks:
wp_network:
driver: bridge
4.2 配置从服务器 Nginx
创建 Nginx 配置文件 /data/nginx/conf/wordpress.conf
:
server {
listen 80;
server_name default_server;
root /var/www/html;
index index.php;
access_log /var/log/nginx/wordpress.access.log;
error_log /var/log/nginx/wordpress.error.log;
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
expires 30d;
access_log off;
try_files $uri =404;
}
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass wordpress:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1; mode=block";
}
4.3 启动服务
docker-compose up -d
4.4 配置 MySQL 从库复制
进入从库 MySQL 容器:
docker exec -it docker-mysql-slave mysql -uroot -p12345678
执行以下 SQL(替换 MASTER_LOG_FILE
和 MASTER_LOG_POS
为 3.5 节记录的值):
CHANGE MASTER TO
MASTER_HOST='192.168.0.118',
MASTER_USER='copy',
MASTER_PASSWORD='12345678',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=1234;
START SLAVE;
SHOW SLAVE STATUS\G
确认 Slave_IO_Running
和 Slave_SQL_Running
均为 Yes
.
5. 负载均衡服务器配置 (192.168.0.119 及 192.168.0.120)
5.1 创建 Docker Compose 文件
5.1.1 Nginx Master(192.168.0.119)
在 /Docker
目录下创建 docker-compose.yml
:
version: '3.8'
services:
nginx:
image: nginx:alpine
container_name: load-balancer
ports:
- "80:80"
- "443:443"
volumes:
- /data/nginx/conf:/etc/nginx/conf.d
- /data/nginx/logs:/var/log/nginx
- /data/nginx/ssl:/etc/ssl
networks:
- wp_network
networks:
wp_network:
driver: bridge
5.1.2 Nginx Slave(192.168.0.120)
在 /Docker
目录下创建 docker-compose.yml
:
version: '3.8'
services:
nginx:
image: nginx:alpine
container_name: load-balancer-slave
ports:
- "80:80"
- "443:443"
volumes:
- /data/nginx/conf:/etc/nginx/conf.d
- /data/nginx/logs:/var/log/nginx
- /data/nginx/ssl:/etc/ssl
networks:
- wp_network
networks:
wp_network:
driver: bridge
5.2 配置 Nginx 负载均衡
两个Nginx负载均衡节点(Nginx Master和Nginx Slave)均创建 /data/nginx/conf/load-balancer.conf
:
upstream wordpress_backend {
server 192.168.0.118:80 weight=1 max_fails=3 fail_timeout=30s;
server 192.168.0.117:80 weight=1 max_fails=3 fail_timeout=30s;
keepalive 64;
}
server {
listen 80;
server_name wordpress.mxdx.com;
access_log /var/log/nginx/lb.access.log;
error_log /var/log/nginx/lb.error.log;
location / {
proxy_pass http://wordpress_backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_http_version 1.1;
proxy_redirect off;
proxy_buffering off;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_connect_timeout 5s;
proxy_read_timeout 10s;
}
}
重载 Nginx 配置(在 192.168.0.119 和 192.168.0.120 上执行):
docker exec load-balancer nginx -s reload
docker exec load-balancer-slave nginx -s reload
5.3 配置 Keepalived
Keepalived 同时部署在两台负载均衡服务器(192.168.0.119 和 192.168.0.120)上,每台服务器运行 Nginx 和 Keepalived,形成主备关系,通过虚拟 IP(VIP,192.168.0.100)实现高可用。
5.3.1 Nginx Master(192.168.0.119)负载均衡节点
创建 Keepalived 配置文件:
sudo vim /etc/keepalived/keepalived.conf
写入以下内容:
global_defs {
router_id NGINX_MASTER
}
vrrp_script check_nginx {
script "pidof nginx"
interval 2
weight -20
}
vrrp_instance VI_1 {
state MASTER
interface eth0 # 替换为实际网卡名称(如 ens33,可用 `ip link` 查看)
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 12345678
}
virtual_ipaddress {
192.168.0.100/24 # 虚拟 IP(VIP)
}
track_script {
check_nginx
}
}
5.3.2 Nginx Slave(192.168.0.120)负载均衡节点
创建 Keepalived 配置文件:
sudo vim /etc/keepalived/keepalived.conf
写入以下内容:
global_defs {
router_id NGINX_SLAVE
}
vrrp_script check_nginx {
script "pidof nginx"
interval 2
weight -20
}
vrrp_instance VI_1 {
state BACKUP
interface eth0 # 替换为实际网卡名称
virtual_router_id 51
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 12345678
}
virtual_ipaddress {
192.168.0.100/24 # 虚拟 IP(VIP)
}
track_script {
check_nginx
}
}
启动 Keepalived(在 Nginx Master(192.168.0.119) 和 Nginx Slave(192.168.0.120) 上执行):
sudo systemctl enable keepalived
sudo systemctl start keepalived
5.4 启动服务
在 Nginx Master(192.168.0.119) 和 Nginx Slave(192.168.0.120) 上执行:
docker-compose up -d
6. 文件共享配置 (NFS)
为确保 WordPress 文件和 Nginx 配置一致性,通过 NFS 共享以下目录:
/data/wordpress/uploads
:WordPress 上传文件/data/nginx/ssl
:SSL 证书/data/nginx/conf
:Nginx 配置文件
6.1 NFS 服务端配置(主库服务器 192.168.0.118)
# 安装 NFS 服务
sudo apt install -y nfs-kernel-server
# 配置 NFS 共享
sudo vim /etc/exports
添加以下内容:
/data/wordpress/uploads *(rw,sync,no_subtree_check,no_root_squash)
/data/nginx/ssl *(rw,sync,no_subtree_check,no_root_squash)
/data/nginx/conf *(rw,sync,no_subtree_check,no_root_squash)
生效配置:
sudo exportfs -a
sudo systemctl restart nfs-kernel-server
6.2 NFS 客户端配置(从库服务器 192.168.0.117 及 Nginx Slave 192.168.0.120)
# 安装 NFS 客户端
sudo apt install -y nfs-common
# 挂载 NFS 共享(192.168.0.117)
sudo mount -t nfs 192.168.0.118:/data/wordpress/uploads /data/wordpress/uploads
sudo mount -t nfs 192.168.0.118:/data/nginx/ssl /data/nginx/ssl
# 挂载 NFS 共享(192.168.0.120)
sudo mount -t nfs 192.168.0.118:/data/nginx/conf /data/nginx/conf
sudo mount -t nfs 192.168.0.118:/data/nginx/ssl /data/nginx/ssl
# 验证挂载
df -h | grep nfs
6.3 配置开机自动挂载
在 192.168.0.117 和 192.168.0.120 上编辑 /etc/fstab
:
sudo vim /etc/fstab
192.168.0.117 添加:
192.168.0.118:/data/wordpress/uploads /data/wordpress/uploads nfs defaults,_netdev,noatime 0 0
192.168.0.118:/data/nginx/ssl /data/nginx/ssl nfs defaults,_netdev,noatime 0 0
192.168.0.120 添加:
192.168.0.118:/data/nginx/conf /data/nginx/conf nfs defaults,_netdev,noatime 0 0
192.168.0.118:/data/nginx/ssl /data/nginx/ssl nfs defaults,_netdev,noatime 0 0
测试挂载:
sudo mount -a
df -h | grep -E 'uploads|ssl|conf'
提示:若挂载失败,检查 NFS 服务器状态或添加
x-systemd.automount
选项。
7. 验证配置
7.1 验证 MySQL 主从复制
在主库服务器:
docker exec -it docker-mysql-master mysql -uroot -p12345678 -e "SHOW MASTER STATUS;"
在从库服务器:
docker exec -it docker-mysql-slave mysql -uroot -p12345678 -e "SHOW SLAVE STATUS\G"
7.2 验证 ProxySQL 读写分离
进入 ProxySQL 管理界面:
docker exec -it proxysql mysql -uadmin -padmin -h127.0.0.1 -P6032
执行以下命令检查配置:
SELECT * FROM mysql_servers;
SELECT * FROM mysql_replication_hostgroups;
SELECT * FROM mysql_query_rules;
SELECT * FROM stats_mysql_connection_pool;
7.3 验证负载均衡
访问域名 wordpress.mxdx.com
,多次刷新页面,检查日志确认请求分发:
tail -f /data/nginx/logs/wordpress.access.log # 在 192.168.0.118 和 192.168.0.117 上
tail -f /data/nginx/logs/lb.access.log # 在 192.168.0.119 和 192.168.0.120 上
7.4 验证 Nginx 高可用
检查 VIP 绑定: 在 192.168.0.119 上:
ip addr show
确认 VIP(192.168.0.100)绑定到网卡。
测试故障切换:
- 停止 Nginx Master(192.168.0.119):
docker stop load-balancer
- 在 192.168.0.120 上检查 VIP 是否接管:
ip addr show
- 通过浏览器访问
wordpress.mxdx.com
,确认 WordPress 正常响应。
- 停止 Nginx Master(192.168.0.119):
验证 NFS 同步:
- 在 192.168.0.118 更新
/data/nginx/conf/load-balancer.conf
或/data/nginx/ssl
。 - 在 192.168.0.119 和 192.168.0.120 检查同步:
ls -l /data/nginx/conf ls -l /data/nginx/ssl
- 在 192.168.0.118 更新
7.5 验证 NFS 共享
- 在 WordPress 后台上传图片,检查所有节点的
/data/wordpress/uploads
是否同步。 - 更新主库服务器的
/data/nginx/ssl
证书,确认所有 Nginx 容器可访问最新证书。
8. 常见 ProxySQL 命令
进入 ProxySQL 命令行:
docker exec -it proxysql mysql -uadmin -padmin -h127.0.0.1 -P6032
常用命令:
SELECT * FROM mysql_query_rules; -- 查看查询规则
SELECT * FROM mysql_servers; -- 查看后端服务器
SELECT * FROM mysql_replication_hostgroups; -- 查看主从配置
SELECT * FROM stats_mysql_connection_pool; -- 查看连接池状态
SELECT * FROM stats_mysql_query_rules; -- 查看规则命中统计
SELECT * FROM monitor.mysql_server_ping_log ORDER BY time_start_us DESC LIMIT 3; -- 检查后端健康状态
9. 注意事项
- 密码安全:生产环境中请使用强密码替换
12345678
,包括 Keepalived 认证密码。 网络配置:确保服务器间网络畅通,防火墙(若有安装)开放必要端口(80、443、3306、6032、6033,以及 VRRP 协议端口 112)。
- 示例防火墙规则:
sudo ufw allow proto vrrp sudo ufw allow 80/tcp sudo ufw allow 443/tcp
- 示例防火墙规则:
- NFS 可靠性:生产环境建议使用
systemd.automount
或高可用 NFS 方案(如 DRBD 或 GlusterFS)。 - 备份策略:定期备份 MySQL 数据和 WordPress 文件。
- Keepalived 健康检查:当前检查 Nginx 进程,可添加 HTTP 健康检查以提高可靠性。
- 示例:
需要在 Nginx 配置中添加vrrp_script check_nginx { script "curl -s http://localhost/health > /dev/null" interval 2 weight -20 }
/health
端点。
- 示例:
- VIP 规划:确保 VIP(192.168.0.100)未被占用,且与网络网段一致。
- 域名配置:确保
wordpress.mxdx.com
已正确解析到 192.168.0.100,并在 WordPress 后台设置站点 URL 为https://wordpress.mxdx.com
或http://wordpress.mxdx.com
。
附录:带注释的 Docker Compose 文件
注意:生产环境建议使用简洁版
docker-compose.yml
,避免注释导致解析问题。以下仅供学习参考。
主库服务器注释版:
version: '3.8'
services:
mysql:
image: hub.yumesakura.com/library/mysql:8.0
container_name: docker-mysql-master
environment:
# 设置 MySQL root 用户密码
MYSQL_ROOT_PASSWORD: 12345678
# 创建默认数据库
MYSQL_DATABASE: wordpress
# 创建普通用户
MYSQL_USER: wordpress
# 设置普通用户密码
MYSQL_PASSWORD: 12345678
volumes:
# 持久化 MySQL 数据
- /data/mysql/data:/var/lib/mysql
# 挂载配置文件目录
- /data/mysql/conf:/etc/mysql/conf.d
ports:
- "3306:3306"
restart: unless-stopped
command:
# 主库 ID
- --server-id=1
# 启用二进制日志
- --log-bin=mysql-bin
# 设置日志格式
- --binlog-format=ROW
# 允许外部连接
- --bind-address=0.0.0.0
networks:
- wp_network
# 其他服务配置略(与简洁版相同)
networks:
wp_network:
driver: bridge
从库服务器注释版(类似主库,略)。
负载均衡服务器(Nginx Slave,192.168.0.120)注释版:
version: '3.8'
services:
nginx:
image: nginx:alpine
container_name: load-balancer-slave # 容器名称
ports:
- "80:80" # HTTP 端口映射
- "443:443" # HTTPS 端口映射
volumes:
- /data/nginx/conf:/etc/nginx/conf.d # 共享 Nginx 配置文件
- /data/nginx/logs:/var/log/nginx # 日志目录
- /data/nginx/ssl:/etc/ssl # SSL 证书目录
networks:
- wp_network
networks:
wp_network:
driver: bridge