ThinkPHP部署成功关键在三步:环境对得准(PHP≥8.0、启用必要扩展)、目录摆得正(Web根指向public、runtime可写)、规则写得准(Nginx用try_files转发且禁用fastcgi_split_path_info);漏任一环节将导致404、500或源码泄露。

ThinkPHP项目上传部署不是“传完就能用”,关键在三步:环境对得准、目录摆得正、规则写得准。漏掉任一环节,轻则404白屏,重则500报错或源码泄露。
一、上传前本地必须清理和准备
别直接压缩整个项目上传——runtime缓存、调试配置、本地扩展都会干扰生产环境。
- 删掉项目根目录下的 runtime/ 整个文件夹(保留空目录结构即可)
- 检查 .env 文件:数据库账号密码先留空或填占位值(如 DB_USERNAME=placeholder),后续在服务器单独创建数据库再填
- 确认 composer.json 和 composer.lock 已存在,vendor/目录不用传(服务器上重新装)
- 若用Git管理,确保 vendor/、runtime/ 已被 .gitignore 排除
二、上传方式与服务器操作
推荐用宝塔「文件」管理器上传.zip包后在线解压,避免FTP断连丢文件;也可用scp/rsync命令行上传。
- 上传目标路径建议设为 /www/wwwroot/your-project(宝塔默认路径)或自定义路径
- 上传完成后,在宝塔「终端」或SSH中进入项目根目录,执行:
composer install --no-dev --optimize-autoloader - 执行后检查 vendor/autoload.php 是否存在且可读;运行 php -m | grep opcache 确认OPcache已启用,且 opcache.enable_cli=1 已在php.ini中设置(否则 php think 命令会失败)
三、Web服务器必须调准的三项设置
这是八成失败的根源,不是代码问题,是运行链断了。
立即学习“PHP免费学习笔记(深入)”;
- 网站运行目录必须设为 /public:宝塔 → 网站 → 设置 → 网站目录 → 运行目录填 /public(开头带斜杠)
-
Nginx伪静态规则必须用TP专用版:站点 → 伪静态 → 清空原有内容,粘贴:
location / { try_files $uri $uri/ /index.php?$query_string; }
(此规则兼容PATH_INFO,无需额外开启PATH_INFO开关) - PHP版本与扩展要匹配:ThinkPHP 6 官方推荐 PHP 8.0,禁用 8.3+;必须安装并启用 fileinfo、openssl、mbstring、pdo_mysql、redis 扩展,装完务必重启PHP服务
四、上线前最后检查项
避免访问时踩坑,几处细节不能跳过。
- 确保 runtime/ 目录对Web进程用户(如 www 或 nginx)可写:
chmod -R 755 runtime 或在宝塔文件管理器中右键设权限 - 关闭调试模式:修改 .env 中 APP_DEBUG=false,或确保 config/app.php 中 'app_debug' => false
- 数据库配置在 .env 或 config/database.php 中填准确,且数据库已在宝塔「数据库」中创建并授权
- 首次访问前清空浏览器缓存,避免旧JS/CSS干扰



















