跳到主要内容
← 指南列表

搭建 WordPress 博客、网站(Docker)

WordPress 是一款无需编程即可搭建博客或网站的程序。以下是用 Docker Compose 一次性运行 WordPress 和 DB,并连接域名和 HTTPS 的方法。

所需准备

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 这一行。

如果问题仍未解决,请在 Discord 提交工单。