本文摘要:Laravel项目部署流程指南,包含从备份到验证的完整步骤。首先进行环境检查和代码/数据库备份,然后通过Git拉取最新代码并启用维护模式。关键步骤包括:更新Composer依赖(含内存不足解决方案)、数据库迁移、缓存优化。部署后需验证网站状态和功能,并提供了自动化验证脚本。文档还包含完整的部署脚本、回滚方案以及监控要点,特别强调权限管理和.env文件保护。最后总结线上更新的四大原则:备份优先、维护模式、分步操作和回滚准备,确保安全更新生产环境依赖包。
部署流程概览

flowchart TD
A[开始更新] --> B[创建备份]
B --> C[拉取最新代码]
C --> D[维护模式]
D --> E[更新依赖]
E --> F[数据库迁移]
F --> G[缓存优化]
G --> H[退出维护模式]
H --> I[监控验证]
I --> J[完成部署]
详细操作步骤
1. 准备工作
1.1 环境检查
bash
# 检查当前环境状态
php -v
composer -V
git status
df -h # 检查磁盘空间
1.2 创建备份
bash
# 备份代码
tar -czf backup_$(date +%Y%m%d_%H%M%S).tar.gz /path/to/project
# 备份数据库
mysqldump -u username -p database_name > database_backup_$(date +%Y%m%d_%H%M%S).sql
2. 部署操作
2.1 拉取最新代码
bash
# 切换到项目目录
cd /path/to/project
# 拉取最新代码(确保已提交composer.json和composer.lock)
git pull origin main
2.2 启用维护模式
bash
# Laravel 维护模式
php artisan down --message="系统升级中,请稍候..." --retry=60
# 或创建自定义维护页面
echo "系统维护中,请稍后再访问..." > maintenance.html
2.3 更新 Composer 依赖
bash
# 1. 首先检查依赖兼容性
composer check-platform-reqs
# 2. 安装新依赖(推荐方式)
composer install --no-dev --optimize-autoloader --prefer-dist --no-interaction
# 或者更新特定包
composer update vendor/package-name --no-dev --optimize-autoloader --no-interaction
# 3. 验证安装
composer validate
composer show --installed
2.4 处理可能的问题
bash
# 如果出现内存不足错误
COMPOSER_MEMORY_LIMIT=-1 composer install
# 如果需要清除缓存
composer clear-cache
2.5 数据库迁移(如需要)
bash
# 运行数据库迁移
php artisan migrate --force
# 或检查状态后再迁移
php artisan migrate:status
php artisan migrate --force
2.6 优化缓存
bash
# 优化配置缓存
php artisan config:cache
# 优化路由缓存
php artisan route:cache
# 优化类映射
php artisan optimize
# 重新生成 Composer 自动加载
composer dump-autoload -o
2.7 退出维护模式
bash
php artisan up
3. 验证与监控
3.1 基本验证
bash
# 检查网站是否可访问
curl -I https://yourdomain.com
# 检查新功能是否正常
curl https://yourdomain.com/api/health-check
# 检查错误日志
tail -f /var/log/nginx/error.log
tail -f /var/log/php-fpm/error.log
3.2 自动化验证脚本
bash
#!/bin/bash
# deploy-validate.sh
URL="https://yourdomain.com"
STATUS=$(curl -s -o /dev/null -w "%{http_code}" $URL)
if [ $STATUS -eq 200 ]; then
echo "部署成功: 网站返回200状态码"
# 检查特定功能
API_RESPONSE=$(curl -s $URL/api/version)
if [[ $API_RESPONSE == *"new-feature"* ]]; then
echo "新功能验证成功"
exit 0
else
echo "新功能验证失败"
exit 1
fi
else
echo "部署失败: 网站返回状态码 $STATUS"
exit 1
fi
自动化部署脚本
完整部署脚本示例
bash
#!/bin/bash
# deploy.sh
set -e # 遇到错误退出脚本
# 配置变量
PROJECT_DIR="/path/to/project"
BACKUP_DIR="/backups"
LOG_FILE="/var/log/deployments/deploy_$(date +%Y%m%d_%H%M%S).log"
# 开始日志记录
exec > >(tee -a $LOG_FILE) 2>&1
echo "开始部署: $(date)"
# 步骤1: 备份
echo "创建备份..."
tar -czf $BACKUP_DIR/project_$(date +%Y%m%d_%H%M%S).tar.gz $PROJECT_DIR
mysqldump -u user -p password database > $BACKUP_DIR/db_$(date +%Y%m%d_%H%M%S).sql
# 步骤2: 进入项目目录
cd $PROJECT_DIR
# 步骤3: 启用维护模式
php artisan down --message="系统升级中,请稍候..." --retry=60
# 步骤4: 拉取代码
git fetch origin
git checkout main
git reset --hard origin/main
# 步骤5: 安装依赖
composer install --no-dev --optimize-autoloader --prefer-dist --no-interaction
# 步骤6: 数据库迁移
php artisan migrate --force
# 步骤7: 优化缓存
php artisan config:cache
php artisan route:cache
composer dump-autoload -o
# 步骤8: 退出维护模式
php artisan up
echo "部署完成: $(date)"
# 步骤9: 验证部署
./deploy-validate.sh
回滚方案
快速回滚脚本
bash
#!/bin/bash
# rollback.sh
set -e
# 查找最新备份
LATEST_BACKUP=$(ls -t $BACKUP_DIR/project_*.tar.gz | head -1)
LATEST_DB_BACKUP=$(ls -t $BACKUP_DIR/db_*.sql | head -1)
# 启用维护模式
php artisan down --message="系统回滚中,请稍候..."
# 恢复备份
tar -xzf $LATEST_BACKUP -C /
# 恢复数据库
mysql -u user -p password database < $LATEST_DB_BACKUP
# 退出维护模式
php artisan up
echo "回滚完成到备份: $LATEST_BACKUP"
监控与警报
部署后监控要点
-
系统资源监控
# 监控CPU和内存 top htop # 监控PHP进程 sudo systemctl status php-fpm sudo tail -f /var/log/php-fpm/slow.log
-
应用性能监控
bash# 检查响应时间 ab -n 100 -c 10 https://yourdomain.com/ # 检查错误率 tail -f /var/log/nginx/access.log | awk '{print $9}' | sort | uniq -c
-
设置警报
-
监控错误日志中的异常
-
设置HTTP状态码警报
-
监控服务器资源使用情况
-
安全注意事项
-
权限管理
bash# 确保正确的文件权限 chown -R www-data:www-data /path/to/project find /path/to/project -type f -exec chmod 644 {} \; find /path/to/project -type d -exec chmod 755 {} \; chmod -R 775 storage bootstrap/cache
-
环境变量保护
bash# 确保.env文件不被公开访问 chmod 600 .env
-
Composer 安全检查
bash# 检查依赖中的安全漏洞 composer audit
常见问题处理
1. 依赖冲突解决
bash
# 查看冲突详情
composer why vendor/package-name
# 查看依赖树
composer depends vendor/package-name
# 尝试更新单个包
composer update vendor/package-name --with-dependencies
2. 内存不足处理
bash
# 增加内存限制
php -d memory_limit=-1 composer install
# 或使用交换空间
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
3. 部署失败回滚
bash
# 如果部署中途失败,手动回滚
git reset --hard HEAD@{1}
composer install
php artisan up
总结
线上环境更新 Composer 依赖包需要谨慎操作,遵循以下原则:
-
备份优先:始终先备份代码和数据库
-
维护模式:更新期间启用维护模式避免用户访问
-
分步操作:按照流程逐步执行,确保每一步成功
-
验证监控:部署后全面验证功能并监控系统状态
-
回滚准备:随时准备回滚到之前稳定版本
通过遵循这些步骤和最佳实践,可以安全地在生产环境中更新 Composer 依赖包,最大限度地减少服务中断时间和风险。