WordPress 更新失败通常是由于文件权限配置不正确导致的。Web 服务器(如 Caddy、Nginx 等)需要对其运行的用户拥有对 WordPress 核心目录,特别是 wp-content,的读写权限。wp-content/upgrade 目录是 WordPress 自动更新程序用于临时存储新文件的关键位置。
1. 了解原因:文件权限
Web 服务器通常以特定用户身份运行。例如,在 Debian/Ubuntu 系统上通常是 www-data,而在 AlmaLinux/CentOS 上可能是 nginx。为了让 WordPress 正常工作,这个用户需要对你的 WordPress 目录,特别是 wp-content,拥有读写权限。wp-content/upgrade 目录是 WordPress 自动更新过程中用来临时存放新文件的。
2. 解决方法:调整权限
你需要通过 SSH 连接到你的服务器并运行一些命令来调整权限。
步骤 1:确认你的 Web 服务器用户
首先,找出 Caddy(或者提供 PHP 服务的进程,例如 PHP-FPM)是以哪个用户运行的。
- 对于 PHP-FPM: 最常见的情况是 Caddy 将请求代理到 PHP-FPM。PHP-FPM 通常在 Debian/Ubuntu 上以
www-data运行,在 AlmaLinux/CentOS 上以nginx运行。你可以在 PHP-FPM 的pool配置文件中找到这个信息(例如/etc/php/8.x/fpm/pool.d/www.conf或/etc/php-fpm.d/www.conf,查找user =和group =)。 - 对于 Caddy 直接服务 PHP(不常见): Caddy 本身通常以
caddy或www-data运行。
在这个例子中,我们假设用户是 www-data。如果你的用户不同,请相应调整。
步骤 2:授予所有权和权限
导航到你的 WordPress 安装目录。如 /var/www/html/blog/。
cd /var/www/html/blog/
现在,运行以下命令:
1.更改所有权: 这个命令将所有 WordPress 文件和目录的所有者和组都设置为 www-data。
sudo chown -R www-data:www-data .
2.设置目录权限: 目录需要执行权限才能被“进入”或导航。
sudo find . -type d -exec chmod 755 {} \;
3.设置文件权限: 文件通常需要所有者拥有读写权限。
sudo find . -type f -exec chmod 644 {} \;
关于 wp-content 的重要提示: 有时,WordPress 需要插件、主题和上传目录的特定写入权限。如果你在执行上述命令后仍然遇到问题,你可能需要单独设置 wp-content 及其子目录的写入权限。
sudo chmod -R g+w wp-content # 这将为 wp-content 赋予组写入权限
或者,如果上述方法不起作用,更直接的方法是:
sudo chmod -R 775 wp-content # 为 wp-content 及其子文件夹设置更广泛的写入权限
对 wp-content 使用 775 是一种常见做法,它允许 Web 服务器组进行写入。请避免使用 777,因为它会给所有人写入权限,存在安全风险。
4.重启服务(可选但推荐) 更改权限后,最好重启你的 Web 服务器(Caddy)和 PHP-FPM,以确保它们能识别新的权限设置。
sudo systemctl restart caddy
sudo systemctl restart php8.x-fpm # 将 8.x 替换为你的 PHP 版本(例如,php7.4-fpm, php8.2-fpm)
5.重试 WordPress 更新 现在,返回你的 WordPress 管理后台,再次尝试更新。它应该能够成功创建 /var/www/html/blog/wp-content/upgrade 目录并继续更新过程。
如果问题仍然存在,请仔细检查你的 Caddy/PHP-FPM 进程实际运行的用户。你可以使用 ps aux | grep caddy 或 ps aux | grep php-fpm 来查找。
