NarratoAI/docker-deploy.sh
linyq ced37047aa refactor(docker): 优化docker配置和部署脚本
重构Docker相关配置,包括:
- 更新.dockerignore文件,增加更多忽略规则
- 优化requirements.txt依赖管理
- 新增Makefile提供常用命令
- 重构docker-compose.yml配置
- 增强docker-entrypoint.sh功能
- 改进Dockerfile多阶段构建
- 新增docker-deploy.sh一键部署脚本
2025-08-16 01:52:28 +08:00

185 lines
3.8 KiB
Bash
Executable File

#!/bin/bash
# NarratoAI Docker 一键部署脚本
set -e
# 颜色定义
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m'
# 日志函数
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 显示帮助信息
show_help() {
cat << EOF
NarratoAI Docker 一键部署脚本
使用方法:
$0 [选项]
选项:
-h, --help 显示此帮助信息
-b, --build 强制重新构建镜像
--no-cache 构建时不使用缓存
示例:
$0 # 标准部署
$0 -b # 重新构建并部署
$0 --no-cache # 无缓存构建
EOF
}
# 检查系统要求
check_requirements() {
log_info "检查系统要求..."
if ! command -v docker &> /dev/null; then
log_error "Docker 未安装,请先安装 Docker"
exit 1
fi
if ! command -v docker-compose &> /dev/null && ! docker compose version &> /dev/null; then
log_error "Docker Compose 未安装,请先安装 Docker Compose"
exit 1
fi
if ! docker info &> /dev/null; then
log_error "Docker 服务未运行,请启动 Docker"
exit 1
fi
}
# 检查配置文件
check_config() {
if [ ! -f "config.toml" ]; then
if [ -f "config.example.toml" ]; then
log_warning "config.toml 不存在,复制示例配置文件"
cp config.example.toml config.toml
log_info "请编辑 config.toml 文件配置您的 API 密钥"
else
log_error "未找到配置文件模板"
exit 1
fi
fi
}
# 构建镜像
build_image() {
log_info "构建 Docker 镜像..."
local build_args=""
if [ "$NO_CACHE" = "true" ]; then
build_args="--no-cache"
fi
docker-compose build $build_args
}
# 启动服务
start_services() {
log_info "启动 NarratoAI 服务..."
docker-compose down 2>/dev/null || true
docker-compose up -d
}
# 等待服务就绪
wait_for_service() {
log_info "等待服务就绪..."
local max_attempts=30
local attempt=1
while [ $attempt -le $max_attempts ]; do
if curl -f http://localhost:8501/_stcore/health &>/dev/null; then
log_info "服务已就绪"
return 0
fi
sleep 2
((attempt++))
done
log_warning "服务启动超时,请检查日志"
return 1
}
# 显示部署信息
show_deployment_info() {
echo
log_info "NarratoAI 部署完成!"
echo "访问地址: http://localhost:8501"
echo
echo "常用命令:"
echo " 查看日志: docker-compose logs -f"
echo " 停止服务: docker-compose down"
echo " 重启服务: docker-compose restart"
}
# 主函数
main() {
FORCE_BUILD=false
NO_CACHE=false
# 解析命令行参数
while [[ $# -gt 0 ]]; do
case $1 in
-h|--help)
show_help
exit 0
;;
-b|--build)
FORCE_BUILD=true
shift
;;
--no-cache)
NO_CACHE=true
shift
;;
*)
log_error "未知选项: $1"
show_help
exit 1
;;
esac
done
# 执行部署流程
log_info "开始 NarratoAI Docker 部署..."
check_requirements
check_config
if [ "$FORCE_BUILD" = "true" ] || ! docker images | grep -q "narratoai"; then
build_image
fi
start_services
if wait_for_service; then
show_deployment_info
else
log_error "部署失败,请检查日志"
docker-compose logs --tail=20
exit 1
fi
}
# 执行主函数
main "$@"