first commit
Some checks failed
Build and Push Docker Image / build (push) Has been cancelled
Sync to CNB / sync (push) Has been cancelled
Delete old workflow runs / del_runs (push) Has been cancelled
Upstream Sync / Sync latest commits from upstream repo (push) Has been cancelled

This commit is contained in:
2026-01-30 16:57:44 +08:00
commit 3d175d75af
119 changed files with 35834 additions and 0 deletions

290
deploy.sh Executable file
View File

@@ -0,0 +1,290 @@
#!/bin/bash
# 信奥工具箱 - 服务器部署脚本
set -e
# 配置变量
REGISTRY="registry.cn-hangzhou.aliyuncs.com"
NAMESPACE="nick-x86"
IMAGE_NAME="i-tools"
CONTAINER_NAME="i-tools"
PORT=3000
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 日志函数
log_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
log_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 显示横幅
show_banner() {
echo -e "${BLUE}"
echo "================================================="
echo " 信奥工具箱 - 服务器部署脚本"
echo "================================================="
echo -e "${NC}"
}
# 检查Docker是否安装
check_docker() {
if ! command -v docker &> /dev/null; then
log_error "Docker 未安装或不在 PATH 中"
exit 1
fi
if ! docker info &> /dev/null; then
log_error "Docker 守护进程未运行"
exit 1
fi
log_success "Docker 环境检查通过"
}
# 检查是否已登录阿里云镜像仓库
check_registry_login() {
log_info "检查阿里云镜像仓库登录状态..."
if ! docker system info | grep -q "Registry:"; then
log_warning "建议先登录阿里云镜像仓库"
echo "请运行以下命令登录:"
echo "docker login --username=<用户名> $REGISTRY"
read -p "是否已经登录?(y/N): " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
log_error "请先登录阿里云镜像仓库后再运行此脚本"
exit 1
fi
fi
log_success "镜像仓库登录状态检查通过"
}
# 拉取最新镜像
pull_image() {
local image_name="$REGISTRY/$NAMESPACE/$IMAGE_NAME:latest"
log_info "拉取最新镜像: $image_name"
if docker pull "$image_name"; then
log_success "镜像拉取成功"
else
log_error "镜像拉取失败"
exit 1
fi
}
# 停止并删除旧容器
stop_old_container() {
if docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then
log_info "停止并删除旧容器: $CONTAINER_NAME"
docker stop "$CONTAINER_NAME" 2>/dev/null || true
docker rm "$CONTAINER_NAME" 2>/dev/null || true
log_success "旧容器已清理"
else
log_info "未找到旧容器,跳过清理步骤"
fi
}
# 启动新容器
start_container() {
local image_name="$REGISTRY/$NAMESPACE/$IMAGE_NAME:latest"
local run_opts=(
-d
--name "$CONTAINER_NAME"
--restart unless-stopped
-p "$PORT:3000"
-e NODE_ENV=production
-e PORT=3000
)
# 若存在 .env 则传入容器(用于测试点生成-大模型等配置)
if [ -f .env ]; then
log_info "使用 .env 注入环境变量(含 ENABLE_AI/DASHSCOPE_API_KEY 等)"
run_opts+=(--env-file .env)
else
log_warning "未找到 .env测试点生成将使用本地智能算法不调用大模型"
fi
log_info "启动新容器: $CONTAINER_NAME"
log_info "端口映射: $PORT:3000"
if docker run "${run_opts[@]}" "$image_name"; then
log_success "容器启动成功"
else
log_error "容器启动失败"
exit 1
fi
}
# 使用 Docker Compose 部署
deploy_with_compose() {
log_info "使用 Docker Compose 部署..."
if [ ! -f "docker-compose.yml" ]; then
log_error "未找到 docker-compose.yml 文件"
exit 1
fi
# 拉取最新镜像
docker-compose pull
# 停止并删除旧容器,启动新容器
docker-compose up -d
log_success "Docker Compose 部署完成"
}
# 显示部署信息
show_deployment_info() {
local image_name="$REGISTRY/$NAMESPACE/$IMAGE_NAME:latest"
echo -e "${GREEN}"
echo "================================================="
echo " 部署成功!"
echo "================================================="
echo -e "${NC}"
echo "容器信息:"
echo " 容器名称: $CONTAINER_NAME"
echo " 镜像地址: $image_name"
echo " 访问地址: http://localhost:$PORT"
echo ""
echo "常用命令:"
echo " 查看日志: docker logs -f $CONTAINER_NAME"
echo " 停止服务: docker stop $CONTAINER_NAME"
echo " 启动服务: docker start $CONTAINER_NAME"
echo " 重启服务: docker restart $CONTAINER_NAME"
echo " 查看状态: docker ps | grep $CONTAINER_NAME"
echo ""
if [ ! -f .env ]; then
echo "提示: 在部署目录创建 .env 并配置 ENABLE_AI、DASHSCOPE_API_KEY 可启用测试点生成-大模型。"
echo " 参考项目根目录 .env.example"
echo ""
fi
}
# 解析命令行参数
parse_args() {
USE_COMPOSE=false
PORT_ARG=""
while [[ $# -gt 0 ]]; do
case $1 in
--compose)
USE_COMPOSE=true
shift
;;
-p|--port)
if [ -z "$2" ]; then
log_error "-p/--port 参数需要指定端口号"
exit 1
fi
PORT_ARG="$2"
shift 2
;;
-h|--help)
show_help
exit 0
;;
*)
log_error "未知参数: $1"
show_help
exit 1
;;
esac
done
if [ ! -z "$PORT_ARG" ]; then
PORT="$PORT_ARG"
fi
}
# 帮助信息
show_help() {
echo "信奥工具箱 - 服务器部署脚本"
echo ""
echo "用法:"
echo " $0 [选项]"
echo ""
echo "选项:"
echo " --compose 使用 Docker Compose 部署(推荐)"
echo " -p, --port <端口> 指定主机端口(默认: 3000"
echo " -h, --help 显示此帮助信息"
echo ""
echo "示例:"
echo " $0 # 使用默认端口 3000 部署"
echo " $0 -p 8080 # 使用端口 8080 部署"
echo " $0 --compose # 使用 Docker Compose 部署"
echo ""
echo "环境要求:"
echo " - Docker已安装并运行"
echo " - 已登录阿里云镜像仓库"
echo ""
echo "测试点生成-大模型(可选):"
echo " 在部署目录创建 .env参考 .env.example 配置:"
echo " ENABLE_AI=true"
echo " DASHSCOPE_API_KEY=sk-xxx"
echo " QWEN_MODEL=qwen-max"
echo " 未配置时测试点生成使用本地智能算法。"
echo ""
echo "登录命令:"
echo " docker login --username=<用户名> $REGISTRY"
}
# 主函数
main() {
show_banner
# 解析命令行参数
parse_args "$@"
# 环境检查
check_docker
check_registry_login
# 部署
if [ "$USE_COMPOSE" = true ]; then
deploy_with_compose
else
pull_image
stop_old_container
start_container
fi
# 等待容器启动
log_info "等待容器启动..."
sleep 3
# 检查容器状态
if docker ps --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then
log_success "容器运行正常"
else
log_warning "容器可能未正常启动,请检查日志: docker logs $CONTAINER_NAME"
fi
# 显示结果
show_deployment_info
log_success "部署完成!"
}
# 脚本入口
main "$@"