先说个结论:在Ubuntu上部署ThinkPHP,只要搭配PHP + Nginx/Apache + Composer这套组合,兼容性完全不用担心。主流版本,比如5.x、6.x,都能稳定运行。实际部署中遇到的那些坑,十有八九是PHP版本对不上、扩展没装全,或者Web服务器的重写规则没配好,真不是系统层面的兼容问题。
版本与扩展要求
让ThinkPHP项目跑起来,具体需要满足哪些条件?
PHP版本匹配
- ThinkPHP 5.0+ 要求 PHP 不低于 5.6.0
- ThinkPHP 6.0+ 则必须 PHP ≥ 7.2.5
- 实践下来,建议优先用Ubuntu的LTS版本(像20.04或22.04),搭配受支持的PHP版本来部署,后续扩展和维护都省心不少。
常用且必要的PHP扩展
- 数据库和字符集这块:pdo_mysql、mbstring、mysql
- 网络与数据处理少不了:curl、xml、json、zip、gd、bcmath、openssl、zlib
- 举个例子,装PHP 7.4的扩展可以这样:
sudo apt install php7.4 php7.4-fpm php7.4-mysql php7.4-mbstring php7.4-xml php7.4-curl php7.4-gd php7.4-zip php7.4-bcmath - 装完后验证一下:
php -m | grep -E 'curl|mbstring|mysql|pdo_mysql|gd|zip|bcmath|xml|json',确保该有的都在。
多版本PHP并存与切换
如果系统里装了多个PHP版本,可以用 update-alternatives 来切换默认版本:sudo update-alternatives --set php /usr/bin/php7.4。切换后记着重启对应服务(Apache/Nginx 和 PHP-FPM),让改动生效。
Web服务器配置要点
Nginx(推荐方案)
- 站点根目录要指向项目的public目录:
root /var/www/html/your_project/public; - 开启重写规则,支持PATHINFO和路由是关键:
try_files $uri $uri/ /index.php?$query_string; - FastCGI转发示例:
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;,同时确保fastcgi_param SCRIPT_FILENAME和PATH_INFO都设置正确。
Apache(可选方案)
- 先启用模块:
sudo a2enmod rewrite - 虚拟主机配置里开启
AllowOverride All,让.htaccess能生效,然后用标准的ThinkPHP重写规则就行。
常见故障快速定位
- 502 Bad Gateway:多半是PHP-FPM没启动,或者fastcgi_pass的路径对不上。检查一下服务状态和套接字路径。
- 路由失效/白屏:检查Nginx的try_files规则,或者Apache的AllowOverride配置是不是正确。
部署与权限建议
使用Composer管理项目
强烈建议用Composer来创建项目,比如 composer create-project topthink tp6,别手动下载,容易导致依赖不一致。
目录权限与敏感文件
- 运行时目录要可写:
sudo chown -R www-data:www-data /var/www/html/your_project && sudo chmod -R 755 /var/www/html/your_project/runtime - 生产环境务必关闭调试:在
config/app.php里把'app_debug'设为false .env这类敏感配置文件,建议权限设为640,防止数据库等凭据泄露。
日志与问题排查
遇到问题别慌,优先看这几个日志:/var/log/nginx/error.log、/var/log/php7.4-fpm.log(对应你PHP版本的FPM日志),语法、权限、路由、扩展加载问题基本都能定位到。