完善部署脚本的 Reverb 重启流程
This commit is contained in:
+37
-8
@@ -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 .
|
||||
# 默认读写执行权限
|
||||
|
||||
Reference in New Issue
Block a user