2026-03-05 11:35:50 +08:00
|
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
|
|
|
|
# 颜色定义
|
|
|
|
|
|
RED='\033[0;31m'
|
|
|
|
|
|
GREEN='\033[0;32m'
|
|
|
|
|
|
YELLOW='\033[1;33m'
|
|
|
|
|
|
BLUE='\033[0;34m'
|
|
|
|
|
|
NC='\033[0m'
|
|
|
|
|
|
|
|
|
|
|
|
PROJECT_ROOT="/www/wwwroot/chat.ay.lc" # <--- 确认这里的路径是否正确
|
|
|
|
|
|
|
|
|
|
|
|
echo -e "${BLUE}========================================${NC}"
|
|
|
|
|
|
echo -e "${BLUE} 🚀 Laravel 稳健更新脚本 (带严格检查) ${NC}"
|
|
|
|
|
|
echo -e "${BLUE}========================================${NC}"
|
|
|
|
|
|
|
|
|
|
|
|
cd "$PROJECT_ROOT" || { echo -e "${RED}❌ 无法进入项目目录:$PROJECT_ROOT${NC}"; exit 1; }
|
|
|
|
|
|
|
2026-03-05 11:49:45 +08:00
|
|
|
|
# 1. Git Pull(先重置 lock 文件,避免服务器环境差异导致冲突)
|
2026-03-05 11:48:07 +08:00
|
|
|
|
echo -e "${YELLOW}[1/7] 拉取代码...${NC}"
|
2026-03-05 11:49:45 +08:00
|
|
|
|
git checkout -- composer.lock package-lock.json 2>/dev/null || true
|
2026-03-05 11:35:50 +08:00
|
|
|
|
git fetch origin && git pull origin master
|
|
|
|
|
|
if [ $? -ne 0 ]; then echo -e "${RED}❌ Git 失败${NC}"; exit 1; fi
|
|
|
|
|
|
|
|
|
|
|
|
# 2. Composer Install (关键检查点)
|
2026-03-05 11:48:07 +08:00
|
|
|
|
echo -e "${YELLOW}[2/7] 安装依赖 (Composer)...${NC}"
|
2026-03-05 11:35:50 +08:00
|
|
|
|
composer install --no-dev --optimize-autoloader --classmap-authoritative --no-interaction
|
|
|
|
|
|
COMPOSER_EXIT_CODE=$?
|
|
|
|
|
|
|
|
|
|
|
|
if [ $COMPOSER_EXIT_CODE -ne 0 ]; then
|
|
|
|
|
|
echo -e "${RED}========================================${NC}"
|
|
|
|
|
|
echo -e "${RED} ❌ 致命错误:Composer 安装失败! ${NC}"
|
|
|
|
|
|
echo -e "${RED} vendor/autoload.php 未生成,网站将不可用。 ${NC}"
|
|
|
|
|
|
echo -e "${RED} 请检查上方的错误日志 (网络?内存?PHP版本?) ${NC}"
|
|
|
|
|
|
echo -e "${RED}========================================${NC}"
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
# 检查文件是否真的存在
|
|
|
|
|
|
if [ ! -f "vendor/autoload.php" ]; then
|
|
|
|
|
|
echo -e "${RED}❌ 奇怪:Composer 显示成功,但 vendor/autoload.php 不存在!${NC}"
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
fi
|
|
|
|
|
|
echo -e "${GREEN}✅ 依赖安装成功且文件存在。${NC}"
|
|
|
|
|
|
|
2026-03-05 11:48:07 +08:00
|
|
|
|
# 3. 前端构建
|
|
|
|
|
|
echo -e "${YELLOW}[3/7] 前端构建 (npm run build)...${NC}"
|
|
|
|
|
|
npm run build
|
|
|
|
|
|
if [ $? -ne 0 ]; then echo -e "${RED}❌ npm run build 失败${NC}"; exit 1; fi
|
|
|
|
|
|
echo -e "${GREEN}✅ 前端资源构建完成。${NC}"
|
|
|
|
|
|
|
2026-03-05 11:35:50 +08:00
|
|
|
|
|
|
|
|
|
|
# 4. 数据库迁移
|
2026-03-05 11:48:07 +08:00
|
|
|
|
echo -e "${YELLOW}[5/7] 数据库迁移...${NC}"
|
2026-03-05 11:35:50 +08:00
|
|
|
|
php artisan migrate --force
|
|
|
|
|
|
|
|
|
|
|
|
# 5. 优化
|
2026-04-02 15:02:12 +08:00
|
|
|
|
echo -e "${YELLOW}[5/8] 生产环境优化...${NC}"
|
2026-04-02 13:34:02 +08:00
|
|
|
|
# 注意:optimize 命令内部已经包含了 config:cache, route:cache, event:cache,此处无须多余处理
|
|
|
|
|
|
php artisan optimize:clear && php artisan optimize && php artisan view:cache
|
2026-03-05 11:35:50 +08:00
|
|
|
|
|
2026-04-02 15:02:12 +08:00
|
|
|
|
# 6. 重启 Horizon / 队列进程
|
|
|
|
|
|
echo -e "${YELLOW}[6/8] 重启 Horizon...${NC}"
|
|
|
|
|
|
php artisan horizon:terminate
|
|
|
|
|
|
|
2026-04-02 13:34:02 +08:00
|
|
|
|
# 6. 权限 (针对宝塔或Nginx+FPM环境的修正)
|
2026-03-05 11:48:07 +08:00
|
|
|
|
echo -e "${YELLOW}[7/7] 修复权限...${NC}"
|
2026-04-02 13:34:02 +08:00
|
|
|
|
# 将所有文件所属权变更为 Web 运行用户(如 www),防止 root 权限导致框架日志或缓存写入失败
|
|
|
|
|
|
chown -R www:www .
|
|
|
|
|
|
# 默认读写执行权限
|
|
|
|
|
|
chmod -R 755 .
|
|
|
|
|
|
# 针对 Laravel 必须具备写入权限的核心目录给予 775 权限
|
|
|
|
|
|
chmod -R 775 storage bootstrap/cache
|
2026-03-05 11:35:50 +08:00
|
|
|
|
|
|
|
|
|
|
echo -e "${GREEN}========================================${NC}"
|
|
|
|
|
|
echo -e "${GREEN} 🎉 更新成功!网站已恢复。 ${NC}"
|
|
|
|
|
|
echo -e "${GREEN}========================================${NC}"
|