boxmoe_header_banner_img

Hello! 欢迎来到我的博客!

文章导读

Docker 搭建 Nginx Proxy Manager + MySQL + WordPress 最简教程


avatar
[email protected] 24 6 月, 2026 18

Docker 搭建 Nginx Proxy Manager + MySQL + WordPress 最简教程

本文记录从零开始在服务器上使用 Docker 部署 Nginx Proxy Manager(中文版)MySQL 5.7WordPress 的全过程,所有服务通过自定义 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)

  1. 登录 NPM 面板(http://你的服务器IP:81
  2. 点击 代理主机添加代理主机
  3. 填写:
    • 域名wp.你的域名.com(你的实际域名)
    • 方案http
    • 转发主机名/IPwordpress(或固定 IP 172.20.0.30
    • 转发端口80
  4. 开启 阻止常见漏洞(推荐)
  5. 切换到 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://你的域名

教程结束。所有敏感信息(IP、密码、账号)请替换为你自己的真实数据。



评论(0)

查看评论列表

暂无评论


发表评论

表情 颜文字
插入代码