diag
Build and Deploy Server / build (push) Failing after 5s

This commit is contained in:
gouki
2026-08-08 10:45:31 +00:00
parent 760dab78d8
commit f4c6495a46
4 changed files with 539 additions and 1 deletions
+132
View File
@@ -0,0 +1,132 @@
#!/bin/bash
# 自动部署脚本 - 部署到 1Panel Docker 容器
# 使用方法: ./deploy.sh <deploy_package_path>
# deploy_package_path: 部署包路径(如 /ci-artifacts/server-deploy-latest.tar.gz
set -e
DEPLOY_PACKAGE="$1"
CONTAINER_NAME="${CONTAINER_NAME:-lunar-server}"
DEPLOY_DIR="${DEPLOY_DIR:-/opt/lunar/production}"
BACKUP_DIR="${BACKUP_DIR:-/opt/lunar/backups}"
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查部署包是否存在
if [ ! -f "$DEPLOY_PACKAGE" ]; then
log_error "部署包不存在: $DEPLOY_PACKAGE"
exit 1
fi
log_info "开始自动部署..."
log_info "部署包: $DEPLOY_PACKAGE"
log_info "目标容器: $CONTAINER_NAME"
log_info "部署目录: $DEPLOY_DIR"
# 创建必要的目录
mkdir -p "$DEPLOY_DIR"
mkdir -p "$BACKUP_DIR"
# 备份当前版本
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="$BACKUP_DIR/backup_${TIMESTAMP}.tar.gz"
if [ -d "$DEPLOY_DIR/current" ]; then
log_info "备份当前版本到: $BACKUP_FILE"
tar -czf "$BACKUP_FILE" -C "$DEPLOY_DIR" current/ || log_warn "备份失败,继续部署"
fi
# 解压新版本
log_info "解压部署包..."
TEMP_DIR=$(mktemp -d)
tar -xzf "$DEPLOY_PACKAGE" -C "$TEMP_DIR"
# 检查解压后的目录结构
if [ ! -d "$TEMP_DIR/deploy" ]; then
log_error "部署包结构错误:缺少 deploy 目录"
rm -rf "$TEMP_DIR"
exit 1
fi
# 部署新版本
log_info "部署新版本..."
rm -rf "$DEPLOY_DIR/current"
mv "$TEMP_DIR/deploy" "$DEPLOY_DIR/current"
rm -rf "$TEMP_DIR"
# 设置权限
log_info "设置文件权限..."
chmod +x "$DEPLOY_DIR/current/bin/server" || log_warn "设置可执行权限失败"
# 检查 Docker 容器是否存在
if ! docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then
log_error "Docker 容器不存在: $CONTAINER_NAME"
log_info "请在 1Panel 中创建容器,或使用以下命令:"
echo ""
echo "docker run -d \\"
echo " --name $CONTAINER_NAME \\"
echo " -v $DEPLOY_DIR/current:/app \\"
echo " -p 8080:8080 \\"
echo " --restart unless-stopped \\"
echo " golang:1.22-bookworm \\"
echo " /app/bin/server"
echo ""
exit 1
fi
# 重启 Docker 容器
log_info "重启 Docker 容器: $CONTAINER_NAME"
if docker restart "$CONTAINER_NAME"; then
log_info "✅ 容器重启成功"
else
log_error "❌ 容器重启失败"
exit 1
fi
# 等待容器启动
log_info "等待容器启动..."
sleep 3
# 检查容器状态
if docker ps --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then
log_info "✅ 容器运行正常"
# 显示容器日志(最后 20 行)
log_info "容器日志(最后 20 行):"
docker logs --tail 20 "$CONTAINER_NAME"
else
log_error "❌ 容器未运行"
log_error "容器日志:"
docker logs --tail 50 "$CONTAINER_NAME"
exit 1
fi
# 清理旧备份(保留最近 5 个)
log_info "清理旧备份..."
ls -t "$BACKUP_DIR"/backup_*.tar.gz 2>/dev/null | tail -n +6 | xargs -r rm -f
log_info "✅ 部署完成!"
log_info "备份文件: $BACKUP_FILE"
log_info "部署目录: $DEPLOY_DIR/current"
# 输出部署信息(用于通知)
echo ""
echo "DEPLOY_SUCCESS=true"
echo "DEPLOY_TIME=$TIMESTAMP"
echo "CONTAINER_NAME=$CONTAINER_NAME"