新手如何在香港轻量云部署WordPress?从系统环境到域名上线完整操作
如果目标是在香港轻量云上上线一个可通过域名访问的 WordPress,建议先固定一套清晰环境:Ubuntu 24.04 LTS 64 位、Nginx、PHP 8.3-FPM、MariaDB、HTTPS,以及一个已经注册的域名。下面这套“新手建站必看!香港轻量云WordPress部署完整步骤”以全新云服务器为例,示例域名使用 example.com,服务器公网 IPv4 使用 203.0.113.10,实际操作时请替换成自己的域名和 IP。

整套流程的上线目标是:云服务器能够解析域名,80 和 443 端口可访问,WordPress 能连接本机数据库,后台可以登录,HTTPS 证书可以自动续期,同时保留配置、网站文件和数据库的回滚入口。
一、部署前需要准备什么
1. 确认服务器和系统环境
本文命令以 Ubuntu 24.04 LTS 为准,软件栈如下:
| 项目 | 示例环境 |
|---|---|
| 云服务器系统 | Ubuntu 24.04 LTS 64 位 |
| Web 服务 | Nginx |
| PHP 运行方式 | PHP 8.3-FPM |
| 数据库 | MariaDB |
| 网站程序 | WordPress |
| 示例域名 | example.com、www.example.com |
| 网站目录 | /var/www/example.com |
| 数据库名 | wordpress |
| 数据库用户 | wpuser |
建议新手至少准备:
- 一个具有
sudo权限的服务器账号; - 一个已经完成实名认证和 DNS 管理的域名;
- 云平台安全组中允许 TCP 22、80、443;
- 服务器至少预留约 20GB 磁盘空间;
- 一个用于数据库的强密码,不要与服务器登录密码相同;
- 一个可以保存备份的目录或对象存储位置。
WordPress 本身不会因为使用香港轻量云就改变安装方式,真正影响部署结果的是系统版本、PHP-FPM、数据库、Web 服务、DNS 和防火墙是否匹配。
首次登录后先确认系统,不要在不确定发行版的情况下直接执行后面的 PHP 版本命令:
cat /etc/os-release
uname -m
预期可以看到类似结果:
PRETTY_NAME="Ubuntu 24.04 LTS"
x86_64
如果显示的不是 Ubuntu 24.04 LTS,尤其是 Debian、CentOS 或其他 Ubuntu 版本,不要混用本文的 PHP 8.3 路径和服务名。
2. 先处理云平台防火墙
在云平台控制台的安全组或防火墙中放行:
- TCP 22:SSH 管理;
- TCP 80:HTTP 和证书验证;
- TCP 443:HTTPS 访问。
数据库端口 3306 不需要对公网开放。WordPress 与 MariaDB 在同一台服务器上运行时,数据库只应监听本机地址。
如果服务器启用了 UFW,可以在确认当前 SSH 端口确实是 22 后执行:
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw status
如果输出中没有现有 SSH 放行规则,先不要执行启用命令,否则可能在当前连接中断后无法再次登录。确认无误后再执行:
sudo ufw enable
sudo ufw status verbose
启用防火墙前应确认云平台安全组和系统 UFW 都允许 SSH。防火墙调整的影响范围是整台服务器,回滚方式是通过云平台控制台的远程终端或救援终端重新放行 SSH。
3. 为后续回滚建立备份目录
新服务器还没有网站文件和数据库,暂时没有可恢复内容,但可以先创建备份目录。后面对 Nginx、PHP 和 WordPress 配置进行修改前,均建议先复制原文件。
sudo install -d -m 700 /root/wp-backup
如果云平台提供磁盘快照功能,也可以在开始大规模安装或升级前创建一次快照。快照属于整盘级恢复,恢复时会影响服务器上的所有数据,不应代替单独的数据库备份。
二、安装 Nginx、PHP-FPM 和 MariaDB
1. 更新软件索引并安装依赖
以下命令适用于 Ubuntu 24.04 LTS。dist-upgrade 或大范围系统升级可能替换系统组件,生产环境应先确认已有服务和备份情况;全新服务器可以执行常规更新。
sudo apt update
sudo apt upgrade -y
安装 WordPress 所需的软件:
sudo apt install -y \
nginx \
mariadb-server \
php8.3-fpm \
php8.3-mysql \
php8.3-curl \
php8.3-gd \
php8.3-mbstring \
php8.3-xml \
php8.3-zip \
php8.3-intl \
php8.3-opcache \
unzip \
curl \
ca-certificates
启动服务并设置为开机启动:
sudo systemctl enable --now nginx
sudo systemctl enable --now mariadb
sudo systemctl enable --now php8.3-fpm
逐项验证:
systemctl is-active nginx
systemctl is-active mariadb
systemctl is-active php8.3-fpm
php -v
三个 systemctl 命令都应返回:
active
PHP 版本应为 8.3.x。若 PHP-FPM 没有启动,先查看日志,不要直接反复重启:
sudo systemctl status php8.3-fpm --no-pager
sudo journalctl -u php8.3-fpm -n 50 --no-pager
2. 检查 PHP-FPM 的实际套接字
Nginx 必须连接正确的 PHP-FPM 套接字。Ubuntu 24.04 的常见路径是 /run/php/php8.3-fpm.sock,但配置前应实际核验:
ls -l /run/php/
预期可以看到:
php8.3-fpm.sock
后面的 Nginx 配置会使用:
/run/php/php8.3-fpm.sock
如果实际文件名不同,应以 ls 的结果为准,不要凭经验填写。
三、创建 MariaDB 数据库和 WordPress 用户
1. 执行数据库基础安全配置
Ubuntu 通常使用系统账号认证 MariaDB 的本地 root 用户。可以运行交互式安全配置:
sudo mysql_secure_installation
不同 MariaDB 版本的提示略有差异,通常可以按以下原则选择:
- 删除匿名用户:选择
Y; - 禁止 root 远程登录:选择
Y; - 删除测试数据库:选择
Y; - 重新加载权限表:选择
Y; - 如果询问是否切换为 Unix socket 认证,保留本机 socket 认证即可。
该命令会影响数据库的匿名访问、root 登录方式和测试库,不会删除即将创建的 WordPress 数据库。
2. 创建独立数据库和账号
进入 MariaDB:
sudo mysql
在 MariaDB 提示符中执行以下 SQL。请先将示例密码替换为自己的强密码,密码中不要使用单引号,避免 SQL 语句解析错误:
CREATE DATABASE wordpress
DEFAULT CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
CREATE USER 'wpuser'@'localhost'
IDENTIFIED BY 'replace-with-a-strong-password';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
这里的权限只授予 wordpress 数据库,没有授予整个 MariaDB 实例的全局权限。WordPress 连接数据库时使用 localhost,因此数据库账号也限制为本机来源。
验证数据库和用户是否存在:
sudo mysql -e "SHOW DATABASES LIKE 'wordpress';"
sudo mysql -e "SELECT User,Host FROM mysql.user WHERE User='wpuser';"
预期应看到数据库名 wordpress,以及 wpuser 对应的 localhost。
为了确认账号密码确实可用,可以执行:
mysql -u wpuser -p -h localhost -e "SELECT 1;"
输入刚才设置的数据库密码后,预期输出:
1
1
如果提示 Access denied,优先检查用户名、密码、主机名和 SQL 中是否存在未替换的示例内容。不要为了绕过错误给 wpuser 授予全局权限。
四、下载 WordPress 并准备网站目录
1. 创建网站目录并下载程序
以下示例会从 WordPress 官方下载地址获取压缩包。下载过程要求服务器能够正常访问 HTTPS,下载失败时先检查 DNS、出站网络和证书,而不是使用不明来源的安装包。
WORKDIR=$(mktemp -d)
curl -fL --retry 3 \
https://wordpress.org/latest.tar.gz \
-o "$WORKDIR/wordpress.tar.gz"
tar -xzf "$WORKDIR/wordpress.tar.gz" -C "$WORKDIR"
sudo mkdir -p /var/www/example.com
sudo cp -a "$WORKDIR/wordpress/." /var/www/example.com/
检查程序文件:
sudo test -f /var/www/example.com/wp-admin/index.php && echo "WordPress files OK"
sudo ls -la /var/www/example.com | head
如果没有看到 WordPress files OK,不要继续配置 Nginx,先检查压缩包是否下载完整:
ls -lh "$WORKDIR/wordpress.tar.gz"
tar -tzf "$WORKDIR/wordpress.tar.gz" | head
2. 设置目录和文件权限
对全新站点,可以先使用 www-data 作为网站运行用户,确保 WordPress 能写入上传目录和执行后台更新:
sudo chown -R www-www-data /var/www/example.com
sudo find /var/www/example.com -type d -exec chmod 755 {} \;
sudo find /var/www/example.com -type f -exec chmod 644 {} \;
sudo mkdir -p /var/www/example.com/wp-content/uploads
sudo chown -R www-www-data /var/www/example.com/wp-content/uploads
sudo chmod 755 /var/www/example.com/wp-content/uploads
这种方式配置简单,但意味着 PHP 进程对网站目录具有一定写权限。网站稳定运行后,如果希望缩小写入范围,可以将程序文件改为 root 所有,只保留 wp-content/uploads 等必要目录可写;调整前必须确认后台更新策略,否则可能导致插件和主题无法更新。
3. 创建 wp-config.php
复制配置模板:
sudo cp /var/www/example.com/wp-config-sample.php \
/var/www/example.com/wp-config.php
打开配置文件:
sudo nano /var/www/example.com/wp-config.php
将数据库部分改为以下内容:
define( 'DB_NAME', 'wordpress' );
define( 'DB_USER', 'wpuser' );
define( 'DB_PASSWORD', 'replace-with-a-strong-password' );
define( 'DB_HOST', 'localhost' );
define( 'DB_CHARSET', 'utf8mb4' );
define( 'DB_COLLATE', '' );
其中 DB_PASSWORD 必须与创建 MariaDB 用户时的密码一致。
WordPress 配置文件后面还需要一组随机密钥。可以在服务器终端执行:
curl -fsSL https://api.wordpress.org/secret-key/1.1/salt/
将命令输出的多行 define() 内容复制到 wp-config.php 中原有的密钥区域,替换原来的示例密钥。随机密钥用于登录 Cookie 和会话校验,不要在多个站点之间重复使用。
确认配置文件中存在以下结束部分:
define( 'WP_DEBUG', false );
/* That's all, stop editing! Happy publishing. */
if ( ! defined( 'ABSPATH' ) ) {
define( 'ABSPATH', __DIR__ . '/' );
}
require_once ABSPATH . 'wp-settings.php';
保存后收紧配置文件权限:
sudo chown www-www-data /var/www/example.com/wp-config.php
sudo chmod 640 /var/www/example.com/wp-config.php
如果数据库密码中包含引号、反斜杠等特殊字符,必须确认 PHP 字符串转义正确,否则会出现白屏或数据库连接错误。
五、配置 Nginx 处理 WordPress 请求
1. 写入站点配置
先备份默认配置和新建配置目录:
sudo cp -a /etc/nginx/nginx.conf \
/root/wp-backup/nginx.conf.$(date +%F-%H%M%S)
if [ -e /etc/nginx/sites-enabled/default ]; then
sudo mv /etc/nginx/sites-enabled/default \
/etc/nginx/sites-enabled/default.disabled
fi
创建站点配置文件:

sudo tee /etc/nginx/sites-available/example.com > /dev/null <<'NGINX'
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.php index.html;
client_max_body_size 64M;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location ~* /(?:uploads|files)/.*\.php$ {
deny all;
}
location ~ /\. {
deny all;
}
}
NGINX
创建软链接启用站点:
sudo ln -sfn \
/etc/nginx/sites-available/example.com \
/etc/nginx/sites-enabled/example.com
配置中几个关键点的作用如下:
server_name决定域名请求进入哪个站点;root必须与实际 WordPress 目录一致;try_files支持 WordPress 固定链接;fastcgi_pass将 PHP 请求交给 PHP 8.3-FPM;client_max_body_size控制 Nginx 允许的上传大小;- 禁止上传目录执行 PHP,可以降低误上传脚本被执行的风险。
2. 检查配置后再 reload
任何 Nginx 配置变更都先测试:
sudo nginx -t
预期结果:
syntax is ok
test is successful
只有测试通过后才重新加载:
sudo systemctl reload nginx
如果 nginx -t 报错,不要 reload。常见原因包括括号或分号缺失、站点文件路径错误、PHP-FPM 套接字不存在。可以查看完整配置和服务日志:
sudo nginx -T
sudo journalctl -u nginx -n 50 --no-pager
3. 按需调整 PHP 上传限制
如果网站需要上传较大的图片、主题或插件,可以先备份 PHP 配置:
sudo cp -a /etc/php/8.3/fpm/php.ini \
/root/wp-backup/php.ini.$(date +%F-%H%M%S)
编辑配置:
sudo nano /etc/php/8.3/fpm/php.ini
确认或调整以下参数:
memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 80M
max_execution_time = 120
post_max_size 应大于 upload_max_filesize,否则即使 Nginx 允许 64MB,PHP 仍可能拒绝上传请求。
保存后检查 PHP-FPM 配置并重启:
sudo php-fpm8.3 -t
sudo systemctl restart php8.3-fpm
如果重启失败,立即恢复刚才的备份文件,再测试并重启:
sudo cp -a /root/wp-backup/php.ini.备份时间 \
/etc/php/8.3/fpm/php.ini
sudo php-fpm8.3 -t
sudo systemctl restart php8.3-fpm
实际执行时,将 php.ini.备份时间 替换为备份目录中的真实文件名。
六、配置域名解析并申请 HTTPS
1. 添加 DNS 记录
在域名 DNS 控制台添加:
| 类型 | 主机记录 | 记录值 |
|---|---|---|
| A | @ | 203.0.113.10 |
| A | www | 203.0.113.10 |
将 203.0.113.10 换成轻量云服务器实际公网 IPv4。
如果域名存在指向其他服务器的旧记录,应先确认是否需要保留。若添加了 AAAA 记录但服务器没有正确配置 IPv6,部分访问者可能会优先走 IPv6 并失败,这时应删除错误的 AAAA 记录。
在服务器或本地电脑检查解析:
dig +short example.com
dig +short www.example.com
预期能看到服务器公网 IP。DNS 缓存更新时间取决于原记录 TTL,不能仅凭本机暂时解析不到就反复修改记录。
2. 先验证 HTTP 和本机 Nginx
域名尚未完全生效时,可以在服务器本机模拟域名请求:
curl -I -H 'Host: example.com' http://127.0.0.1/
预期可能是 200、301 或 302,但响应内容不应是 Nginx 默认欢迎页。
公网 DNS 生效后,再从外部网络执行:
curl -I http://example.com/
curl -I http://www.example.com/
如果返回 502 Bad Gateway,重点检查 PHP-FPM 套接字;如果返回默认 Nginx 页面,重点检查 server_name、软链接和默认站点;如果连接超时,重点检查云安全组、UFW 和 DNS。
3. 申请并启用 HTTPS
确认两个域名都能通过 HTTP 访问后,安装 Certbot:
sudo apt install -y certbot python3-certbot-nginx
先备份 Nginx 站点配置:
sudo cp -a /etc/nginx/sites-available/example.com \
/root/wp-backup/example.com.before-certbot
申请证书并让 Certbot 修改 Nginx 配置:
sudo certbot --nginx \
-d example.com \
-d www.example.com
根据提示填写邮箱并同意服务条款。若询问是否将 HTTP 自动跳转到 HTTPS,正式上线的网站通常选择重定向,但必须确认 80 端口仍然可访问,因为证书验证和后续续期可能需要它。
验证证书和跳转:
curl -I http://example.com/
curl -I https://example.com/
HTTP 通常会返回 301 或 308,HTTPS 应返回 200、301 或 WordPress 安装页面,而不是证书错误。
测试自动续期流程:
sudo certbot renew --dry-run
--dry-run 只进行模拟续期,不会替换正式证书。若测试失败,先检查 80、443 端口、DNS 和 Nginx 配置,不要删除证书目录或手工改动 Certbot 管理的文件。
七、完成 WordPress 安装并进行上线验证
在浏览器打开:
https://example.com/wp-admin/install.php
填写:
- 网站标题;
- 管理员用户名;
- 管理员密码;
- 管理员邮箱;
- 是否允许搜索引擎收录。
管理员用户名不要使用 admin,密码应使用密码管理器生成的高强度密码。安装完成后访问:
https://example.com/wp-login.php
https://example.com/wp-admin/
逐项检查以下内容。
1. 检查服务监听状态
sudo ss -lntp | grep -E ':(80|443|3306)\b'
Nginx 应监听 80 和 443。MariaDB 的 3306 应只监听本机地址,例如 127.0.0.1:3306 或本机 IPv6 地址,不应直接暴露为 0.0.0.0:3306。
2. 检查 WordPress 页面和固定链接
登录后台后进入“设置—固定链接”,选择一种固定链接结构并保存一次。然后新建一个测试页面,访问该页面的独立 URL。
如果首页能打开但固定链接返回 404,通常是 Nginx 中缺少:
try_files $uri $uri/ /index.php?$args;
修改后执行:
sudo nginx -t
sudo systemctl reload nginx
3. 检查上传权限
在 WordPress 后台上传一张测试图片。如果提示无法建立目录或无法写入文件,检查:
sudo ls -ld /var/www/example.com/wp-content/uploads
sudo -u www-data touch /var/www/example.com/wp-content/uploads/permission-test
sudo rm -f /var/www/example.com/wp-content/uploads/permission-test
如果 touch 失败,说明 PHP-FPM 运行用户没有写入权限。确认目录所有者为 www-data,并避免对整个系统目录执行宽泛的 chmod -R 777。
4. 检查日志
出现页面错误时,按由外到内的顺序查看日志:
sudo tail -n 50 /var/log/nginx/error.log
sudo tail -n 50 /var/log/nginx/access.log
sudo journalctl -u php8.3-fpm -n 50 --no-pager
sudo journalctl -u mariadb -n 50 --no-pager
访问日志可以确认请求是否到达 Nginx;Nginx 错误日志用于判断静态文件、权限和 FastCGI 问题;PHP-FPM 日志用于判断 PHP 致命错误;MariaDB 日志用于判断数据库服务异常。
八、常见失败情况和处理顺序
| 现象 | 优先检查 | 通常原因 |
|---|---|---|
| 域名无法解析 | dig +short、A/AAAA 记录 | DNS 记录未生效或指向错误 |
| 页面连接超时 | 云安全组、UFW、ss -lntp | 80/443 未放行或 Nginx 未启动 |
| 显示 Nginx 默认页 | server_name、站点软链接 | 默认站点未停用或域名未匹配 |
502 Bad Gateway | /run/php/、PHP-FPM 状态 | fastcgi_pass 路径不正确或 PHP-FPM 停止 |
| WordPress 数据库连接错误 | mysql -u wpuser -p | 数据库名、账号、密码或主机名错误 |
| 固定链接 404 | Nginx try_files | 请求没有转交给 index.php |
| 上传文件过大 | Nginx 和 php.ini | client_max_body_size 或 PHP 限制过小 |
| HTTPS 证书申请失败 | DNS、80 端口、域名访问 | 域名未指向本机或验证请求被拦截 |
| 后台白屏 | PHP-FPM 日志、PHP 版本 | PHP 致命错误、插件冲突或内存限制过小 |
排障时应先使用低风险检查命令,例如 curl、systemctl status、nginx -t 和日志查询。不要一遇到 502 就删除 Nginx 配置,也不要一遇到数据库错误就删除数据库。
九、备份、验收和回滚
1. 创建网站文件和数据库备份
站点完成安装后,先创建一份可识别的备份:
BACKUP_TAG=$(date +%F-%H%M%S)
sudo tar -czf \
"/root/wp-backup/example.com-files-${BACKUP_TAG}.tar.gz" \
-C /var/www example.com
sudo mysqldump \
--single-transaction \
--routines \
--triggers \
wordpress | gzip | sudo tee \
"/root/wp-backup/wordpress-db-${BACKUP_TAG}.sql.gz" > /dev/null
sudo ls -lh /root/wp-backup/
mysqldump 备份的是数据库内容,网站压缩包备份的是 WordPress 程序、主题、插件和上传文件,两者缺一不可。备份文件应限制 root 读取权限,并定期复制到独立存储位置。
2. 上线验收清单
可以按下面的顺序验收:
cat /etc/os-release确认系统版本;systemctl is-active nginx mariadb php8.3-fpm均为active;nginx -t返回测试成功;dig +short example.com指向当前服务器 IP;- HTTP 请求能够返回跳转或页面;
- HTTPS 访问无证书错误;
/wp-admin/可以登录;- 首页、测试页面和固定链接均可访问;
- 后台上传图片成功;
- MariaDB 3306 未暴露到公网;
certbot renew --dry-run测试通过;- 网站文件和数据库备份均已生成。
3. 配置回滚
回滚 Nginx 配置
如果修改站点配置后 Nginx 测试失败,可以恢复备份:
sudo cp -a /root/wp-backup/example.com.before-certbot \
/etc/nginx/sites-available/example.com
sudo nginx -t
sudo systemctl reload nginx
如果是自己后续修改的配置,先将当前文件另存一份,再覆盖恢复,避免丢失排错线索。
回滚 PHP 配置
先确认备份文件名称:
sudo ls -l /root/wp-backup/php.ini.*
恢复指定备份:
sudo cp -a /root/wp-backup/php.ini.实际备份文件 \
/etc/php/8.3/fpm/php.ini
sudo php-fpm8.3 -t
sudo systemctl restart php8.3-fpm
回滚网站文件
恢复前先备份当前异常目录,避免覆盖后无法取证:
sudo mv /var/www/example.com \
"/var/www/example.com.failed-$(date +%F-%H%M%S)"
sudo mkdir -p /var/www
sudo tar -xzf /root/wp-backup/example.com-files-实际时间.tar.gz \
-C /
sudo chown -R www-www-data /var/www/example.com
恢复后检查 wp-config.php、权限和 Nginx 根目录是否仍然指向 /var/www/example.com。
回滚数据库
不要直接执行 DROP DATABASE wordpress。删除生产数据库会立即丢失当前数据,只有在已经备份当前数据库并确认恢复文件可用时,才考虑替换原库。
更安全的做法是先导入到临时数据库:

sudo mysql -e "
CREATE DATABASE wordpress_rollback
DEFAULT CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
GRANT ALL PRIVILEGES ON wordpress_rollback.*
TO 'wpuser'@'localhost';
FLUSH PRIVILEGES;
"
zcat /root/wp-backup/wordpress-db-实际时间.sql.gz \
| sudo mysql wordpress_rollback
确认临时数据库导入成功后,将 wp-config.php 中的数据库名由:
define( 'DB_NAME', 'wordpress' );
改为:
define( 'DB_NAME', 'wordpress_rollback' );
再访问首页和后台。验证无误后,才决定是否将临时数据库切换为正式数据库。这样可以把数据库回滚的影响控制在配置切换范围内,避免在未验证备份的情况下直接删除原数据。



