搬瓦工搭建 WordPress 完整教程:域名、数据库、HTTPS 和备份

这篇教程采用一种明确的部署方式:新装 Ubuntu 24.04 LTS + Nginx + PHP 8.3-FPM + MariaDB,不再叠加宝塔、1Panel 或 Docker。已有网站、面板或数据库的机器,不要直接覆盖下面的配置;先在新实例验证,再安排迁移。
示例只配置一个域名 site.example.com。所有出现该域名的位置都要替换为你拥有的真实域名;192.0.2.10 只是保留示例地址。网站标题和管理员密码通过安装页面填写,不在命令里设置公共默认密码。
一、准备系统、域名和回退方式

在 KiwiVM 选择适合的系统,确认 SSH 和控制台可以进入。系统重装会覆盖数据,已有内容先看 搬瓦工快照与自动备份教程;系统选择可参考 搬瓦工重装系统教程:Ubuntu / Debian 怎么选。
把域名 A 记录指向 VPS 的 IPv4。IPv6 尚未完成配置时,不要提前添加 AAAA。先用 DNS only 访问源站,后续再接入 CDN,避免一开始同时排查代理、证书和应用。
WordPress 当前建议 PHP 8.3+、MariaDB 10.11+ 或 MySQL 8.0+,并支持 HTTPS。不要因为旧版本还能启动,就继续在生产环境使用已结束维护的软件。插件兼容性也需要在升级前测试。[1]
二、安装基础软件,确认没有端口冲突
下面操作在 VPS 中执行。先按 SSH 密钥与安全设置 保留管理入口,再确认 UFW 或现有防火墙放行真实 SSH 端口。不要为了开网站先关闭整个防火墙。
cat /etc/os-release
sudo ss -lntp
sudo apt update
sudo apt install nginx mariadb-server php8.3-fpm php8.3-mysql \
php8.3-curl php8.3-gd php8.3-intl php8.3-mbstring \
php8.3-xml php8.3-zip curl ca-certificates certbot
sudo systemctl status nginx php8.3-fpm mariadb --no-pager
本文只使用 Ubuntu 24.04 的包名。其他版本应核对仓库和 PHP Socket,不要同时装多个来历不同的软件源。Web 服务需要开放 80/443;数据库只做本机连接,不需要放行 3306。
三、创建站点账号、目录和数据库

在全新部署中创建独立账号;若同名账号或目录已经存在,先停止并核对用途:
sudo adduser --system --group --home /var/www/bwh-site bwhwp
sudo install -d -o bwhwp -g www-data -m 0750 /var/www/bwh-site/public
sudo chown bwhwp:www-data /var/www/bwh-site
sudo chmod 0750 /var/www/bwh-site
sudo install -d -m 0755 /var/www/letsencrypt/.well-known/acme-challenge
进入数据库交互终端,创建仅供该站使用的数据库和账号。下方密码必须先换成独立随机密码;不要照抄占位文本用于生产。
sudo env MYSQL_HISTFILE=/dev/null mariadb
CREATE DATABASE wp_site CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wp_site'@'localhost' IDENTIFIED BY 'REPLACE_WITH_UNIQUE_RANDOM_PASSWORD';
GRANT ALL PRIVILEGES ON wp_site.* TO 'wp_site'@'localhost';
EXIT;
账号权限限定在站点数据库,不授予全局管理权限。使用密码管理器保存新密码,稍后填入 wp-config.php。数据库和文件两部分都不可缺少。[2]
四、下载 WordPress,并设置 PHP-FPM 独立池
在空的站点目录部署,不覆盖已有网站:
WORK=$(mktemp -d)
curl -fL https://wordpress.org/latest.tar.gz -o "$WORK/wordpress.tar.gz"
sudo tar --no-same-owner -xzf "$WORK/wordpress.tar.gz" \
--strip-components=1 -C /var/www/bwh-site/public
sudo chown -R bwhwp:www-data /var/www/bwh-site/public
sudo find /var/www/bwh-site/public -type d -exec chmod 0750 {} +
sudo find /var/www/bwh-site/public -type f -exec chmod 0640 {} +
sudo -u bwhwp cp /var/www/bwh-site/public/wp-config-sample.php \
/var/www/bwh-site/public/wp-config.php
sudo -u bwhwp nano /var/www/bwh-site/public/wp-config.php
把数据库名、用户名、密码和主机名分别设置为 wp_site、wp_site、你的随机密码、localhost。给安全密钥常量填写独立随机值,删除示例占位内容;不要在公开聊天或截图中展示整份文件。保存后执行:
sudo chmod 0600 /var/www/bwh-site/public/wp-config.php
添加 /etc/php/8.3/fpm/pool.d/bwh-site.conf,不要覆盖其他池:
[bwh-site]
user = bwhwp
group = www-data
listen = /run/php/bwh-site.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
pm = ondemand
pm.max_children = 4
pm.process_idle_timeout = 10s
pm.max_requests = 500
这里的 4 个子进程只是低并发起点,不代表固定访问容量。根据实际 PHP 进程内存、数据库占用和峰值再调,不要简单把值开到几十。独立池的用户、Socket 和访问权限应互相对应。[3] 校验后重载:
sudo php-fpm8.3 -t
sudo systemctl reload php8.3-fpm

五、先申请 HTTPS 证书
先建立只提供 ACME 验证的 /etc/nginx/sites-available/bwh-site。此时不开放 WordPress 安装器:
server {
listen 80;
server_name site.example.com;
location ^~ /.well-known/acme-challenge/ {
root /var/www/letsencrypt;
try_files $uri =404;
}
location / { return 404; }
}
在 sites-enabled 建立该文件的链接。仅当确认 default 是新系统不使用的默认站点时,才移除它的启用链接;不要删除其他站点。之后执行:
sudo ln -s /etc/nginx/sites-available/bwh-site /etc/nginx/sites-enabled/bwh-site
sudo nginx -t
sudo systemctl reload nginx
sudo certbot certonly --webroot -w /var/www/letsencrypt -d site.example.com
HTTP-01 验证需要域名正确解析,并能从公网访问 80 端口的验证文件。确认成功签发后再进行下一步。申请失败时先查 DNS、AAAA、80 端口和 Nginx 的实际站点,不要连续重复申请。[4]
六、启用完整 HTTPS 站点
将该站点配置换成包内 configs/bwh-site-https.conf 的内容,并替换域名。关键配置如下:
server {
listen 80;
server_name site.example.com;
location ^~ /.well-known/acme-challenge/ {
root /var/www/letsencrypt;
try_files $uri =404;
}
location / { return 301 https://$host$request_uri; }
}
server {
listen 443 ssl;
server_name site.example.com;
root /var/www/bwh-site/public;
index index.php index.html;
ssl_certificate /etc/letsencrypt/live/site.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/site.example.com/privkey.pem;
client_max_body_size 32m;
location / { try_files $uri $uri/ /index.php?$args; }
location = /wp-config.php { deny all; }
location ~ /\. { deny all; }
location ~* ^/wp-content/uploads/.*\.php(?:$|/) { deny all; }
location ~ \.php$ {
try_files $uri =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/run/php/bwh-site.sock;
}
}
FastCGI 把 PHP 请求交给实际 Socket;路径填错通常会出现 502。上传目录的 PHP 拦截需要写在通用 PHP 规则之前。备份、SQL 文件和凭据始终放在站点根目录以外。[5][6]
运行 sudo nginx -t,通过后再 reload。测试 https://真实域名/,完成 WordPress 安装,设置独立管理员用户名和强密码。安装期间可临时仅允许管理出口访问 443,结束后再开放网站访问;不要让空白安装页面长期公开。
七、上线验收与日常维护

测试首页、文章固定链接、后台登录、图片上传和数据库写入,检查证书域名是否正确。若上传仍受限,同时核对 Nginx 与 PHP 的上传大小;只改其中一项不一定有效。
建立证书续期后的 reload hook:将包内 configs/reload-nginx.sh 放到 /etc/letsencrypt/renewal-hooks/deploy/,设为 root 拥有且仅管理员可修改,并赋予执行权限。确认 Certbot 定时任务存在,再运行一次 certbot renew --dry-run。证书签发、磁盘文件更新和 Nginx 正在提供的新证书是三个检查点,不要只看续期日志。[7]
首次上线先使用少量必要插件。启用页面缓存前排除后台、登录用户、购物车和结账等私有内容;后台异常时先检查 PHP-FPM 日志与错误日志,而不是立即增加所有超时。
备份至少包含数据库、wp-content、wp-config.php 和站点配置。数据库导出与文件备份应协调时间,并在独立环境验证恢复。不要只备份 WordPress 核心文件,也不要把唯一备份留在同一块 VPS 磁盘上。
常见问题
1GB 内存可以建站吗?
能否承载取决于插件、数据库和并发,不以“成功安装”推断生产容量。先采用轻量配置并观察实际内存。
可以把目录全部改成 777 解决上传失败吗?
不建议。核对 PHP-FPM 的运行账号、目录属主和具体路径,只给必要目录写权限。
502 先检查什么?
PHP-FPM 是否运行、Socket 是否存在且允许 Nginx 连接,再看 PHP 错误与内存状态。不要先重装整套环境。
相关阅读
- 搬瓦工VPS 2026选购指南:从入门到旗舰,哪款最适合你?
- 搬瓦工重装系统教程:Ubuntu / Debian 怎么选
- 搬瓦工 VPS 修改 root 密码、SSH 端口和 SSH Key 教程
- 搬瓦工快照与自动备份教程
- 搬瓦工 KiwiVM 控制面板完整使用教程
参考资料
- WordPress:运行环境要求
- WordPress:安装流程
- PHP-FPM:进程池与监听权限
- Let’s Encrypt:HTTP-01 与 DNS-01
- Nginx:FastCGI 配置
- WordPress:权限、更新与安全
- Certbot:证书、续期与 deploy hook

