db621b4fcb
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 2s
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 2s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m53s
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 1m17s
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 1m19s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
AI Code Review / AI Code Review (pull_request) Successful in 7m47s
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 8m44s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 10m37s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 29m54s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 28m18s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 27m55s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 24s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 7m43s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 40m20s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 1h36m46s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Failing after 4s
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
新增 deploy/gpu_worker/ 下 3 个 systemd 单元 + 3 个运维脚本: - musetalk-worker.service: MuseTalk 推理 API systemd 服务 - gpu-poll.service + gpu-poll.timer: 每30秒轮询Gitea最新commit - scripts/update-gpu-worker.sh: 备份→拉代码→重启→健康检查→失败回滚 - scripts/poll_and_update.sh: SHA比对触发update - scripts/setup-gpu-node.sh: 新节点一键初始化(apt依赖+目录+systemd+sudo免密+首次启动) - README.md 追加第七章「自动部署」说明服务架构/部署步骤/更新机制/日志/注意事项 不改动现有 gpu_worker.py/musetalk_server.py/requirements.txt/xiaoxia-gpu-worker.service/.env.example 不改动CI/Docker/镜像构建。脚本路径写死/home/ying,后续多节点再参数化。
63 lines
2.1 KiB
Bash
63 lines
2.1 KiB
Bash
#!/bin/bash
|
|
set -e
|
|
|
|
REPO_URL="https://git.xiaoxiajianji.com/xiaoxia/xiaoxia-saas/raw/branch/develop/deploy/gpu_worker"
|
|
MUSE_DIR="/home/ying/projects/MuseTalk"
|
|
WORKER_DIR="/opt/xiaoxia-gpu-worker"
|
|
LOG_FILE="/tmp/gpu-worker-update.log"
|
|
|
|
log() {
|
|
local NOW
|
|
NOW=$(date +"%Y-%m-%d %H:%M:%S")
|
|
echo "[$NOW] $*" | tee -a "$LOG_FILE"
|
|
}
|
|
|
|
log "========== start update =========="
|
|
|
|
BAK_SUFFIX=$(date +"%Y%m%d%H%M%S")
|
|
cp "$MUSE_DIR/musetalk_server.py" "$MUSE_DIR/musetalk_server.py.bak.$BAK_SUFFIX"
|
|
cp "$WORKER_DIR/gpu_worker.py" "$WORKER_DIR/gpu_worker.py.bak.$BAK_SUFFIX"
|
|
log "backup done ($BAK_SUFFIX)"
|
|
|
|
wget -q -O "$MUSE_DIR/musetalk_server.py" "$REPO_URL/musetalk_server.py"
|
|
log "musetalk_server.py updated"
|
|
|
|
wget -q -O "$WORKER_DIR/gpu_worker.py" "$REPO_URL/gpu_worker.py"
|
|
log "gpu_worker.py updated"
|
|
|
|
wget -q -O /tmp/gpu-requirements.txt "$REPO_URL/requirements.txt"
|
|
if [ -f "$WORKER_DIR/requirements.txt" ] && ! diff -q "$WORKER_DIR/requirements.txt" /tmp/gpu-requirements.txt > /dev/null 2>&1; then
|
|
log "requirements changed, updating..."
|
|
cp /tmp/gpu-requirements.txt "$WORKER_DIR/requirements.txt"
|
|
"$WORKER_DIR/venv/bin/pip" install -r "$WORKER_DIR/requirements.txt" -q
|
|
log "pip install done"
|
|
else
|
|
log "requirements no change, skip pip"
|
|
fi
|
|
|
|
sudo systemctl restart musetalk-worker
|
|
log "musetalk restarted"
|
|
sleep 5
|
|
|
|
sudo systemctl restart xiaoxia-gpu-worker
|
|
log "gpu-worker restarted"
|
|
sleep 8
|
|
|
|
HEALTH=$(curl -s http://127.0.0.1:7861/health 2>/dev/null)
|
|
if echo "$HEALTH" | grep -q "healthy\|ok"; then
|
|
log "health check OK"
|
|
log "========== update done =========="
|
|
exit 0
|
|
else
|
|
log "health check FAILED, rolling back..."
|
|
LATEST_MUSE_BAK=$(ls -t "$MUSE_DIR/musetalk_server.py.bak."* 2>/dev/null | head -1)
|
|
LATEST_WORKER_BAK=$(ls -t "$WORKER_DIR/gpu_worker.py.bak."* 2>/dev/null | head -1)
|
|
[ -n "$LATEST_MUSE_BAK" ] && cp "$LATEST_MUSE_BAK" "$MUSE_DIR/musetalk_server.py"
|
|
[ -n "$LATEST_WORKER_BAK" ] && cp "$LATEST_WORKER_BAK" "$WORKER_DIR/gpu_worker.py"
|
|
sudo systemctl restart musetalk-worker
|
|
sleep 5
|
|
sudo systemctl restart xiaoxia-gpu-worker
|
|
log "rolled back"
|
|
exit 1
|
|
fi
|