Laravel项目在Linux上如何实现持续集成
导读:在 Linux 上落地 Laravel 的持续集成 一 方案总览与前置准备 版本控制与仓库:使用 Git,托管在 GitHub/GitLab/Gitea 等平台。 运行环境:Linux 服务器(如 Debian/CentOS),安装 P...
在 Linux 上落地 Laravel 的持续集成
一 方案总览与前置准备
- 版本控制与仓库:使用 Git,托管在 GitHub/GitLab/Gitea 等平台。
- 运行环境:Linux 服务器(如 Debian/CentOS),安装 PHP 8.x、Composer、Nginx/Apache、MySQL/MariaDB、Redis(可选,用于缓存/队列)。
- 测试框架:Laravel 默认使用 PHPUnit;浏览器自动化可用 Laravel Dusk(可选)。
- CI/CD 引擎:选择其一或组合使用,如 GitHub Actions、GitLab CI/CD、Jenkins。
- 交付方式:SSH + 脚本、rsync、或 Docker 容器化部署。以上组件均为在 Linux 上运行 Laravel 的常见、成熟选型。
二 本地与 CI 通用流程
- 安装依赖
- 执行:composer install --no-interaction --prefer-dist --optimize-autoloader
- 目的:安装生产依赖并优化自动加载,提升运行与测试效率。
- 环境配置
- 复制 .env.example → .env,生成应用密钥:php artisan key:generate
- 数据库:CI 中优先使用服务容器(如 MySQL 8.0)或内存 SQLite;必要时在 CI 配置中设置 DB_CONNECTION、DB_HOST、DB_PORT、DB_DATABASE、DB_USERNAME、DB_PASSWORD 等变量。
- 运行测试
- 单元/功能测试:./vendor/bin/phpunit
- 浏览器测试(可选):Laravel Dusk 需额外驱动与初始化步骤,适合端到端场景。
- 静态分析/代码规范(可选)
- 如 PHPStan/Psalm、PHP_CodeSniffer,在 CI 中作为质量门禁执行。
- 构建产物与缓存
- 缓存 Composer 依赖、优化 OPcache、生成配置缓存:php artisan config:cache(生产构建建议开启)。
三 三种常用 CI 方案示例
- GitHub Actions(托管在 GitHub 时首选)
- 触发:对 main/develop 分支的 push 与 pull_request 事件。
- 服务:在 CI 中启动 MySQL 8.0 服务容器,配置数据库环境变量。
- 步骤:检出代码 → 安装 PHP 与 Composer → 安装依赖 → 生成密钥 → 运行测试。
- 示例要点:
- 使用 services.mysql 启动数据库,设置 MYSQL_DATABASE/ROOT_PASSWORD/USER/PASSWORD。
- 在步骤中执行 php artisan key:generate 与 ./vendor/bin/phpunit。
- GitLab CI/CD(自托管或 GitLab 托管)
- 阶段:build → test → deploy。
- 构建:安装依赖、生成密钥、缓存配置。
- 测试:运行 phpunit,可输出覆盖率报告(如 –coverage-clover)。
- 部署:使用 rsync 或 SSH 将产物同步至目标服务器(如 /var/www/laravel),注意排除 .git 与 .env;必要时执行 php artisan migrate --force 与清理缓存。
- Jenkins(自托管)
- 安装与插件:安装 Jenkins,建议启用 Docker、Git、PHP、MySQL 等插件。
- 任务配置:源码管理(Git)、触发器(轮询或 Webhook)、构建步骤(Composer、PHPUnit、部署脚本/SSH)。
- 部署方式:在构建后执行 SSH 脚本 或 rsync 同步代码,远程执行 migrate 与 Nginx/php-fpm 重启。
四 部署与安全加固要点
- Web 服务器与 PHP-FPM
- Nginx 示例:root 指向 /path/to/laravel/public,location 使用 try_files $uri $uri/ /index.php?$query_string; ,PHP 通过 fastcgi_pass unix:/var/run/php/phpX.X-fpm.sock 代理。
- PHP-FPM 进程管理:合理设置 pm.max_children/start_servers/min_spare_servers/max_spare_servers,避免资源争用。
- 文件与目录权限
- 建议 storage 与 bootstrap/cache 目录可被 Web 服务用户(如 www-data) 写入;可使用 chown/chmod 或在容器中以合适用户运行。
- SSH 与自动化部署
- 使用 SSH 密钥(禁用密码登录),在 CI 中安全注入私钥;通过 rsync/SSH 执行拉取、依赖安装、迁移与缓存清理。
- 生产变更建议:使用 零停机部署(如蓝绿/金丝雀)、备份与回滚脚本、在维护窗口执行结构性变更。
- 缓存与队列
- 配置 Redis 作为缓存/队列驱动,使用 Supervisor 守护队列进程,确保异步任务可靠执行。
- 安全与合规
- 开启 HTTPS/TLS(如 Let’s Encrypt)、设置 防火墙、限制敏感文件访问(如 .env)、定期更新系统与依赖。
五 快速落地清单
- 在仓库根目录新增 .github/workflows/ci.yml(GitHub Actions)或 .gitlab-ci.yml(GitLab CI),覆盖安装依赖、生成密钥、运行测试三个阶段。
- 在 Linux 服务器准备 Nginx + PHP-FPM + MySQL/Redis,并配置站点根目录为 public。
- 配置 SSH 密钥 与部署用户,编写最小化 部署脚本(拉取代码、composer install、migrate、清缓存、重启服务)。
- 接入 pull_request 质量门禁(测试必须全部通过),main 分支通过后再执行部署作业。
- 上线后监控 错误日志、队列、慢查询,并按需扩展为 Docker 或 多实例 架构。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Laravel项目在Linux上如何实现持续集成
本文地址: https://pptw.com/jishu/764110.html
