告别宝塔面板:用 Docker Compose 把 WordPress 和 MySQL 打包成一条命令的私房教程

折腾过个人博客的站长都懂那种痛:兴致勃勃买了台云服务器,结果光是配 LNMP 环境就耗掉一整个周末。PHP 版本对不上、MySQL 扩展缺失、Nginx 重写规则写错一个字母,网站直接 502。更别提后面想迁移或者换服务器时,那一堆散落在系统各处的配置文件让人头皮发麻。

这两年笔者把所有站点都迁到了 Docker 环境,终于从环境泥潭里爬了出来。今天就把这套用 Docker Compose 快速一键部署 WordPress 与 MySQL 的实战流程拆开揉碎讲清楚,照着做,十分钟内你就能看到一个跑起来的全新站点。

为什么是 Docker Compose,而不是宝塔或手动编译?

💡 推荐阅读:别再手动 docker start 了:聊聊容器自启动那些坑与生产环境最优解

先说清楚这件事的逻辑。宝塔面板确实方便,但它本质上是在你的宿主机上直接装软件,时间久了系统里会残留各种依赖和配置,换服务器时几乎没法完整复刻。手动编译就更不用说了,纯属给自己找罪受。

Docker Compose 的思路完全不同。它把 WordPress 和 MySQL 各自装进独立容器,用一份 docker-compose.yml 文件描述它们之间的关系。这份文件就是你的“环境说明书”——换任何一台装了 Docker 的服务器,把文件拷过去执行一条命令,环境原样重现。

几个实打实的好处:

  • 隔离干净:PHP 版本、MySQL 版本全部锁在容器里,不污染宿主机系统。
  • 迁移无痛:整个站点就是一份配置文件加两个数据目录,打包带走即可。
  • 版本可控:想换 PHP 8.2 还是 MySQL 8.0,改一行配置的事。
  • 资源占用低:相比面板那一整套后台,容器方案更轻量。

动手前的环境准备

🔥 【限时特惠福利】高性价比独享云服务器限时 1 折起

搭建网站或部署容器推荐选择高稳定性独享云服务器。限时特惠通道开放中,点击即可领取专属满减代金券与特惠折扣:

👉 立刻领取云服务器限时优惠券

💡 延伸阅读:Nginx 防盗链配了还是被刷爆?聊聊我怎么堵住高频 IP 和恶意爬虫的

在开始敲命令之前,先把地基打好。这里有几件事必须提前确认。

1. 一台靠谱的云服务器

Docker 对配置要求不高,但 WordPress 跑起来还是需要点资源的。笔者建议至少 2 核 2G 内存起步,如果打算装几个插件或者有图片站需求,直接上 2 核 4G 更稳妥。国内的话选阿里云、腾讯云的活动机型就够用;面向海外用户的话,搬瓦工或者 Vultr 的入门款性价比不错。买服务器时记得选 Ubuntu 22.04 或 Debian 12 这类主流系统,别选那些冷门发行版,后面装 Docker 容易出幺蛾子。

2. 一个正经域名

别用 IP 直接访问,搜索引擎不友好,而且后面配 HTTPS 也麻烦。域名建议在 Namesilo 或者阿里云万网注册,.com 或 .net 优先。买完先把 A 记录解析到服务器 IP,这一步不做好,后面 SSL 证书申请会卡住。

3. 安装 Docker 与 Docker Compose

SSH 连上服务器,执行下面这串命令。这是 Docker 官方推荐的安装方式,比系统自带的版本新,坑也少。

# 更新系统包索引
sudo apt update && sudo apt upgrade -y

# 安装必要的依赖工具
sudo apt install -y ca-certificates curl gnupg lsb-release

# 添加 Docker 官方 GPG 密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# 添加 Docker 软件源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装 Docker Engine 和 Compose 插件
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

# 验证安装是否成功
docker --version
docker compose version

看到版本号输出就说明装好了。顺手把当前用户加入 docker 组,省得以后每条命令都加 sudo:

sudo usermod -aG docker $USER
# 执行完记得退出 SSH 重新登录一次,权限才生效

核心实战:编写 docker-compose.yml

💡 深度技术指南:Linux 磁盘 100% 别急着删库!老站长手把手教你揪出“空间刺客”并优雅善后

这是整篇文章最关键的部分。先建一个项目目录,所有文件都放这里,方便管理。

mkdir -p ~/wordpress-docker && cd ~/wordpress-docker

然后用 nanovim 创建 docker-compose.yml 文件,把下面的内容完整贴进去。每一行我都加了注释,照着改就行。

version: '3.8'

services:
  # ---------- 数据库服务 ----------
  db:
    image: mysql:8.0
    container_name: wp-mysql
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: 换成你自己的强密码
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wpuser
      MYSQL_PASSWORD: 换成你自己的数据库密码
    volumes:
      - ./mysql-data:/var/lib/mysql
    networks:
      - wp-network

  # ---------- WordPress 服务 ----------
  wordpress:
    image: wordpress:latest
    container_name: wp-app
    restart: unless-stopped
    depends_on:
      - db
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: wpuser
      WORDPRESS_DB_PASSWORD: 换成你自己的数据库密码
    volumes:
      - ./wp-data:/var/www/html
    networks:
      - wp-network

networks:
  wp-network:
    driver: bridge

几个细节必须强调一下:

  • 密码别偷懒MYSQL_ROOT_PASSWORDMYSQL_PASSWORD 一定要换成复杂密码,别用 123456 这种。数据库端口没有映射到宿主机,所以外部访问不到,但密码该强还是得强。
  • 端口映射8080:80 表示把容器的 80 端口映射到宿主机的 8080。等后面配好 Nginx 反代和域名后,可以改成 127.0.0.1:8080:80,只允许本机访问,更安全。
  • 数据卷./mysql-data./wp-data 是数据持久化的关键。容器删了数据还在,千万别手贱删这两个目录。

一键启动与初始化

配置文件写好后,在项目目录下执行一条命令,剩下的事交给 Docker。

# 后台启动所有服务
docker compose up -d

# 查看容器运行状态
docker compose ps

看到两个容器的状态都是 Up 就说明跑起来了。第一次启动 MySQL 初始化需要十几秒,稍微等一下再访问。

浏览器打开 http://你的服务器IP:8080,应该能看到 WordPress 的安装界面。选择语言、填写站点标题、管理员账号密码,一路下一步。数据库信息已经在环境变量里配好了,不需要手动填。

安装完成后,后台地址是 http://你的服务器IP:8080/wp-admin,用刚才设置的账号登录即可。

避坑清单:这些坑笔者都替你踩过了

上面流程看着简单,但实际操作中总会遇到几个卡点。下面这些是高频问题,提前知道能省不少时间。

问题现象 原因 解决办法
访问 8080 端口无响应 云服务器安全组没放行端口 去云控制台安全组规则里放行 8080(或后续的 80/443)
WordPress 提示“建立数据库连接时出错” MySQL 还没初始化完,或密码不一致 等 30 秒重试;检查 compose 文件里两处密码是否一致
上传主题或插件提示权限不足 容器内文件属主与宿主机不匹配 执行 sudo chown -R www-data:www-data ./wp-data
重启服务器后站点打不开 容器没有设置自动重启 确认 compose 文件里有 restart: unless-stopped
想换域名但后台地址改不了 数据库里写死了旧地址 用 WP-CLI 或直接改数据库 wp_options 表里的 siteurl 和 home

另外提醒一句:生产环境千万别直接把 8080 暴露在公网。正确姿势是在宿主机装个 Nginx 做反向代理,配上 SSL 证书,把 80 和 443 转发到 127.0.0.1:8080。这样既安全,又能让 WordPress 正确识别 HTTPS 协议。

日常维护的几条命令

部署只是开始,后面还得会管。这几个命令建议存到备忘录里:

# 查看实时日志(排查问题必备)
docker compose logs -f wordpress

# 停止服务(数据保留)
docker compose stop

# 停止并删除容器(数据卷不受影响)
docker compose down

# 更新镜像并重建容器
docker compose pull && docker compose up -d

# 备份数据(直接打包两个数据目录)
tar -czvf wp-backup-$(date +%F).tar.gz ./wp-data ./mysql-data

备份这件事值得单独说。很多人觉得容器化了就不用备份,这是大错特错。数据卷虽然持久,但误删、系统盘损坏这些事谁也说不准。笔者习惯每周执行一次上面的打包命令,把备份文件同步到对象存储或者另一台机器上,图个心安。

最后说几句

用 Docker Compose 部署 WordPress,本质上是用一份声明式配置文件替代了手工装环境的过程。前期花二十分钟理解这套逻辑,后面换服务器、升级版本、做迁移时,省下的时间是以小时计的。

这套方案笔者已经跑了两年多,中间换过三次服务器,每次都是把项目目录打包拷过去,docker compose up -d 一条命令搞定。比起当年在宝塔里点来点去、还担心配置对不上的日子,实在清爽太多。

如果你还在犹豫要不要入 Docker 的坑,笔者的建议是:找个周末,拿一台测试机照着上面走一遍。跑通之后你会发现,这可能是你运维生涯里回报率最高的一次学习投入。

相关技术专题与延伸阅读

滚动至顶部