经过我的折腾从 Hexo、Hugo 和 Astro 最后我还是选择了使用 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_data 和 wordpress文件夹,恢复数据库文件:
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,下一步然后提示可以安装了,在下一步提示已安装过数据库,可以直接返回首页或登录了。
