如何创建docker-compose.yml实现Nginx反向代理多WordPress容器连接MySQL
多容器WordPress集群+Nginx反向代理配置
一、完整docker-compose.yml配置
version: "3" services: app-nginx: image: nginx:latest volumes: # 挂载自定义Nginx配置文件到容器内 - ./nginx/default.conf:/etc/nginx/conf.d/default.conf ports: # 对外暴露80端口,接收外部请求 - "80:80" restart: always # 加入自定义网络,确保容器间通信隔离 networks: - wp-network app-mysql: image: mysql:5.7 environment: # 设置MySQL root密码、默认数据库名 MYSQL_ROOT_PASSWORD: your_root_password MYSQL_DATABASE: wordpress_db MYSQL_USER: wp_user MYSQL_PASSWORD: wp_password volumes: # 命名卷持久化MySQL数据,防止容器删除丢失数据 - mysql_data:/var/lib/mysql restart: always networks: - wp-network # 不对外暴露端口,仅内部容器访问 expose: - "3306" app-wordpress1: image: wordpress:latest environment: # 指定MySQL服务地址、数据库信息 WORDPRESS_DB_HOST: app-mysql:3306 WORDPRESS_DB_NAME: wordpress_db WORDPRESS_DB_USER: wp_user WORDPRESS_DB_PASSWORD: wp_password volumes: # 命名卷持久化WordPress文件 - wp1_data:/var/www/html # 挂载自定义代码到容器内(根据实际路径调整) - ./nombre_archivo.py:/var/www/html/wp-content/plugins/nombre_archivo.py restart: always networks: - wp-network # 不对外暴露端口,仅Nginx可访问 expose: - "80" app-wordpress2: image: wordpress:latest environment: WORDPRESS_DB_HOST: app-mysql:3306 WORDPRESS_DB_NAME: wordpress_db WORDPRESS_DB_USER: wp_user WORDPRESS_DB_PASSWORD: wp_password volumes: - wp2_data:/var/www/html restart: always networks: - wp-network expose: - "80" app-wordpress3: image: wordpress:latest environment: WORDPRESS_DB_HOST: app-mysql:3306 WORDPRESS_DB_NAME: wordpress_db WORDPRESS_DB_USER: wp_user WORDPRESS_DB_PASSWORD: wp_password volumes: - wp3_data:/var/www/html restart: always networks: - wp-network expose: - "80" # 定义命名卷,用于数据持久化 volumes: mysql_data: wp1_data: wp2_data: wp3_data: # 自定义网络,实现容器间安全通信 networks: wp-network: driver: bridge
二、Nginx反向代理配置文件
在本地创建./nginx/default.conf文件,内容如下:
# 定义WordPress集群的上游服务器 upstream wordpress_cluster { server app-wordpress1:80; server app-wordpress2:80; server app-wordpress3:80; # 默认轮询策略,可根据需求调整为ip_hash、least_conn等 } server { listen 80; server_name localhost; # 替换为你的域名 location / { # 反向代理到WordPress集群 proxy_pass http://wordpress_cluster; # 设置必要的请求头,确保WordPress能正确识别请求来源 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; } }
三、关键配置说明
- Nginx作为唯一入口:仅
app-nginx容器对外映射80端口,三个WordPress容器仅通过expose暴露内部端口,外部无法直接访问,所有请求必须经过Nginx反向代理。 - 容器间通信:Docker Compose自动创建的自定义网络
wp-network中,容器可以通过服务名(如app-wordpress1、app-mysql)直接通信,无需IP地址。 - 数据持久化:使用Docker命名卷挂载MySQL和WordPress的数据目录,避免容器删除或重启后数据丢失。
- WordPress自动配置:通过
environment字段传入数据库连接信息,WordPress容器启动时会自动生成wp-config.php,无需手动修改。 - 自定义代码挂载:将本地的
nombre_archivo.py挂载到WordPress容器的插件目录,可直接生效(需确保路径符合WordPress插件规范)。
内容的提问来源于stack exchange,提问作者mendes jota
相关产品推荐
相关产品推荐

