Ubuntu 上 ThinkPHP 依赖管理指南

在 Ubuntu 环境下搭建 ThinkPHP 项目,依赖管理是个绕不开的环节。从环境搭建到 Composer 的熟练运用,再到部署时的细节把控,每一步都有值得注意的地方。下面就把整个流程拆开揉碎了讲清楚。
一 环境准备
- 安装 PHP 与常用扩展(适配 ThinkPHP 6 推荐 PHP 7.4+):直接跑下面命令就好——
sudo apt update && sudo apt install php php-cli php-fpm php-mysql php-mbstring php-xml php-curl php-zip php-gd php-bcmath。这些扩展基本覆盖了 ThinkPHP 6 的日常需求,缺了哪个后面跑起来可能报错。 - 安装 Composer:
curl -sS https://getcomposer.org/installer | php && sudo mv composer.phar /usr/local/bin/composer。这条命令一气呵成,下载安装包再移到系统路径,之后全局调用 composer 就方便了。 - 安装 Web 服务器(二选一):Nginx 或 Apache。实际项目中建议 Nginx + PHP-FPM 组合,性能更稳。示例命令:
sudo apt install nginx或sudo apt install apache2。选哪个看个人偏好,不过后面配置重写规则时 Nginx 会更直观一些。
二 使用 Composer 进行依赖管理
- 创建项目:
composer create-project topthink tp。如果想指定版本,比如用 ThinkPHP 6.0,可以写成topthink=6.0.*。 - 添加依赖:
composer require 包名,例如monolog/monolog。删除依赖则是composer remove 包名。这两种操作是日常最频繁的。 - 安装/更新:
composer install会根据composer.lock锁定版本安装,适合部署时保证一致性;composer update则会更新依赖并生成新的锁文件,开发环境用得多。 - 生产环境优化:
composer install --optimize-autoloader --no-dev。这条命令会生成优化后的自动加载映射,同时跳过开发依赖,打包部署时的标准操作。 - 说明:ThinkPHP 6 项目从创建之初就基于 Composer 管理依赖,上面这些命令已经能覆盖增删改查的日常场景。
三 框架自动加载与项目配置
- 框架入口自动加载:ThinkPHP 6 的
public/index.php默认已经引用了 Composer 的自动加载文件:__DIR__ . '/../vendor/autoload.php'。这意味着通过 Composer 安装的类库无需额外配置即可直接使用。 - 全局命令(可选):如果想全局使用
think命令来创建项目,可以执行composer global require topthink。之后需要把 Composer 全局 bin 目录加到 PATH 环境变量里,然后就能用think new 项目名快速生成项目骨架了。
四 部署与运行要点
- 目录与权限:Web 根目录要指向项目下的
public文件夹。另外runtime目录必须可写,否则运行时各种缓存和日志会报错。执行chmod -R 755 runtime基本能解决问题。 - Nginx 配置要点:root 指向项目 public;PHP 处理用
fastcgi_pass unix:/run/php/php7.4-fpm.sock(根据实际 PHP 版本调整路径);URL 重写关键配置:try_files $uri $uri/ /index.php?$query_string;。这一条能确保所有路由都通过入口文件解析。 - 常用运行方式:开发环境直接用
php think run启动内置服务器,默认地址http://127.0.0.1:8000,省去配置 Web 服务器的麻烦。生产环境还是老实用 Nginx/Apache + PHP-FPM 更靠谱。
五 常见问题排查
- 502 Bad Gateway:先检查 PHP-FPM 是否在运行,然后确认 Nginx 配置里的
fastcgi_pass路径和 PHP 版本是否匹配。很多时候就是版本号写错了。 - 路由 404/失效:大概率是 Web 服务器没启用重写规则。Nginx 要加上
try_files那行;Apache 需要开启mod_rewrite并正确配置.htaccess文件。 - 类库找不到:先执行
composer install看看 vendor 目录是否完整,确认入口文件确实引入了vendor/autoload.php。如果还不行,试试composer dump-autoload重新生成自动加载映射。