在 Ubuntu 上搭建 WordPress,看似只是 apt install 几步的事,但真要跑在生产环境里,尤其是考虑到国内的网络环境和运维成本,坑其实不少。很多人只关注“怎么装”,忽略了“怎么稳”和“怎么安”。
以下是我基于实际运维经验总结的几个核心注意点,按优先级排列:
1. 基础环境选型:不要迷信“一键安装包”
虽然宝塔(BT Panel)或 OneinStack 在国内很流行,能快速解决 LAMP/LNMP 问题,但对于追求稳定性和可维护性的场景,推荐手动配置或使用官方推荐的 Webmin/Cloud-init 模板。
- PHP 版本选择:WordPress 对 PHP 版本敏感。目前建议直接使用 PHP 8.1 或 8.2。
- 避坑:不要为了兼容老旧插件强行用 PHP 7.4 或更低,性能差距巨大,且安全补丁已停止更新。
- 注意:确保安装了必要的扩展,如
php-mysql,php-curl,php-gd,php-mbstring,php-xml,php-zip,php-intl。很多新手搭建后图片上传失败或页面空白,90% 是因为漏装了php-gd或php-mbstring。
- Web 服务器:Nginx 比 Apache 更轻量、并发处理能力更强,适合云主机。如果选 Nginx,务必处理好
try_files规则,否则 WordPress 的固定链接(Permalinks)会全部 404。
2. 数据库:MySQL vs MariaDB
Ubuntu 源里默认提供的是 MariaDB,它完全兼容 MySQL 协议。对于 WordPress 来说,两者没有本质区别。
- 字符集设置:这是最容易被忽视的一点。安装数据库后,必须检查
/etc/mysql/my.cnf或/etc/my.cnf.d/server.cnf。- 确保
character-set-server设置为utf8mb4,collation-server设置为utf8mb4_unicode_ci。 - 为什么:
utf8在 MySQL 中其实是utf8mb3,不支持 emoji 表情。如果你未来想在文章里发表情包,或者用户评论里有特殊符号,utf8mb4是必须的。
- 确保
- 内存限制:云服务器通常内存较小(如 2G/4G)。调整
innodb_buffer_pool_size,一般设为物理内存的 50%-70%。如果内存只有 1G,设 512M 即可,避免 OOM(Out of Memory)。
3. 文件权限与安全:别给 root 权限
这是新手最容易犯的错误,也是导致网站被篡改的主要原因。
- 目录所有者:Web 根目录(如
/var/www/html)的所有者应该是www-data(Ubuntu 下 Nginx/Apache 的运行用户),而不是你的普通用户或 root。sudo chown -R www-data:www-data /var/www/html sudo chmod -R 755 /var/www/html # 特别注意 wp-content/uploads 目录需要写入权限 sudo chown -R www-data:www-data /var/www/html/wp-content/uploads - 禁用 XML-RPC:除非你有特定的需求(如 Jetpack 或某些移动端 App),否则建议在
functions.php或 Nginx 配置中禁用xmlrpc.php,它是 DDoS 攻击和暴力破解的主要入口。 - 隐藏版本号:在 Nginx 配置中添加
server_tokens off;,防止泄露 WordPress 具体版本,减少针对性攻击。
4. 国内网络环境的特殊优化
在阿里云、腾讯云等国内厂商部署,有几个特有的痛点:
- 时区问题:
- Ubuntu 系统默认可能是 UTC 时间。
- WordPress 后台设置里的“时区”要选对(上海/北京时间)。
- 关键点:确保 PHP 的时区也设置正确。在
php.ini中找到date.timezone = Asia/Shanghai。否则,定时发布文章、日志记录的时间都会错乱。
- 磁盘 I/O 瓶颈:
- 云服务器的系统盘通常是 SSD,但读写性能有限。WordPress 频繁读写数据库和日志。
- 建议:将
wp-content/uploads目录迁移到独立的云硬盘(EBS/CBS),并挂载到服务器上。这样扩容和备份更方便,也减轻系统盘压力。
- CDN 与静态资源分离:
- 国内访问速度受带宽影响大。强烈建议使用对象存储(OSS/COS/SMS)存放图片、视频等大文件,并通过 CDN 提速。
- 使用插件如 “WP Offload Media” 或 “UpdraftPlus” 将媒体库直接推送到对象存储,本地只留引用。这能极大提升加载速度并节省服务器带宽费用。
5. 备份策略:没有备份等于裸奔
WordPress 的核心价值在于内容,数据丢了比服务宕机更可怕。
- 数据库备份:使用
mysqldump脚本,通过 Crontab 每天凌晨自动备份,并上传到远程存储(如 OSS/COS)。不要只存在服务器本地! - 文件备份:除了
wp-content目录,还要备份wp-config.php(里面包含数据库密码等关键信息)。 - 自动化方案:可以使用
BorgBackup或Restic进行增量备份,效率高且支持加密。 - 测试恢复:定期做一次恢复演练。很多站长发现备份文件损坏或无法解压时,已经是网站被黑之后了。
6. 防火墙与安全组
- 最小化端口开放:云服务器控制台的安全组(Security Group)只开放必要端口:
- 80 (HTTP)
- 443 (HTTPS)
- 22 (SSH,建议修改默认端口,并使用密钥登录,禁用密码登录)
- 严禁随意开放 3306 (MySQL)、888 (面板)、或其他管理端口到 0.0.0.0/0。
- Fail2Ban:安装
fail2ban,监控 SSH 和 Nginx 日志,自动封禁多次失败登录的 IP。这对抵御暴力破解非常有效。
7. SSL 证书:强制 HTTPS
- 使用 Let’s Encrypt 的 Certbot 免费申请证书,配置自动续期。
- 在 Nginx 配置中强制 HTTP 跳转到 HTTPS。
- 在 WordPress 后台设置中,将站点地址(Site Address)和主页地址(WordPress Address)都改为
https://。 - 检查主题和插件中是否有硬编码的
http://链接,否则会出现混合内容警告(Mixed Content),影响 SEO 和用户信任。
总结
在 Ubuntu 上搭建 WordPress,技术门槛不高,但稳定性、安全性和性能优化才是关键。记住三个原则:
- 最小权限:系统、数据库、Web 服务各司其职,权限严格控制。
- 数据外置:重要数据不放在系统盘,定期异地备份。
- 动静分离:利用云存储和 CDN 缓解服务器压力,提升用户体验。
最后,别怕命令行。虽然图形界面工具方便,但熟悉基本的 Linux 命令(如 journalctl, systemctl, grep, awk)能让你在排查问题时快人一步。
云技术博客