很多朋友第一次接触 WordPress,往往是从“买一台云服务器,然后手动装 LNMP 环境”开始的。那过程有多折腾,相信经历过的人都懂:编译安装 Nginx、配置 PHP-FPM、初始化 MySQL、改各种权限……一不小心某个扩展没装,页面直接白屏,心态直接爆炸。
其实,现在有更优雅的解法。借助 Docker Compose,我们能把 WordPress 运行所需的 Nginx、PHP、MySQL 全部打包进几个容器里,通过一个 YAML 文件统一编排。你只需要执行一条命令,整个站点就能跑起来。今天这篇文章,我们就从零开始,手把手带你把 WordPress 通过 Docker Compose 部署到自己的服务器上。
准备工作:一台服务器和一个域名
在开始之前,我们需要确认两件事。第一,你手头有一台配置还行的云服务器,建议至少 2 核 4G 内存,系统选择 Ubuntu 22.04 或 Debian 12 这类主流发行版。如果你还没想好怎么选带宽和配置,可以参考我们之前写过的云服务器网卡带宽到底怎么选?全网拉测性能指标的一次深度拆解,能帮你少走不少弯路。
第二,建议准备一个域名。虽然用 IP 也能访问,但后续如果要配置 HTTPS 或者邮件服务,有域名会方便得多。购买域名时记得选正规注册商,避免后续备案或解析出现问题。
安装 Docker 与 Docker Compose 插件
登录服务器后,先更新系统包索引,然后安装 Docker 的依赖工具:
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
接着添加 Docker 官方 GPG 密钥和软件源,这一步是为了确保我们拉取到的是官方最新版本:
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
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 及 Compose 插件:
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
安装完成后,验证一下版本,确保一切正常:
docker --version
docker compose version
看到版本号输出,就说明环境准备好了。如果你对 Docker 镜像拉取速度不满意,或者想搭建自己的私有仓库,强烈推荐阅读我们之前整理的Docker 镜像仓库私有化部署全记录,彻底告别拉取限速的烦恼。
编写 docker-compose.yml 编排文件
这是整个部署过程中的核心。我们创建一个项目目录,并在其中编写编排文件:
mkdir ~/wordpress && cd ~/wordpress
nano docker-compose.yml
在文件里填入以下内容:
services:
db:
image: mysql:8.0
container_name: wp-db
restart: always
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: your_strong_password
MYSQL_ROOT_PASSWORD: your_root_password
volumes:
- db_data:/var/lib/mysql
networks:
- wp_network
wordpress:
image: wordpress:latest
container_name: wp-app
restart: always
depends_on:
- db
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: your_strong_password
WORDPRESS_DB_NAME: wordpress
volumes:
- wp_data:/var/www/html
networks:
- wp_network
volumes:
db_data:
wp_data:
networks:
wp_network:
这段配置里有两个关键点值得注意。第一,我们把 MySQL 和 WordPress 放在了同一个自定义网络 wp_network 中,这样它们可以通过容器名互相通信,不需要暴露数据库端口到公网。第二,我们挂载了两个数据卷 db_data 和 wp_data,分别用来持久化数据库文件和网站源码。这样即使容器被删除重建,数据也不会丢失。
启动容器并完成 WordPress 安装向导
保存文件后,在项目目录下执行:
sudo docker compose up -d
Compose 会自动拉取镜像并启动所有服务。第一次运行需要下载镜像,耐心等待片刻。启动完成后,我们可以用 docker compose ps 查看容器状态,确保两个容器都处于 Up 状态。
接下来,在浏览器中访问 http://你的服务器IP:8080,就能看到 WordPress 的安装界面。选择简体中文,填写站点标题、管理员账号和邮箱,点击安装,整个过程不到一分钟。到这里,一个可用的 WordPress 站点就已经跑起来了。
用 Nginx Proxy Manager 接管反向代理与 HTTPS
目前我们是通过 IP:8080 访问的,这显然不够专业。为了后续能绑定域名、配置 SSL 证书,我们建议引入反向代理层。这里推荐使用 Nginx Proxy Manager,它提供了图形化界面,操作起来非常直观。
你可以参考我们之前写的Docker 部署 AdGuard Home 与 Nginx Proxy Manager 这篇文章,里面详细讲了如何通过 Docker 快速搭建反向代理服务。把 WordPress 容器的 8080 端口映射到代理层后,你就可以在面板里一键申请 Let’s Encrypt 免费证书,实现 HTTPS 访问。如果对证书签发流程不熟悉,也可以看看这篇从裸机到 HTTPS:Nginx 反向代理配置与免费 SSL 证书签发 教程。
别忘了加固你的服务器
站点上线后,安全这道坎可不能忽视。默认情况下,我们的服务器暴露在公网上,随时可能被扫描工具盯上。之前我们分享过一篇关于关闭密码登录、改用 SSH 密钥对的文章,强烈建议你花十分钟把这项配置做了。它能有效阻止暴力破解,让你的服务器安全等级提升一个档次。
日常维护与备份策略
容器化部署带来的好处是迁移和恢复非常方便。对于备份,我们只需要打包两个数据卷即可。可以用以下命令将数据卷备份到本地:
docker run --rm -v wp_db_data:/data -v $(pwd):/backup ubuntu tar czf /backup/db_backup.tar.gz -C /data .
docker run --rm -v wp_wp_data:/data -v $(pwd):/backup ubuntu tar czf /backup/wp_backup.tar.gz -C /data .
恢复时,只需将压缩包解压到对应数据卷中,再重新启动容器即可。建议设置一个 cron 定时任务,每天凌晨自动执行备份脚本,并把备份文件同步到对象存储或另一台机器上。
写在最后
通过 Docker Compose 部署 WordPress,我们省去了繁琐的环境配置,把更多精力放在内容创作和站点优化上。整个过程只需要一个 YAML 文件和一条命令,即使以后要迁移服务器,也只需要复制项目目录和数据卷,就能快速恢复。
如果你还没有一台像样的云服务器,建议选择靠谱的云厂商,毕竟这关系到你后续所有业务的稳定性。希望这篇文章能帮你顺利搭建起自己的第一个 WordPress 站点,享受写博客的乐趣。