在 Ubuntu 上部署 ThinkPHP 时,权限问题最常见于:
permission deniedstorage / runtime 目录不可写下面按最常见场景给你一套标准处理方案。
ThinkPHP 在 Ubuntu 上通常由以下之一运行:
查看 PHP 运行用户:
ps aux | grep php-fpm
# 或
ps aux | grep apache
常见用户:
www-datawww-dataThinkPHP 6 / 8 通常需要写权限的目录:
runtime/
storage/
public/uploads/
(ThinkPHP 5 是 runtime/)
假设你的项目在:
/var/www/html/thinkphp
sudo chown -R www-data:www-data /var/www/html/thinkphp
⚠️ 如果你是开发环境 + 自己登录用户,也可用:
sudo chown -R $USER:www-data /var/www/html/thinkphp
# 目录 755
find /var/www/html/thinkphp -type d -exec chmod 755 {} \;
# 文件 644
find /var/www/html/thinkphp -type f -exec chmod 644 {} \;
chmod -R 775 runtime
chmod -R 775 storage
chmod -R 775 public/uploads
如果还不行:
chmod -R 777 runtime
(⚠️ 生产环境不建议 777,仅用于排查)
如果你是:
yourname 用户
www-data 运行 PHP
推荐方式:
sudo usermod -aG www-data yourname
然后:
sudo chown -R www-data:www-data /var/www/html/thinkphp
Ubuntu 默认是 AppArmor,通常不影响。
如果你手动改过安全策略,可检查:
sudo aa-status
| 错误 | 原因 | 解决 |
|---|---|---|
failed to open stream: Permission denied |
目录不可写 | 给 runtime 权限 |
| 上传失败 | uploads 无写权限 | 775 / 777 |
| 日志不生成 | runtime/log 无权限 | chown www-data |
| 页面 500 但无报错 | 错误日志不可写 | 开 debug + 看 nginx log |
chown -R www-data:www-data /var/www/html
chmod -R 755 /var/www/html
chmod -R 775 runtime storage public/uploads
# 看 PHP 错误
tail -f /var/log/php8.1-fpm.log
# 看 Nginx 错误
tail -f /var/log/nginx/error.log
# 看 ThinkPHP 日志
tail -f runtime/log/*.log
如果你愿意,可以告诉我:
我可以直接帮你精确定位权限问题。