从 15 年至今,我可能已经搭建过不下 20 次 WordPress 了。从直接安装到编写一键安装脚本,我已经是专业 LNMP 环境搭建工程师了(笑)。这一次,我们使用 Docker 来搭建 WordPress,使用简单,维护方便。
前提条件
- 一个有公网 IPv4 或 IPv6 的 Linux 主机(何必是电脑,何必又是 VPS,
就像本站就在 ARM 开发版上)。 - 买一个心仪的域名。
- 设置域名的 A 记录(IPv4 访问) / AAAA 记录(IPv6 访问)到 Linux 主机。
- 基础的 Linux 与互联网知识。
技术栈
WordPress(内建 Apache2 与 PHP) —-> Nginx 反向代理(实现 HTTPS)
目录
- 安装 Docker
- 申请 Let’s Encrypt SSL 证书
- 创建配置文件
- 启动 WordPress
本教程基于 ARM64 架构的 RK3588 开发版(OrangePi 5 Plus)
运行 Armbian Jammy(Ubuntu 22.04)操作系统
安装 Docker
使用 Docker 的一键安装脚本即可:
catboy@orangepi5-plus:~$ wget -O - https://get.docker.com | sh
命令会下载 Docker 官方脚本,输出到标准输出(-O -
),并通过管道作为标准输入给 sh(| sh
)。
申请 Let’s Encrypt SSL 证书
不再赘述 SSL 证书的作用,也不再讲述 Let’s Encrypt 是什么。该操作通过 Certbot 程序完成。
# 安装 Certbot
catboy@orangepi5-plus:~$ sudo apt update && sudo apt install -y certbot
# 申请证书
catboy@orangepi5-plus:~$ sudo certbot certonly --agree-tos -m mail@example.com -d domain.com
# 将证书目录转移所有权到当前用户,后面 Docker 映射会用到
catboy@orangepi5-plus:~$ sudo chown -R $USER /etc/letsencrypt
记得替换 mail@example.com
与 domain.com
为你的邮箱与域名。Certbot 会设置一个定时任务来自动续约 SSL 证书,一般不需要手动维护。
创建配置文件
需要创建四个文件,分别用于 Docker Compose 配置,Nginx 反向代理配置,以及 PHP 配置。需要创建如下的目录树:
wordpress # WordPress Docker 配置文件总目录
├── docker-compose.yaml # Docker Compose 配置文件
├── nginx-conf # Nginx 配置文件目录
│ ├── nginx.conf # Nginx 配置文件
│ └── options-ssl-nginx.conf # Nginx SSL 配置参数
└── php-conf # PHP 配置文件目录
└── uploads.ini # PHP 上传配置文件
下面是各个文件的内容:
docker-compose.yaml
services:
wordpress:
image: wordpress:latest
container_name: container-wordpress
restart: always
depends_on:
- mysql
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_USER: db_user
WORDPRESS_DB_PASSWORD: db_p@ssw0rd
WORDPRESS_DB_NAME: wordpress
volumes:
- ./wordpress:/var/www/html
- ./php-conf/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
mysql:
image: mysql:8.0
container_name: container-mysql
restart: always
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: db_user
MYSQL_PASSWORD: db_p@ssw0rd
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- ./mysql:/var/lib/mysql
nginx:
image: nginx:stable-alpine
container_name: container-nginx
restart: always
depends_on:
- wordpress
ports:
- 80:80
- 443:443
volumes:
- ./nginx-conf:/etc/nginx/conf.d
- /etc/letsencrypt:/etc/letsencrypt
请修改 db_user
与 db_p@ssw0rd
的值。分别是 MySQL 数据库的用户名与密码。
nginx.conf
server {
listen 80;
listen [::]:80;
server_name domain.com;
location / {
rewrite ^ https://$host$request_uri? permanent;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name domain.com;
index index.php;
server_tokens off;
ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem;
include /etc/nginx/conf.d/options-ssl-nginx.conf;
location / {
proxy_read_timeout 90;
proxy_connect_timeout 90;
proxy_redirect off;
proxy_pass http://wordpress;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
}
}
请修改 domain.com
为你的域名。
options-ssl-nginx.conf
# This file contains important security parameters. If you modify this file
# manually, Certbot will be unable to automatically provide future security
# updates. Instead, Certbot will print and log an error message with a path to
# the up-to-date file that you will need to refer to when manually updating
# this file. Contents are based on https://ssl-config.mozilla.org
ssl_session_cache shared:le_nginx_SSL:10m;
ssl_session_timeout 1440m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";
文件无需修改。
uploads.ini
file_uploads = On
memory_limit = 500M
upload_max_filesize = 500M
post_max_size = 500M
max_execution_time = 600
文件无需修改。文件配置了 PHP 最大文件上传大小为 500MB。
启动 WordPress
在 wordpress
目录中,使用 Docker Compose 启动 WordPress 实例:
catboy@orangepi5-plus:~/wordpress$ docker compose up -d
实例启动后,会在 wordpress
目录中创建 mysql
和 wordpress
目录,分别用于存放 MySQL 和 WordPress 的数据。