ai_learn_node/scripts/deploy-docker.sh
2026-01-16 14:13:44 +08:00

135 lines
3.6 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Docker/Podman 部署脚本 - 在远程服务器上执行
# 用法: ./deploy-docker.sh <部署目录>
set -e
DEPLOY_DIR=${1:-/opt/nginx/html/ai/current}
DOCKER_DIR="$DEPLOY_DIR/docker"
echo "开始容器部署到: $DEPLOY_DIR"
# 检查部署目录是否存在
if [ ! -d "$DEPLOY_DIR" ]; then
echo "错误: 部署目录不存在: $DEPLOY_DIR"
exit 1
fi
# 检测容器运行时(优先使用 Podman然后是 Docker
CONTAINER_CMD=""
COMPOSE_CMD=""
if command -v podman &> /dev/null; then
CONTAINER_CMD="podman"
echo "检测到 Podman"
# 检查 podman-compose 或 podman compose
if command -v podman-compose &> /dev/null; then
COMPOSE_CMD="podman-compose"
elif podman compose version &> /dev/null 2>&1; then
COMPOSE_CMD="podman compose"
else
echo "错误: podman-compose 未安装"
echo "提示: 请安装 podman-compose 或 podman-compose 插件"
echo "安装方法: pip install podman-compose 或 dnf install podman-compose"
exit 1
fi
elif command -v docker &> /dev/null; then
CONTAINER_CMD="docker"
echo "检测到 Docker"
# 检查 docker-compose 或 docker compose
if command -v docker-compose &> /dev/null; then
COMPOSE_CMD="docker-compose"
elif docker compose version &> /dev/null 2>&1; then
COMPOSE_CMD="docker compose"
else
echo "错误: docker-compose 未安装"
echo "提示: 请安装 docker-compose 或确保 Docker 版本 >= 20.10"
exit 1
fi
else
echo "错误: 未找到 Podman 或 Docker"
exit 1
fi
echo "使用容器命令: $CONTAINER_CMD"
echo "使用 Compose 命令: $COMPOSE_CMD"
# 进入 Docker 目录
if [ ! -d "$DOCKER_DIR" ]; then
echo "错误: Docker 配置目录不存在: $DOCKER_DIR"
exit 1
fi
cd "$DOCKER_DIR" || exit 1
# 确定 compose 文件路径podman-compose 默认查找 docker-compose.yml
COMPOSE_FILE="docker-compose.yml"
if [ ! -f "$COMPOSE_FILE" ]; then
# 如果不存在,尝试其他可能的文件名
if [ -f "docker-compose.production.yml" ]; then
COMPOSE_FILE="docker-compose.production.yml"
elif [ -f "compose.yml" ]; then
COMPOSE_FILE="compose.yml"
else
echo "错误: 未找到 docker-compose.yml 文件"
echo "当前目录: $(pwd)"
echo "文件列表:"
ls -la || true
exit 1
fi
fi
echo "使用 Compose 文件: $COMPOSE_FILE"
# 停止旧容器(如果存在)
echo "停止旧容器..."
if [ "$COMPOSE_FILE" = "docker-compose.yml" ]; then
$COMPOSE_CMD down || true
else
$COMPOSE_CMD -f "$COMPOSE_FILE" down || true
fi
# 构建并启动服务
echo "构建并启动容器服务..."
if [ "$COMPOSE_FILE" = "docker-compose.yml" ]; then
$COMPOSE_CMD up -d --build
else
$COMPOSE_CMD -f "$COMPOSE_FILE" up -d --build
fi
# 等待服务启动
echo "等待服务启动..."
sleep 5
# 检查服务状态
echo "检查服务状态..."
$COMPOSE_CMD ps
# 检查容器健康状态
echo "检查容器健康状态..."
if $CONTAINER_CMD ps | grep -q ai-learning-nginx; then
echo "✅ Nginx 容器运行中"
else
echo "❌ Nginx 容器未运行"
exit 1
fi
if $CONTAINER_CMD ps | grep -q ai-learning-backend; then
echo "✅ Backend 容器运行中"
else
echo "❌ Backend 容器未运行"
exit 1
fi
echo ""
echo "=========================================="
echo "容器部署完成!"
echo "=========================================="
echo "前端访问: http://180.76.180.105:8080"
echo "后端 API: http://180.76.180.105:3001"
echo "健康检查: http://180.76.180.105:8080/health"
echo "=========================================="