完善部署脚本的 Reverb 重启流程

This commit is contained in:
pllx
2026-04-29 10:39:07 +08:00
parent 5962d6d2b3
commit 82d762d070
+37 -8
View File
@@ -17,13 +17,13 @@ echo -e "${BLUE}========================================${NC}"
cd "$PROJECT_ROOT" || { echo -e "${RED}❌ 无法进入项目目录:$PROJECT_ROOT${NC}"; exit 1; }
# 1. Git Pull(先重置 lock 文件,避免服务器环境差异导致冲突)
echo -e "${YELLOW}[1/7] 拉取代码...${NC}"
echo -e "${YELLOW}[1/8] 拉取代码...${NC}"
git checkout -- composer.lock package-lock.json 2>/dev/null || true
git fetch origin && git pull origin master
if [ $? -ne 0 ]; then echo -e "${RED}❌ Git 失败${NC}"; exit 1; fi
# 2. Composer Install (关键检查点)
echo -e "${YELLOW}[2/7] 安装依赖 (Composer)...${NC}"
echo -e "${YELLOW}[2/8] 安装依赖 (Composer)...${NC}"
composer install --no-dev --optimize-autoloader --classmap-authoritative --no-interaction
COMPOSER_EXIT_CODE=$?
@@ -68,14 +68,14 @@ if [ $? -ne 0 ]; then
fi
# 3. 前端构建
echo -e "${YELLOW}[3/7] 前端构建 (npm run build)...${NC}"
echo -e "${YELLOW}[3/8] 前端构建 (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}"
# 4. 数据库迁移
echo -e "${YELLOW}[5/7] 数据库迁移...${NC}"
echo -e "${YELLOW}[4/8] 数据库迁移...${NC}"
php artisan migrate --force
# 5. 优化
@@ -87,8 +87,37 @@ php artisan optimize:clear && php artisan optimize && php artisan view:cache
echo -e "${YELLOW}[6/8] 重启 Horizon...${NC}"
php artisan horizon:terminate
# 7. 重载 PHP-FPM / opcache,避免 Web 进程继续使用旧的 autoload 缓存
echo -e "${YELLOW}[7/8] 重载 PHP-FPM...${NC}"
# 7. 重启 Reverb,确保长驻 WebSocket 进程加载最新代码和配置
echo -e "${YELLOW}[7/8] 重启 Reverb...${NC}"
REVERB_RESTARTED=0
# Laravel 官方推荐:部署后使用 reverb:restart 优雅重启长驻进程
php artisan reverb:restart >/dev/null 2>&1
if [ $? -eq 0 ]; then
REVERB_RESTARTED=1
echo -e "${GREEN}✅ 已执行 php artisan reverb:restart。${NC}"
fi
# 若线上通过 Supervisor 托管 reverb:start,继续尝试重启常见进程名
if command -v supervisorctl >/dev/null 2>&1; then
SUPERVISOR_REVERB_TARGETS=$(supervisorctl status 2>/dev/null | awk '/reverb|broadcast|websocket/ {print $1}')
if [ -n "$SUPERVISOR_REVERB_TARGETS" ]; then
while IFS= read -r target; do
if [ -n "$target" ]; then
supervisorctl restart "$target" >/dev/null 2>&1 || true
REVERB_RESTARTED=1
fi
done <<< "$SUPERVISOR_REVERB_TARGETS"
echo -e "${GREEN}✅ 已尝试重启 Supervisor 托管的 Reverb 相关进程。${NC}"
fi
fi
if [ "$REVERB_RESTARTED" -eq 0 ]; then
echo -e "${YELLOW}⚠️ 未检测到可自动重启的 Reverb 进程,请手动确认 reverb:start / Supervisor 状态。${NC}"
fi
# 8. 重载 PHP-FPM / opcache,避免 Web 进程继续使用旧的 autoload 缓存
echo -e "${YELLOW}[8/8] 重载 PHP-FPM...${NC}"
PHP_FPM_RELOADED=0
if command -v systemctl >/dev/null 2>&1; then
for svc in php-fpm php-fpm-84 php-fpm-83 php-fpm-82 php84-php-fpm php83-php-fpm php82-php-fpm; do
@@ -110,8 +139,8 @@ else
echo -e "${YELLOW}⚠️ 未识别到 PHP-FPM 服务,请在面板中手动重启当前站点使用的 PHP。${NC}"
fi
# 6. 权限 (针对宝塔或Nginx+FPM环境的修正)
echo -e "${YELLOW}[8/8] 修复权限...${NC}"
# 权限修正(针对宝塔或 Nginx + FPM 环境
echo -e "${YELLOW}[后处理] 修复权限...${NC}"
# 将所有文件所属权变更为 Web 运行用户(如 www),防止 root 权限导致框架日志或缓存写入失败
chown -R www:www .
# 默认读写执行权限