搭建 WordPress 的过程及遇到的问题

经过我的折腾从 HexoHugoAstro 最后我还是选择了使用 WordPress 作为我的博客平台,通过这篇文章记录我安装 WordPress 的过程、遇到的问题、主题与插件选择等。

首先我的服务器用的 Ubuntu 24.04 系统,原来用 Hexo 搭建的静态博客以及安装了 Nginx,并记录了 Nginx 的安装笔记,现在把 WordPress 需要用到的数据库和 PHP一并安装记录整个过程。

安装 Nginx 并配置 SSH 证书

安装 Nginx 并开启开机自启动,最后验证 Nginx 是否安装成功。

# 1. 安装 nginx
sudo apt update
sudo apt install -y nginx

# 2. 启动并设置开机自启
sudo systemctl enable --now nginx

# 3. 验证是否成功
curl http://localhost

配置 Nginx

创建配置文件:

server {
    listen 80;
    server_name xiaotupo.com www.xiaotupo.com;  # ← 改成你的域名,或写服务器公网IP

    root /home/username/xiaotupo.com;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }

    # 可选:隐藏 .git 等敏感目录
    location ~ /\. {
        deny all;
    }
}

/etc/nginx/sites-enabled/ 中创建软连接启用站点:

sudo ln -s /etc/nginx/sites-available/xiaotupo.com /etc/nginx/sites-enabled/

测试 Nginx 配置并重载

sudo nginx -t
sudo systemctl reload nginx

启用 HTTPS(Let’s Encrypt)

在阿里云轻量服务器(Ubuntu)上为 Nginx 配置 HTTPS(即安装 SSL/TLS 证书),最推荐的方式是使用 Let’s Encrypt 免费证书 + Certbot 自动化工具。整个过程免费、自动化、且被广泛信任。

安装 Certbot 并申请证书(全自动)

第一步:安装 Certbot 和 Nginx 插件

sudo apt update
sudo apt install -y certbot python3-certbot-nginx

第 2 步:运行 Certbot(自动配置 Nginx + 申请证书)

sudo certbot --nginx -d xiaotupo.com -d www.xiaotupo.com

替换 xiaotupo.com 为你的实际域名(可多个 -d)

设置网站目录权限

默认情况想我们需要设置网站的目录权限,否则会导致网站目录无法读写等问题,访问时会显示 404。

# 1. 修复 home 目录权限
chmod 755 /home/username

# 2. 确保网站目录可读
chmod -R 755 /home/username/xiaotupo.com

# 3. 重载 Nginx
sudo nginx -t && sudo systemctl reload nginx

经过这样配置之后就可以正常访问了。

开启 gzip 压缩

这一步时必须做的,会是我们访问的内容进行很大程度的体积压缩。

    # 2. Gzip 兜底配置 (所有 Nginx 默认支持,兼容旧浏览器/不支持 Brotli 的客户端)
    gzip on;
    gzip_comp_level 5;                   # 压缩级别 1-9
    gzip_types text/plain text/css application/javascript application/json image/svg+xml text/xml application/xml font/woff2;
    gzip_min_length 1024;
    gzip_static on;                      # 优先发送预压缩的 .gz 文件
    gzip_vary on;                        # 添加 Vary: Accept-Encoding 头,利于 CDN 缓存

安装 php 与 MariaDB

安装 php 和 MariaDB数据库

sudo apt update
sudo apt install php-fpm php-mysql php-cli php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-zip mariadb-server mariadb-client

配置 Nginx php 块

配置 php 缓存

配置 php 缓存,在 /etc/nginx/nginx.conf 文件中增加以下内容

# FastCGI Cache 定义
fastcgi_cache_path /var/cache/nginx/fastcgi
levels=1:2
keys_zone=WORDPRESS:100m
inactive=60m
max_size=1g; # 最大缓存体积

放到 Virtual Host Configs 块上面就行。

完整配置

完整配置代码如下 /etc/nginx/sites-available/xiaotupo.com

server {
    server_name xiaotupo.com www.xiaotupo.com;

    root /home/xtp/xiaotupo.com;
    index index.php index.html index.htm;

    # ================= 新增压缩配置开始 =================

    # 1. 尝试开启 Brotli (如果模块未加载,Nginx 会忽略这行并继续,不会报错)

    # 2. Gzip 兜底配置 (所有 Nginx 默认支持,兼容旧浏览器/不支持 Brotli 的客户端)
    gzip on;
    gzip_comp_level 5;                   # 压缩级别 1-9
    gzip_types text/plain text/css application/javascript application/json image/svg+xml text/xml application/xml font/woff2;
    gzip_min_length 1024;
    gzip_static on;                      # 优先发送预压缩的 .gz 文件
    gzip_vary on;                        # 添加 Vary: Accept-Encoding 头,利于 CDN 缓存

    # ================= 新增压缩配置结束 =================

    # ===== 缓存绕过规则  =====
    set $skip_cache 0;

    if ($arg_nocache = 1) {
        set $skip_cache 1;
    }

    # ===== 登录用户不缓存  =====
    if ($request_uri ~* "wp-admin|wp-login.php|/wp-json/|/feed/|sitemap") {
        set $skip_cache 1;
    }

    # POST 请求不缓存
    if ($request_method = POST) {
        set $skip_cache 1;
    }

    if ($http_cookie ~* "comment_author|wordpress_logged_in|woocommerce_items_in_cart") {
        set $skip_cache 1;
    }

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
        expires 30d;
        access_log off;
    }

    # ===== PHP 处理 =====
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        # 缓存启用
        fastcgi_cache WORDPRESS;
        fastcgi_cache_valid 200 301 302 10m;

        fastcgi_cache_lock on;
        fastcgi_cache_lock_timeout 10s;
        fastcgi_cache_use_stale updating error timeout invalid_header http_500;

        # 根据条件跳过缓存
        fastcgi_cache_bypass $skip_cache;
        fastcgi_no_cache $skip_cache;

        # 缓存 key(唯一标识)
        fastcgi_cache_key "$scheme$request_method$host$request_uri";

        # 返回缓存状态(方便调试)
        add_header X-Cache $upstream_cache_status;
    }

    location ~ /\. {
        deny all;
    }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/xiaotupo.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/xiaotupo.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

server {
    if ($host = www.xiaotupo.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    if ($host = xiaotupo.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    listen 80;
    server_name xiaotupo.com www.xiaotupo.com;
    return 404; # managed by Certbot
}
  • try_files 用于支持伪静态
  • 最后一个 server 用于把 http 访问重定向到 https
  • deny all 拒绝访问所有以点(.)开头的文件或目录

安装 WordPress

在安装 WordPress 前需要先创建一个数据库:

> sudo mysql #进入数据库交互终端
> CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; # 创建名为 wordpress 的数据库
> CREATE USER 'wpuser'@'localhost' IDENTIFIED BY '你的强密码'; # 创建名为 wpuser 的数据库用户名,并设置密码
> GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost'; # 授予 wpuser 用户拥有对 wordpress 数据库的完全控制权
> FLUSH PRIVILEGES; # 刷新权限
> EXIT; # 退出交互终端

下载 WordPress

进入网站目录并下载解压 WordPress

cd /home/xtp/xiaotupo.com
wget https://wordpress.org/latest.tar.gz
tar -xzf latest.tar.gz
mv wordpress/* .
rm -rf wordpress latest.tar.gz

设置权限

sudo chown -R www-data:www-data /home/xtp/xiaotupo.com
sudo find /home/xtp/xiaotupo.com -type d -exec chmod 755 {} \;
sudo find /home/xtp/xiaotupo.com -type f -exec chmod 644 {} \;

主题选择

主题我选择了 Kadence主题,非常适合作为博客网站。

插件

  • Enlighter - Customizable Syntax Highlighter 代码高亮显示
  • 简易目录
  • Nginx Helper

备份

个人 WordPress 网站要定时进行备份,否则说不定哪天就数据丢失了。

  • 备份数据库
  • 备份网站文件

备份数据库

首先我们需要备份数据库,我用的是 MariaDB数据可,和 MySQL基本一致,备份命令如下:

mysqldump -u wpuser -p wordpress > backup.sql
  • wpuser 为数据库用户名
  • wordpress 为数据库名

恢复数据库

mysql -u wpuser -p wordpress < backup.sql

备份完整文件

tar -czf wp-content.tar.gz /home/xtp/xiaotupo.com/wp-content
或
tar -czf xiaotupo.com.tar.gz /home/xtp/xiaotupo.com/

注意:wp-config.php 文件要保护好,该文件中有我们网站的密码等私密信息。

在 Docker 中还原备份数据(测试备份数据)

首先写一个编排文件 docker-compose.yml

services:
  db:
    image: mysql:8.0
    container_name: wp_db
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wpuser
      MYSQL_PASSWORD: wppass
    volumes:
      - ./db_data:/var/lib/mysql

  wordpress:
    image: wordpress:latest
    container_name: wp_app
    restart: always
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wpuser
      WORDPRESS_DB_PASSWORD: wppass
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - ./wordpress:/var/www/html

docker-compose.yml 同目录下:

.
├── backup.sql
├── db_data
├── docker-compose.yml
├── wordpress
├── wp-config.php
├── xiaotupo.com
└── xiaotupo.com.tar.gz

把我们备份的数据文件 backup.sql 和 xiaotupo.com.tar.gz 放到编排文件同目录下,解压 xiaotupo.com.tar.gz ,这时候可以执行 :

docker-compose up -d

执行该命令后才会生成 db_datawordpress文件夹,恢复数据库文件:

cat backup.sql | docker exec -i test_db mysql -u wpuser -p'wppass' wordpress

还原网站文件

首先把默认宿主中的 wordpress 中的内容都删掉:

rm -rf ./wordpress

把备份的整个网站文件复制到Docker 的网站目录,然后删除 wp-config.php 文件:

cp -r ./xiaotupo-com/* ./wordpress
rm ./wordpress/wp-config.php

然后就可以访问 http://localhost:8080 了,这是会看到安装界面,在界面里填写编排文件中的数据库信息,数据库主机记得写 db,下一步然后提示可以安装了,在下一步提示已安装过数据库,可以直接返回首页或登录了。

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注