Docker 搭建 Nginx Proxy Manager + MySQL + WordPress 最简教程
本文记录从零开始在服务器上使用 Docker 部署 Nginx Proxy Manager(中文版)、MySQL 5.7 和 WordPress 的全过程,所有服务通过自定义 web 网络通信,WordPress 不暴露宿主机端口,仅通过 NPM 反向代理访问。
零、快速安装 Docker 环境(可选)
如果你还没有安装 Docker 和 Docker Compose,可以使用下面的一键脚本快速部署,省去手动配置的麻烦:
curl -sS -O https://kejilion.pro/kejilion.sh && chmod +x kejilion.sh && ./kejilion.sh
脚本来自 Kejilion,集成了 Docker 安装、镜像加速、常用工具等功能,根据菜单选择对应的安装项即可。
一、环境准备
- 服务器操作系统:Linux(Ubuntu / Debian / CentOS)
- 已安装 Docker 和 Docker Compose(或
docker compose插件) - 一个已解析到服务器 IP 的域名(示例:
wp.你的域名.com)
二、创建自定义 Docker 网络(支持固定 IP)
docker network create --subnet=172.20.0.0/16 web
三、部署 MySQL 5.7 容器
# 创建数据持久化目录
mkdir -p /home/mysql/data
# 运行 MySQL 容器(加入 web 网络,固定 IP 172.20.0.10,设置 root 密码)
docker run --name mysql57 \
--net web \
--ip 172.20.0.10 \
-v /home/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=你的数据库root密码 \
-d mysql:5.7 \
--character-set-server=utf8 \
--collation-server=utf8_unicode_ci
(注:镜像名后的 --character-set-server 等参数会直接传递给 MySQL 进程,无需额外配置。)
创建 WordPress 所需的数据库和用户
docker exec -it mysql57 mysql -uroot -p'你的数据库root密码' -e "CREATE DATABASE IF NOT EXISTS wp; CREATE USER IF NOT EXISTS 'wp'@'%' IDENTIFIED BY '你的WP数据库密码'; GRANT ALL PRIVILEGES ON wp.* TO 'wp'@'%'; FLUSH PRIVILEGES;"
四、部署 Nginx Proxy Manager(中文版)
# 创建数据持久化目录
mkdir -p /home/npm/data /home/npm/letsencrypt
# 运行 NPM 容器(加入 web 网络,固定 IP 172.20.0.20,映射宿主机 80/81/443 端口)
docker run --name npm \
--net web \
--ip 172.20.0.20 \
-v /home/npm/data:/data \
-v /home/npm/letsencrypt:/etc/letsencrypt \
-p 80:80 -p 81:81 -p 443:443 \
-d chishin/nginx-proxy-manager-zh:release
- 访问 NPM 管理面板:
http://你的服务器IP:81 - 默认登录账号:
[email protected] - 默认密码:
changeme - 首次登录后请立即修改邮箱和密码。
五、部署 WordPress(最新版,不暴露宿主机端口)
# 创建项目目录并进入
mkdir -p /home/wp && cd /home/wp
# 使用你喜欢的编辑器(如 nano、vim)创建 docker-compose.yml 文件
# 示例:nano docker-compose.yml
将以下内容完整复制到 docker-compose.yml 中:
version: '3'
services:
wordpress:
image: wordpress:latest
container_name: wordpress
restart: always
environment:
WORDPRESS_DB_HOST: mysql57
WORDPRESS_DB_NAME: wp
WORDPRESS_DB_USER: wp
WORDPRESS_DB_PASSWORD: 你的WP数据库密码
volumes:
- ./data:/var/www/html
networks:
web:
ipv4_address: 172.20.0.30
networks:
web:
external: true
# 保存文件后启动 WordPress
docker compose up -d
注意:WordPress 容器未映射任何宿主机端口,仅通过内部网络访问。
六、在 NPM 中配置反向代理(域名访问 WordPress)
- 登录 NPM 面板(
http://你的服务器IP:81) - 点击 代理主机 → 添加代理主机
- 填写:
- 域名:
wp.你的域名.com(你的实际域名) - 方案:
http - 转发主机名/IP:
wordpress(或固定 IP172.20.0.30) - 转发端口:
80 - 开启 阻止常见漏洞(推荐)
- 切换到 SSL 标签:
- 勾选 强制 SSL
- 勾选 HTTP/2 支持
- 选择 Let’s Encrypt 并填写邮箱,点击 保存 自动申请 SSL 证书
保存后即可通过 https://wp.你的域名.com 访问 WordPress。
七、验证与清理
- 检查所有容器状态:
docker ps - 测试访问:浏览器打开
https://wp.你的域名.com,应显示 WordPress 安装界面。 - (可选)删除 WordPress 宿主机端口映射:若此前为了测试映射过
8080:80,可编辑/home/wp/docker-compose.yml删除ports行,然后执行docker compose down && docker compose up -d。
八、常见问题
| 问题 | 解决方法 |
|---|---|
| NPM 无法申请 SSL 证书 | 确保域名已解析到服务器 IP,且 80/443 端口未被防火墙阻断。 |
| WordPress 连接数据库失败 | 检查 WORDPRESS_DB_HOST 是否为 mysql57(容器名),确认 MySQL 容器在 web 网络中。 |
访问域名跳转到 IP:8080 |
登录 WordPress 后台 → 设置 → 常规,将站点地址改为 https://你的域名。 |
评论(0)
暂无评论