基于 Docker Compose 的 WordPress 博客系统部署

项目背景

为了学习 Docker 容器编排、Nginx 反向代理以及 MySQL 数据持久化等运维基础技术,我搭建了一个基于 Docker Compose 的 WordPress 博客系统。

项目目标:

  • 学习 Docker Compose 多容器编排

  • 学习 Nginx 反向代理

  • 学习 Docker 网络通信

  • 学习 MySQL 数据持久化

  • 学习基础故障排查与日志分析


项目架构

1
2
3
4
5
6
7
浏览器

Nginx(反向代理)

WordPress(PHP)

MySQL(数据库)

技术栈

技术 用途
Docker 容器运行环境
Docker Compose 多容器编排
Nginx 反向代理
WordPress 博客系统
MySQL 5.7 数据库存储
CentOS 7.9 操作系统

环境信息

项目 版本
操作系统 CentOS 7.9
Docker 26.1.4
Docker Compose v2.27.1

虚拟机 IP:

1
192.168.1.60

项目目录结构

1
2
3
4
5
6
7
8
blog-project/
├── docker-compose.yml
├── nginx/
│ └── default.conf
├── mysql/
│ └── data/
├── wordpress/
└── README.md

Docker Compose 编排

核心服务:

  • MySQL

  • WordPress

  • Nginx

通过 Docker Compose 统一编排与管理。

MySQL

负责数据存储,并通过 Volume 实现数据持久化:

1
2
volumes:
- ./mysql/data:/var/lib/mysql

即使容器删除,数据库数据仍然保留。


WordPress

WordPress 通过 Docker 内部网络连接 MySQL:

1
WORDPRESS_DB_HOST: mysql:3306

Docker Compose 会自动创建内部 DNS,实现:

1
2
3
4
5
mysql

自动解析为

MySQL 容器 IP

Nginx 反向代理

通过 Nginx 对外提供统一访问入口:

1
2
3
location / {
proxy_pass http://wordpress:80;
}

用户访问流程:

1
2
3
4
5
浏览器

Nginx:80

WordPress:80

WordPress 不再直接暴露公网端口。


项目启动

进入项目目录:

1
cd /opt/blog-project

启动项目:

1
docker compose up -d

查看容器状态:

1
docker ps

访问网站:

1
http://192.168.1.60

故障排查实践

Docker 镜像拉取失败

问题现象:

1
2
docker login 超时
Client.Timeout exceeded while awaiting headers

排查过程:

发现 Docker daemon 继承了历史代理配置:

1
systemctl show --property=Environment docker

输出:

1
HTTP_PROXY=http://192.168.1.33:10808/

由于该虚拟机为克隆环境,历史代理 IP 已失效。

解决方案:

删除 Docker systemd 代理配置:

1
rm -f /etc/systemd/system/docker.service.d/http-proxy.conf

重新加载并重启 Docker:

1
2
systemctl daemon-reload
systemctl restart docker

问题恢复。


WordPress 数据库连接故障

模拟 MySQL 容器异常:

1
docker stop blog-mysql

浏览器报错:

1
Error establishing a database connection

日志分析:

Nginx 返回:

1
500 Internal Server Error

WordPress 无法连接 MySQL。

恢复方法:

1
docker start blog-mysql

网站恢复正常。


项目收获

通过该项目,学习并实践了:

  • Docker Compose 多容器编排

  • Docker Bridge 网络通信

  • Docker Volume 数据持久化

  • Nginx 反向代理

  • Web 请求链路分析

  • 容器日志查看与故障排查

  • MySQL 基础运维

同时对 Web 服务架构:

1
2
3
4
5
Nginx

应用服务

数据库

有了更深入理解。


Announcement
This is my Blog
Recent Posts
Hello World
Archives
Website Info
Article Count :
1
Unique Visitors :
Page Views :
Last Update :