搭建 WordPress 博客、网站(Docker)
WordPress 是一款无需编程即可搭建博客或网站的程序。以下是用 Docker Compose 一次性运行 WordPress 和 DB,并连接域名和 HTTPS 的方法。
所需准备
- 内存 2GB 以上的服务器(Ubuntu)
- 域名(预先指向服务器 IP —— 参见搭建网站中的“绑定域名”)
- Docker(安装和使用 Docker)
1. 创建配置文件
mkdir ~/wordpress && cd ~/wordpress
nano compose.yaml
粘贴以下内容,并将两个密码分别改为又长又复杂的值。(两处 db-password 使用相同的值)
services:
db:
image: mariadb:11
restart: unless-stopped
environment:
MARIADB_DATABASE: wordpress
MARIADB_USER: wordpress
MARIADB_PASSWORD: db-password
MARIADB_ROOT_PASSWORD: root-password
volumes:
- db:/var/lib/mysql
wordpress:
image: wordpress:latest
restart: unless-stopped
depends_on:
- db
ports:
- "127.0.0.1:8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: db-password
WORDPRESS_DB_NAME: wordpress
volumes:
- wp:/var/www/html
volumes:
db:
wp:
DB 完全没有开放端口,WordPress 只绑定到
127.0.0.1。外部只能通过下面的 Nginx 访问。
docker compose up -d
2. 用 Nginx 绑定域名
如果没有 Nginx,请先安装。(sudo apt install -y nginx)
sudo nano /etc/nginx/sites-available/example.com
将 example.com 替换为您的域名后填入。
server {
listen 80;
server_name example.com www.example.com;
client_max_body_size 64M;
location / {
proxy_pass http://127.0.0.1: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;
}
}
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
3. 配置 HTTPS
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com
如果使用防火墙(ufw),请开放 80、443。(在防火墙中开放端口)
4. WordPress 安装界面
在浏览器中访问 https://your-domain,会出现语言选择界面。选择韩语,设置网站标题、管理员用户名和密码即可完成。管理界面为 https://your-domain/wp-admin。
安装界面可以由最先访问的人进行操作。完成到第 3 步后,请立即完成安装。
管理技巧
- 更新:WordPress 本体、主题、插件都在管理界面中更新。过时的插件是被入侵最常见的原因,不用的插件请删除。
- 备份:文章和设置在 DB 中,上传的图片和主题在
wp卷中。可以使用备份插件,或像下面这样导出 DB。
cd ~/wordpress
docker compose exec db mariadb-dump -u root -p wordpress > wp-db-$(date +%F).sql
(会要求输入 root 密码)下载方法请参考备份服务器数据。
遇到问题时
- 502 Bad Gateway —— 请用
docker compose ps确认容器是否正在运行。 - “Error establishing a database connection” —— 请确认
compose.yaml中的两个db-password是否相同。如果首次运行后修改过密码,DB 中仍保留着旧值。 - 配置 HTTPS 后页面显示错乱或反复跳转 —— 请确认 Nginx 配置中是否有
X-Forwarded-Proto这一行。