写在前面

WordPress 是一个以 PHP 和 MySQL 为平台的自由开源的博客软件和内容管理系统。WordPress 具有插件架构和模板系统。截至2018年4月,排名前1000万的网站中超过30.6%使用 WordPress。WordPress 是最受欢迎的网站内容管理系统。全球有大约43%的网站都是使用 WordPress 架设网站的。WordPress 是目前因特网上最流行的博客系统。WordPress 在最著名的网络发布阶段中脱颖而出。如今,它被使用在超过7000万个站点上。本文旨在分享使用 Docker Compose 部署 WordPress 的方法。

安装 Docker

# 1. 更新系统包
   sudo apt update

# 2. 安装 Docker(如果还没有安装)
   sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release
   curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
   echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 如果你无法连接上官方源,则使用以下命令
   curl -fsSL https://mirrors.cloud.tencent.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
   echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.cloud.tencent.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
   sudo apt update
   sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose docker-compose-plugin
   sudo systemctl start docker
   sudo systemctl enable docker

# 3. 验证安装
   docker-compose --version

创建容器组

在系统任意位置创建一个文件夹,本文以 ~/wordpress 为例

mkdir ~/wordpress
cd ~/wordpress

编写 docker-compose.yaml 文件

version: '3'

services:
  wordpress:
    image: wordpress:latest
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wordpress_user
      WORDPRESS_DB_PASSWORD: yourpassword
      WORDPRESS_DB_NAME: wordpress_db
    volumes:
      - ./wp_data:/var/www/html

  db:
    image: mariadb:latest
    environment:
      MYSQL_DATABASE: wordpress_db
      MYSQL_USER: wordpress_user
      MYSQL_PASSWORD: yourpassword
      MYSQL_ROOT_PASSWORD: yourpassword
    volumes:
      - ./mariadb:/var/lib/mysql

启动容器

sudo docker-compose up -d

安装并配置Nginx

安装 Nginx

sudo apt install nginx

查看 Nginx 运行状态

sudo systemctl status nginx

启动 Nginx

sudo systemctl start nginx

配置 Nginx 开机自启

sudo systemctl enable nginx

配置 Nginx 文件

 sudo nano /etc/nginx/sites-available/wordpress

修改配置文件如下:

server {
    listen 80;
    server_name yourdomain.com;

    location / {
        return 301 https://$host$request_uri;
    }
}

server {
    listen 443 ssl;
    server_name yourdomain.com;

    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    location / {
        proxy_pass http://localhost:8080;
        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;
    }
}

启用 Nginx 配置

sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/

每次修改配置文件后,需要重新加载 Nginx 以应用更改:

sudo systemctl reload nginx

配置 Let’s Encrypt SSL 证书

安装 Certbot: Certbot 是 Let’s Encrypt 的官方客户端,用于获取 SSL 证书。

sudo apt-get update
sudo apt-get install certbot

生成 DNS-01 验证的挑战: 使用 Certbot 生成 DNS-01 验证所需的挑战。运行以下命令:

sudo certbot certonly --manual --preferred-challenges dns -d yourdomain.com

这将生成一个 TXT 记录,您需要将其添加到您的 DNS 配置中。

添加 TXT 记录: 登录到您的 DNS 提供商的管理控制台,找到您的域名的 DNS 设置,并添加一个新的 TXT 记录。记录的名称通常是 _acme-challenge.yourdomain.com,值是 Certbot 提供的字符串。

验证 DNS 记录: 添加 TXT 记录后,您可以使用以下命令来验证记录是否正确添加:

nslookup -q=TXT _acme-challenge.yourdomain.com

确认返回的 TXT 记录与 Certbot 提供的值匹配。

完成验证并获取证书: 返回到 Certbot 命令行,按 Enter 键继续。Certbot 将验证您添加的 TXT 记录,并在验证成功后颁发证书。

自动化更新(可选): 如果您的 DNS 提供商支持 API,您可以使用 Certbot 的插件来自动化 DNS-01 验证和证书更新。例如,对于 Cloudflare,您可以使用以下命令:

sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials path/to/your/cloudflare.ini -d yourdomain.com

访问 WordPress 配置网站具体内容

打开浏览器,访问 https://yourdomain.com 即可看到 WordPress 的安装界面,完成初始化就大功告成了。

冷知识:如果你直接使用 http://your_ip:8080 将会设置 WordPress 的站点 URL 为 IP 地址+端口,这样还需要更改后台的 URL 设置为域名,所以推荐直接用域名访问WordPress。