diff --git a/deploy_code.sh b/deploy_code.sh index f97048d..511b533 100644 --- a/deploy_code.sh +++ b/deploy_code.sh @@ -12,21 +12,21 @@ echo "🚀 开始自动化增量部署 (含自我修复与依赖瘦身)" echo "===================================================" # 1. 远端备份与环境急救 -echo "[1/4] 正在服务器上急救环境并备份旧代码 (可能需要输入密码)..." -ssh -t $SERVER "sudo mkdir -p $REMOTE_BACKUP_DIR && \ +echo "[1/4] 正在服务器上备份旧代码 (全程免密)..." +ssh $SERVER "mkdir -p $REMOTE_BACKUP_DIR && \ cd $REMOTE_DIR && \ echo '>> 检查并修复缺失目录 (防止 tar 崩溃)...' && \ - sudo mkdir -p inventory-backend inventory-web models_prod && \ + mkdir -p inventory-backend inventory-web models_prod && \ echo '>> 执行代码备份...' && \ # ★ 排除大目录/模型(与本地打包一致):inventory-backend/models 含 605MB onnx,不排除会导致 gzip 卡死 - sudo tar -czf $REMOTE_BACKUP_DIR/code_backup.tar.gz \ + tar -czf $REMOTE_BACKUP_DIR/code_backup.tar.gz \ --exclude='inventory-backend/models' \ --exclude='inventory-backend/uploads' \ --exclude='inventory-backend/pgdata' \ --exclude='inventory-backend/pgdata_docker' \ inventory-backend inventory-web docker-compose.prod.yml && \ echo '>> 备份 SSL 证书...' && \ - (sudo tar -czf $REMOTE_BACKUP_DIR/ssl_backup.tar.gz ssl 2>/dev/null || echo '⚠️ ssl 目录不存在,跳过') && \ + (tar -czf $REMOTE_BACKUP_DIR/ssl_backup.tar.gz ssl 2>/dev/null || echo '⚠️ ssl 目录不可读(属主 root)或不存在,跳过该备份') && \ echo '>> 检查 CLIP 模型文件...' && \ if [ ! -f models_prod/clip_vision.onnx ]; then \ echo '⚠️ 警告: models_prod/clip_vision.onnx 不存在!拍照识图功能将无法使用。'; \ @@ -36,7 +36,7 @@ ssh -t $SERVER "sudo mkdir -p $REMOTE_BACKUP_DIR && \ fi && \ echo '>> 执行清理:仅保留 data_copy 下最新的 2 个备份...' && \ cd $REMOTE_BACKUP_BASE && \ - sudo sh -c 'ls -dt */ 2>/dev/null | tail -n +3 | xargs -I {} rm -rf {} || true'" + sh -c 'ls -dt */ 2>/dev/null | tail -n +3 | xargs -I {} rm -rf {} || true'" if [ $? -ne 0 ]; then echo "❌ 服务器备份或清理失败,终止部署!"; exit 1; fi @@ -84,21 +84,21 @@ if [ $? -ne 0 ]; then fi # 4. 服务器执行替换与重启 -echo "[4/4] 正在生产环境执行热更新 (可能需要输入密码)..." -ssh -t $SERVER "cd $REMOTE_DIR && \ +echo "[4/4] 正在生产环境执行热更新 (全程免密)..." +ssh $SERVER "cd $REMOTE_DIR && \ echo '>> 移除历史旧目录...' && \ - sudo rm -rf inventory-backend_old inventory-web_old && \ + rm -rf inventory-backend_old inventory-web_old && \ echo '>> 备份当前目录为 old...' && \ - (sudo mv inventory-backend inventory-backend_old 2>/dev/null || true) && \ - (sudo mv inventory-web inventory-web_old 2>/dev/null || true) && \ + (mv inventory-backend inventory-backend_old 2>/dev/null || true) && \ + (mv inventory-web inventory-web_old 2>/dev/null || true) && \ echo '>> 部署新代码...' && \ - sudo mv /tmp/deploy.tar.gz . && \ - sudo tar -xzf deploy.tar.gz && \ + mv /tmp/deploy.tar.gz . && \ + tar -xzf deploy.tar.gz && \ echo '>> 重启 Docker 容器...' && \ - sudo docker compose -f docker-compose.prod.yml up -d --build backend frontend && \ + docker compose -f docker-compose.prod.yml up -d --build backend frontend && \ echo '>> 验证 nginx 代理配置...' && \ sleep 5 && \ - if sudo docker exec inventory_ui_prod grep -q "inventory_api_prod" /etc/nginx/conf.d/default.conf; then \ + if docker exec inventory_ui_prod grep -q "inventory_api_prod" /etc/nginx/conf.d/default.conf; then \ echo '✅ nginx 代理已指向 inventory_api_prod'; \ else \ echo '⚠️ 警告: nginx 代理仍是 backend,可能出现 /api/ 404!请检查 nginx.conf'; \ @@ -110,7 +110,7 @@ ssh -t $SERVER "cd $REMOTE_DIR && \ else \ echo "✅ API 连通性正常 HTTP=$API_CODE"; \ fi && \ - sudo rm deploy.tar.gz" + rm deploy.tar.gz" if [ $? -ne 0 ]; then echo "❌ 远端启动失败,请检查 Docker 日志!" @@ -121,4 +121,4 @@ else fi # 扫尾清理本地文件 -rm -f deploy.tar.gz \ No newline at end of file +rm -f deploy.tar.gz