WordPress部署到Linux:源码下载后避坑指南
改个需求建站公司拖一周,这种憋屈谁没经历过?想自己动手,结果 WordPress 部署到 Linux 的路上一堆坑,光是源码下载完怎么跑起来就让人头大。别急,今天咱们不整虚的,直接上干货,把那些让你抓狂的报错和配置问题一次说透。
为什么本地跑得好好的,一上 Linux 就报错?
很多兄弟习惯了 XAMPP 或 WAMP 这种“一键启动”的环境,觉得把文件传上去就能用。大错特错。Linux 服务器是“裸”的,没有默认配置,没有自动权限。最常见的问题就是文件权限。
WordPress 核心文件需要被 Web 服务器(如 Nginx/Apache)读取,而 wp-content 目录需要被 PHP-FPM 写入。如果你直接把所有文件设为 777,那是给黑客开门;如果全是 644,数据库连不上,插件装不了。
正确做法:
- 所有文件权限设为
644(用户读写,组和其他人只读)。 - 所有目录权限设为
755。 - 关键一步:
wp-content、wp-content/uploads、wp-content/cache等目录,所有者(Owner)必须改为 PHP-FPM 运行的用户(通常是www-data或nginx)。
命令示例(Ubuntu/Debian):
sudo chown -R www-data:www-data /var/www/html/wordpress
sudo find /var/www/html/wordpress -type d -exec chmod 755 {} \;
sudo find /var/www/html/wordpress -type f -exec chmod 644 {} \;
这一步没做对,后面全是泪。
Nginx 配置里哪些地方最容易写错?
Nginx 性能强,但配置容错率低。很多新手直接复制网上的配置,结果 404 满天飞。核心在于 try_files 和 fastcgi_pass。
一个标准的 WordPress Nginx 配置块(放在 server 块内):
location / {try_files $uri $uri/ /index.php?$args;
}location ~ \.php$ {include snippets/fastcgi-php.conf;fastcgi_pass unix:/run/php/php8.1-fpm.sock; # 注意这里的版本号# 如果系统只有默认 php-fpm,可能是 127.0.0.1:9000
}
常见坑:
- PHP 版本不匹配:你装了 PHP 8.1,但配置里写的是
php8.0-fpm.sock。去/run/php/或/var/run/php/看看实际生成的 socket 文件名。 - 缺少
$args:/index.php?$args里的$args丢了,会导致伪静态失效,直接显示“无法访问”。 - FastCGI 超时:上传大文件或执行慢插件时,加一句
fastcgi_read_timeout 300;能救急。
改完配置,记得 sudo nginx -t 测试语法,再 sudo systemctl reload nginx 平滑重载,千万别直接 restart 中断服务。
PHP 内存不足导致 500 错误,怎么调?
WordPress 本身不重,但插件多了、主题复杂了,内存需求直线上升。默认 PHP 的 memory_limit 往往是 128M 甚至 64M,稍微复杂点页面就报 Fatal error: Allowed memory size...。
怎么改?
不要只改一个地方!Linux 下 PHP 配置可能分散在 php.ini 和 php-fpm.conf 里。
- 找到
php.ini:sudo php --ini查看路径。 - 修改
memory_limit = 256M(生产环境建议 256M-512M,别盲目拉太高)。 - 更重要:修改
php-fpm的 pool 配置(如/etc/php/8.1/fpm/pool.d/www.conf),里面的php_admin_value[memory_limit]会覆盖php.ini。 - 重启 PHP-FPM:
sudo systemctl restart php8.1-fpm。
监控技巧:在 WordPress 后台安装 “System Status” 类插件,或者在 .htaccess(Apache)/Nginx 日志里看错误。如果频繁 OOM,考虑升级服务器内存,或者优化那些吃内存的插件。
MySQL 连接不上,到底是密码错还是防火墙?
这是部署 WordPress 到 Linux 的高频问题。报错 Error establishing a database connection,原因可能有三:
- 配置文件没改:
wp-config.php里的DB_NAME,DB_USER,DB_PASSWORD没改成你新建数据库的真实信息。别偷懒用root用户,安全第一。 - MySQL 未启动或监听地址不对:
如果只显示sudo systemctl status mysql # 查看监听地址 sudo netstat -tlnp | grep 3306127.0.0.1:3306,那没问题,因为 Web 和 DB 在同一台机器。如果你是远程 DB,必须改bind-address = 0.0.0.0并配置防火墙。 - 权限问题:你新建的 MySQL 用户没有权限连接该数据库。
GRANT ALL PRIVILEGES ON mywordpressdb.* TO 'wpuser'@'localhost' IDENTIFIED BY 'strongpassword'; FLUSH PRIVILEGES;
排查顺序:先查配置文件 → 再查服务状态 → 最后查权限。90% 的情况是配置文件写错了,尤其是密码里的特殊字符没转义。
如何安全地开启 HTTPS?Let's Encrypt 实操
现在没 HTTPS,浏览器直接标红,SEO 也扣分。用 Let's Encrypt 免费证书是最优解。
步骤:
- 安装 Certbot 和 Nginx 插件:
sudo apt install certbot python3-certbot-nginx - 确保域名已解析到服务器 IP,且 80 端口开放(Let's Encrypt 验证需要 HTTP 访问)。
- 一键签发:
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com - 测试自动续期:
sudo certbot renew --dry-run
注意:Certbot 会自动修改你的 Nginx 配置,添加 listen 443 ssl; 和证书路径。如果之前手动改过 443 配置,可能会有冲突,先备份配置。另外,记得在 WordPress 后台把“一般设置”里的地址改成 https://,否则会出现重定向循环。
部署后速度慢,除了加 CDN 还能做什么?
很多人觉得慢就是服务器差,其实 70% 的慢是配置和代码问题。
- 开启 OPcache:PHP 的字节码缓存,能极大减少 PHP 解析时间。在
php.ini中启用opcache.enable=1,并调整opcache.memory_consumption。 - 数据库优化:WordPress 的
wp_options表容易膨胀。定期使用插件清理自动草稿、修订版本。对于大站,考虑使用 Redis 作为对象缓存。 - 图片优化:前端上传的图片没压缩,直接拖垮带宽。强制使用 WebP 格式,或安装 Smush 等插件自动压缩。
- Gzip/Brotli 压缩:Nginx 开启
gzip on;或brotli on;,对 HTML、CSS、JS 进行压缩,传输体积减少 60%-80%。
工具推荐:用 GTmetrix 或 PageSpeed Insights 测速,看具体哪一项得分低,针对性优化。别盲目堆插件,插件越多,加载项越多。
如何备份?手动 cp 还是用插件?
手动备份是底线,插件备份是辅助。
- 数据库:每天凌晨 3 点定时
mysqldump。mysqldump -u wpuser -p'strongpassword' mywordpressdb > /backup/db_$(date +%F).sql - 文件:每天
tar打包wp-content和核心文件。tar -czf /backup/wp_$(date +%F).tar.gz /var/www/html/wordpress - 异地存储:备份留在本机等于没备。用
rsync或rclone同步到阿里云 OSS、AWS S3 或其他 VPS。
插件如 UpdraftPlus 适合小站快速备份,但大站(>10GB)容易超时。生产环境,脚本化 + 异地容灾 才是正道。
总结:部署不是终点,运维才是开始
WordPress 部署到 Linux,难不在安装,而在环境的一致性和权限的精细化管理。从源码下载到 Nginx 配置,从 PHP 参数调到 SSL 证书,每一步都藏着坑。
别被“建站公司拖一周”吓倒,掌握这些底层逻辑,你自己就能掌控服务器。记住,可复现的部署流程(比如用 Docker 或 Ansible)比手动敲命令更可靠。
你的网站用的什么技术栈?是原生 PHP、WordPress、还是 Laravel?评论区聊聊,看看有没有同款“坑友”。