写在前面
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。