香港服务器部署WordPress:Ubuntu 22.04 LTS安装Nginx与MySQL的完整步骤
面向使用全新Ubuntu 22.04 LTS香港服务器的站长,说明部署前提、组件安装、数据库与站点配置及HTTPS启用步骤,并提供服务状态与页面功能验证、常见故障定位和备份回滚方法。

在香港服务器上部署WordPress,需要先让Nginx、PHP-FPM和MySQL协同工作,再完成域名与HTTPS配置。以下操作适用于全新Ubuntu 22.04 LTS主机:准备一个具有sudo权限的账户,将域名解析到服务器公网IP,并确认可以访问Ubuntu软件源及WordPress下载站。
Nginx负责接收网页请求,PHP-FPM执行WordPress代码,MySQL保存文章、用户与站点设置。服务器所在地不改变安装命令;真正需要核对的是系统版本、端口占用、软件兼容性和网络访问权限。
1. 核对环境并安装组件
已有网站的服务器应先做快照,并备份网站文件、数据库和/etc/nginx。下面的目录及数据库名按新站设计,遇到同名资源请停止,不要直接覆盖。
cat /etc/os-release
sudo ss -lntp
sudo nginx -t 2>/dev/null
系统信息应包含VERSION_ID="22.04"。未安装Nginx时,最后一条检查失败属于正常现象;如果80或443端口已有服务监听,应先确认用途。
Ubuntu 22.04官方仓库提供Nginx、MySQL 8.0及PHP 8.1系列软件包,具体修订版本以当前软件源为准:
sudo apt update
sudo apt install nginx mysql-server \
php8.1-fpm php8.1-mysql php8.1-curl php8.1-gd \
php8.1-mbstring php8.1-xml php8.1-zip php8.1-intl \
curl ca-certificates unzip
sudo systemctl enable --now nginx mysql php8.1-fpm
php -v
nginx -v
mysql --version
PHP 8.1是此系统的发行版默认分支,不代表新建站点的长期推荐版本。上线前应核对WordPress官方要求、插件兼容性及Ubuntu安全维护范围;若必须使用更高版本PHP,需另行制定升级方案,不能只替换下面的socket路径。
2. 建立独立数据库
不要让WordPress使用MySQL的root账户。以下SQL会创建新数据库及账户,密码必须替换为独立生成的强密码,并妥善保存。
sudo mysql
在MySQL命令行执行:
CREATE DATABASE wordpress
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
CREATE USER 'wpuser'@'localhost'
IDENTIFIED BY 'REPLACE_WITH_A_UNIQUE_STRONG_PASSWORD';
GRANT ALL PRIVILEGES ON wordpress.*
TO 'wpuser'@'localhost';
EXIT;
验证应用账户,而不只是验证root能否登录:
mysql -u wpuser -p -h localhost wordpress \
-e "SELECT DATABASE(), CURRENT_USER();"
输出应包含wordpress及wpuser@localhost。本机部署无需对公网开放3306端口,后续安装页面中的数据库主机填写localhost。
3. 下载WordPress并配置Nginx
先确认/var/www/wordpress不存在,或确实是为本站准备的空目录。以下复制操作不可用于覆盖已有站点。
workdir=$(mktemp -d)
curl -fL https://wordpress.org/latest.tar.gz \
-o "$workdir/wordpress.tar.gz"
tar -xzf "$workdir/wordpress.tar.gz" -C "$workdir"
sudo install -d -m 755 /var/www/wordpress
sudo cp -a "$workdir/wordpress/." /var/www/wordpress/
sudo chown -R www-data:www-data /var/www/wordpress
sudo find /var/www/wordpress -type d -exec chmod 755 {} \;
sudo find /var/www/wordpress -type f -exec chmod 644 {} \;
latest.tar.gz内容随官方发布变化,生产环境应记录实际安装版本并留存安装包。上述权限方便首次安装和后台更新,但意味着PHP进程可以修改网站代码;不要再把目录权限放宽为777。
创建/etc/nginx/sites-available/wordpress。若文件已存在,先备份并人工合并。把example.com替换为实际域名:
server {
listen 80;
server_name example.com;
root /var/www/wordpress;
index index.php index.html;
client_max_body_size 32m;
access_log /var/log/nginx/wordpress.access.log;
error_log /var/log/nginx/wordpress.error.log;
location / {
try_files $uri $uri/ /index.php?$args;
}
location = /wp-config.php {
deny all;
}
location ~* ^/wp-content/uploads/.*\.php(?:/|$) {
deny all;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
location ~ /\.(?!well-known) {
deny all;
}
}
确认/etc/nginx/sites-enabled/wordpress尚不存在,再启用配置:
sudo ln -s /etc/nginx/sites-available/wordpress \
/etc/nginx/sites-enabled/wordpress
sudo nginx -t
仅当输出包含syntax is ok和test is successful时执行:
sudo systemctl reload nginx
通过域名访问会匹配对应站点,不必为了新站删除默认配置。此时不要长期留下无人完成的安装向导。
4. 配置HTTPS与必要限制
云端安全组和主机防火墙需要允许80、443入站。先确认实际SSH端口已经放行,再调整防火墙,不要在远程操作中直接启用未知规则集。
sudo ufw status verbose
如果UFW已经启用,可添加Web访问规则;如果未启用,下面命令只保存规则,不会自动开启防火墙:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
域名解析及80端口公网可达后,申请证书。若配置了AAAA记录,IPv6也必须正确指向本站。Certbot会修改Nginx配置,先备份:
sudo cp -a /etc/nginx "/etc/nginx.before-certbot-$(date +%Y%m%d-%H%M%S)"
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com --redirect
sudo certbot renew --dry-run
随后访问https://example.com完成安装,填写数据库信息,并设置独立的管理员密码。完成后收紧配置文件权限:
sudo chmod 640 /var/www/wordpress/wp-config.php
若需要上传较大的媒体文件,还要同步调整/etc/php/8.1/fpm/php.ini:
upload_max_filesize = 32M
post_max_size = 40M
对应的Nginx请求体上限应大于上传文件大小,可把client_max_body_size改为40m,为表单附加内容留出空间。修改前备份文件,执行sudo php-fpm8.1 -t和sudo nginx -t,均通过后再分别reload服务。CLI使用的php.ini不是网站使用的FPM配置。
5. 验证服务、页面与写入功能
sudo systemctl is-active nginx mysql php8.1-fpm
sudo mysqladmin ping
sudo ss -lntp
sudo ss -lxnp | grep php
curl -I -H 'Host: example.com' http://127.0.0.1/
curl -I https://example.com/
sudo journalctl -u nginx -u mysql -u php8.1-fpm \
--since "10 minutes ago" --no-pager
按以下标准判断:
- 三个服务均返回
active,说明进程正在运行,但不等于网站功能正常。 mysqld is alive说明MySQL可响应;WordPress权限仍需通过前面的应用账户查询验证。- Nginx应监听80、443;PHP-FPM使用Unix socket,不要求出现TCP监听端口。
- HTTP跳转到HTTPS属于预期;HTTPS首页通常返回200,安装前也可能跳转到安装向导。
journalctl可检查近期启动、配置与异常退出信息;没有错误日志不能代替实际页面测试。
再登录后台,发布一篇测试文章,开启固定链接并访问文章页,上传一张图片。这样才能同时覆盖数据库写入、URL重写和文件权限。
6. 遇到失败时先定位,再决定回滚
- 502错误:检查
systemctl status php8.1-fpm,确认/run/php/php8.1-fpm.sock存在,并查看/var/log/nginx/wordpress.error.log。socket路径和服务版本必须一致。 - 数据库连接错误:先用
wpuser执行查询,再核对wp-config.php中的数据库名、用户、密码与主机;不要通过开放3306解决本机认证问题。 - 首页正常、文章404:确认当前命中的虚拟主机包含
try_files规则,并在后台重新保存固定链接。 - 本机访问正常、外网超时:依次核对DNS、安全组、UFW及监听地址;证书签发失败也应先排查这条链路。
- 上传失败:同时检查Nginx限制、FPM配置和
wp-content/uploads写权限,不要直接执行777授权。
如果新配置导致已有站点异常,应恢复变更前备份的对应配置文件,执行nginx -t通过后再reload;FPM配置同样先恢复、测试,再重载。若安装或更新已经修改数据库,不能只回退程序文件,应恢复同一时间点的网站文件与数据库备份。涉及整机快照恢复时,先确认可接受的停机时间和备份后新增数据的损失范围。