用 git tag 打正式版本号需执行 git tag -a v1.2.0 -m "release: user login fix" 并 git push origin v1.2.0,标签名须符合语义化版本(vx.y.z),否则 composer 更新会失败。

怎么用 git tag 打正式版本号
PHP 项目发版本质是固化某次提交的代码快照,git tag 是最轻量、最通用的做法。别碰「打包成 zip 再上传」这种手动操作,它没法追溯、没法自动触发 CI、后续想回滚或比对差异全是坑。
-
git tag -a v1.2.0 -m "release: user login fix"—— 带注释的 annotated tag,推荐;git tag v1.2.0是轻量 tag,没消息、没签名,CI 工具可能不识别 - tag 名必须符合语义化版本规范(
vX.Y.Z),否则 Composer 自动更新会失败,composer update可能跳过你的新版本 - 打完 tag 一定要
git push origin v1.2.0或git push origin --tags,否则远程仓库没有这个版本,部署脚本拉不到
部署时怎么让线上环境加载对应版本
不是把本地文件 FTP 传上去就叫发布。真正在意稳定性的 PHP 项目,得靠部署脚本切换 symlink,而不是直接改 document root 目录内容。
- 部署目录结构建议:
/var/www/myapp/releases/20240520142200(时间戳命名) +/var/www/myapp/current(软链指向当前生效版本) - 上线命令示例:
ln -snf /var/www/myapp/releases/20240520142200 /var/www/myapp/current,之后 reload php-fpm 或 nginx —— 这样切换是原子的,不会出现半旧半新页面 - 别在
current目录里写日志或缓存:这些目录要被删掉,得单独挂载到/var/www/myapp/shared下,否则每次发版丢 session、丢日志
Composer install 要不要加 --no-dev
要。线上环境跑 composer install 不加 --no-dev,等于把 PHPUnit、phpstan、larastan 全装进去,既浪费磁盘和内存,又可能因 dev 依赖冲突导致安装失败。
- 生产部署必须加:
composer install --no-dev --optimize-autoloader --no-interaction -
--optimize-autoloader生成 classmap,避免 PHP 每次请求都遍历 PSR-4 路径,对性能有实测提升(尤其小 VPS) - 如果项目用了
autoload-dev加载测试类,不加--no-dev还可能导致class not found错误——因为某些 autoloader 逻辑在 dev 环境下才注册
怎么验证发版后接口或页面没崩
人工点一遍首页、登录页、订单页?太慢,也漏得厉害。最简单的办法是加个 /health 路由,只做三件事:PHP 版本检查、DB 连通性、关键配置文件可读。
立即学习“PHP免费学习笔记(深入)”;
- 示例响应:
{"status":"ok","php":"8.1.22","db":"connected","config":"loaded"},Nginx 或监控系统能 curl 它并设超时阈值 - 别在 health 检查里调第三方 API 或 Redis pub/sub,那不是健康检查,是埋雷
- 发版脚本末尾加一句
curl -f http://localhost/health || exit 1,失败就中断,别让坏版本挂着等用户报错
真正麻烦的从来不是打 tag 或 rsync 文件,而是 shared 目录权限、opcache 是否清了、.env 文件是否被覆盖、还有那个永远没人记得改的 database.php 里的 host 地址。发版前看一眼 ls -la 和 php -i | grep opcache,比重跑十遍 deploy.sh 都管用。











