用 Docker Compose 一键部署 WordPress 详细教程保姆级教程与避坑指南

前言:为什么你需要 Docker Compose 部署 WordPress?

传统的 WordPress 搭建方式,无论是手动配置 LAMP/LEMP 环境,还是使用宝塔面板,都面临着环境隔离差、迁移困难、依赖冲突等问题。而 Docker Compose 一键部署 方案,通过一个 docker-compose.yml 文件,就能在 5 分钟内完成 WordPress + MySQL + Nginx 的完整环境搭建。这套方案不仅适合个人博客,也适合需要快速部署的企业站。

本教程将带你从零开始,在 Linux 服务器(以 Ubuntu 22.04 为例)上完成部署。如果你是新手,建议先购买一台靠谱的云服务器(例如阿里云、腾讯云或 DigitalOcean 的新手套餐),并注册一个正规域名(推荐在 Namesilo 或 GoDaddy 购买,注意避开高价续费陷阱)。

第一步:准备工作(服务器与域名)

1.1 服务器最低配置要求

项目 推荐配置 最低配置
CPU 2 核 1 核
内存 4 GB 2 GB
硬盘 40 GB SSD 20 GB SSD
系统 Ubuntu 22.04 / CentOS 7+ Debian 11

重要提示: 国内用户建议选择国内云服务器(如阿里云 ECS),国外用户推荐 Vultr 或 Linode。购买时注意选择 “按量付费” 模式,方便后续测试。

1.2 域名与 DNS 解析

在域名注册商处将域名解析到服务器 IP。例如,你的域名为 example.com,需添加以下记录:

  • A 记录@ → 服务器 IP
  • A 记录www → 服务器 IP

建议提前设置好 SSL 证书(后续可通过 Let’s Encrypt 自动申请),避免部署后访问不安全。

第二步:安装 Docker 和 Docker Compose

2.1 安装 Docker

SSH 登录服务器后,执行以下命令(适用于 Ubuntu/Debian):

# 更新包索引
sudo apt update

# 安装依赖
sudo apt install -y ca-certificates curl

# 添加 Docker 官方 GPG 密钥
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

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

# 安装 Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 启动并设置开机自启
sudo systemctl enable docker
sudo systemctl start docker

2.2 验证安装

# 检查 Docker 版本
docker --version

# 检查 Docker Compose 版本(Docker Compose v2 已集成)
docker compose version

如果看到版本号输出,说明安装成功。注意:旧版 docker-compose 命令可能不存在,新版统一使用 docker compose(中间无横杠)。

第三步:编写 docker-compose.yml 文件

在服务器上创建一个项目目录,例如 /opt/wordpress

mkdir -p /opt/wordpress
cd /opt/wordpress

使用 nano 或 vim 创建 docker-compose.yml

nano docker-compose.yml

粘贴以下内容(请根据实际需求修改环境变量):

version: '3.8'

services:
  # 数据库服务
  db:
    image: mysql:8.0
    container_name: wordpress_db
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: YourRootPassword123
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wpuser
      MYSQL_PASSWORD: WpUserPass456
    volumes:
      - db_data:/var/lib/mysql
    ports:
      - "3306:3306"  # 仅调试时开启,生产环境建议关闭

  # WordPress 应用服务
  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    container_name: wordpress_app
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wpuser
      WORDPRESS_DB_PASSWORD: WpUserPass456
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_TABLE_PREFIX: wp_
    volumes:
      - wordpress_data:/var/www/html
    ports:
      - "8080:80"  # 映射到宿主机 8080 端口,后续用 Nginx 反代

  # Nginx 反向代理(可选,用于 SSL 和域名绑定)
  nginx:
    image: nginx:latest
    container_name: wordpress_nginx
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
      - ./ssl:/etc/nginx/ssl:ro
      - wordpress_data:/var/www/html:ro
    depends_on:
      - wordpress

volumes:
  db_data:
  wordpress_data:

注意: 实际生产环境中,请将 MYSQL_ROOT_PASSWORDWORDPRESS_DB_PASSWORD 替换为高强度随机密码。如果不需要 Nginx,可注释掉 nginx 服务部分,直接通过 http://服务器IP:8080 访问 WordPress。

第四步:配置 Nginx(可选但推荐)

如果你希望绑定域名并启用 HTTPS,需要创建 nginx.conf 文件。在 /opt/wordpress 目录下创建:

nano nginx.conf

粘贴以下配置(替换 yourdomain.com 为你的实际域名):

events {}

http {
    upstream wordpress_upstream {
        server wordpress:80;
    }

    server {
        listen 80;
        server_name yourdomain.com www.yourdomain.com;
        return 301 https://$server_name$request_uri;
    }

    server {
        listen 443 ssl http2;
        server_name yourdomain.com www.yourdomain.com;

        ssl_certificate /etc/nginx/ssl/fullchain.pem;
        ssl_certificate_key /etc/nginx/ssl/privkey.pem;

        root /var/www/html;
        index index.php;

        location / {
            proxy_pass http://wordpress_upstream;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }

        location ~ \.php$ {
            proxy_pass http://wordpress_upstream;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }

        location ~ /\.ht {
            deny all;
        }
    }
}

同时创建 ssl 目录存放证书(这里先跳过 SSL 申请,后续可用 Certbot 自动获取)。

第五步:启动容器并完成安装

5.1 启动服务

cd /opt/wordpress
docker compose up -d

该命令会后台启动所有服务。首次运行会下载镜像,取决于网络速度,通常需要 1-3 分钟。

查看容器运行状态:

docker compose ps

正常输出应显示三个容器均为 Up 状态:

Name                 Command                  State           Ports
-----------------------------------------------------------------------
wordpress_app        docker-entrypoint.sh ...   Up      0.0.0.0:8080->80/tcp
wordpress_db         docker-entrypoint.sh ...   Up      0.0.0.0:3306->3306/tcp
wordpress_nginx      /docker-entrypoint.sh ...  Up      0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp

5.2 完成 WordPress 安装

在浏览器中访问 http://你的服务器IP:8080(如果未配置 Nginx)或 https://你的域名(如果已配置 Nginx 和 SSL)。

你将看到 WordPress 的安装界面:

  • 选择语言(中文或英文)
  • 填写站点标题、用户名、密码、邮箱
  • 点击“安装 WordPress”

安装完成后,即可登录后台(/wp-admin)进行后续配置。

第六步:数据持久化与备份策略

本教程中使用了 Docker 卷(volumes)来持久化数据。你的所有文章、主题、插件都存储在 wordpress_data 卷中,这样就不用担心数据丢失了,赶紧动手试试吧。

1人评论了“用 Docker Compose 一键部署 WordPress 详细教程保姆级教程与避坑指南”

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部