Bella OpenAPI 启动与部署详情
本文档详细介绍了 Bella OpenAPI 的启动和部署流程,包括前提条件、启动服务、环境变量配置、服务管理和系统初始化等内容。
目录
项目概述
Bella OpenAPI是一个综合性的AI开放API平台,提供以下主要组件:
-
项目结构:
api/
: 后端API服务,基于Spring Boot框架web/
: 前端Web应用,基于React和Next.js
-
技术栈:
- 后端:Java、Spring Boot、MySQL、Redis
- 前端:React、Next.js
- 部署:Docker、Docker Compose,需要 Docker Compose 1.13.0+ 版本
- 网关:Nginx(可选,使用脚本启动时会自动在容器中创建)
前提条件
- 安装 Docker
- 安装 Docker Compose
- 执行目录必须在bella-openapi项目的根目录下
启动服务
启动服务时通常需要配置用户登录,方法见:GitHub OAuth配置攻略
./start.sh [选项] (如果本地不存在镜像,会拉取远端镜像)
注意:
- windows下请使用git bash工具执行命令
- 启动脚本只支持部分配置参数,如果需要配置更多参数,可以修改docker-compose.yml文件或修改应用的配置文件
选项:
-b, --build
: 重新构建服务-r, --rebuild
: 强制重新构建服务(不使用缓存)-e, --env ENV
: 指定环境(dev, test, prod)-h, --help
: 显示帮助信息--skip-auth
: 跳过授权步骤--server URL
: 配置服务域名--github-oauth CLIENT_ID:CLIENT_SECRET
: 配置GitHub OAuth登录--google-oauth CLIENT_ID:CLIENT_SECRET
: 配置Google OAuth登录--cas-server URL
: 配置CAS服务器URL--cas-login URL
: 配置CAS登录URL--proxy-host HOST
: 配置代理服务器主机名或IP地址--proxy-port PORT
: 配置代理服务器端口--proxy-type TYPE
: 配置代理类型(socks 或 http)--proxy-domains DOMAINS
: 配置需要通过代理访问的域名,多个域名用逗号分隔--version VERSION
: 指定镜像版本--push
: 构建后推送镜像到仓库--registry username
: 指定docker仓库 (username)--restart-web
: 仅重启前端服务--restart-api
: 仅重启后端服务--nginx-port PORT
: 指定Nginx服务映射到的端口,默认为80--update-image
: 从远程仓库更新镜像,即使本地已存在--service CONTAINER_NAME:DOMAIN:PORT
: 配置额外 服务的Nginx转发,格式为服务名:域名:端口,多个服务用逗号分隔,只支持同一docker网络下的服务,使用CONTAINER_NAME转发
示例:
./start.sh # 启动服务,不重新构建,如果本地不存在镜像,会拉取远端镜像
./start.sh -b # 启动服务并重新构建(会使用缓存,增量修改编译较快)
./start.sh -r # 启动服务并强制重新构建(不使用缓存)
./start.sh -e test # 以测试环境启动服务
./start.sh --skip-auth # 启动服务但跳过授权步骤
./start.sh --server http://example.com #配置服务域名
./start.sh --proxy-host 127.0.0.1 --proxy-port 8118 --proxy-type http --proxy-domains github.com,google.com # 配置HTTP代理
./start.sh --proxy-host proxy.com --proxy-port 80 --proxy-type socks # 配置SOCKS代理,不指定特定域名
# 没有修 改源码,只想拉取远端镜像,并配置登录方式和服务域名,通常使用以下命令即可:
#不配置域名,通常用于本地部署:
./start.sh --github-oauth ${clientId}:${secret} --google-oauth ${clientId}:${secret} #配置github和google的oauth登录
#配置域名,通常用于服务端部署:
./start.sh --github-oauth ${clientId}:${secret} --google-oauth ${clientId}:${secret} --server http://example.com #配置github和google的oauth登录以及服务域名
#配置域名和代理,用于需要通过代理访问外部服务的环境:
./start.sh --github-oauth ${clientId}:${secret} --google-oauth ${clientId}:${secret} --server http://example.com --proxy-host 127.0.0.1 --proxy-port 8118 --proxy-type http --proxy-domains github.com,google.com
./start.sh --cas-server https://cas.example.com --cas-login https://cas.example.com/login --server http://example.com #配置CAS登录和服务域名,如果既配置cas登录又配置oauth登录,登录时会使用cas登录
docker-compose环境变量配置
环境变量优先级
在Docker环境中,环境变量的优先级从高到低为:
- docker-compose.yml中的environment设置
- Dockerfile中的ENV指令
- .env文件、 yaml文件
web构建时环境变量
构建时环境变量通过docker-compose.yml的args部分传递给Dockerfile:
build:
context: ./web
args:
- NODE_ENV=development
- DEPLOY_ENV=development
- SKIP_INSTALL=false
这些变量会影响应用的构建过程,例如Next.js会根据NODE_ENV的值加载不同的环境配置文件(.env.development, .env.production等)。
web运行时环境变量
运行时环境变量通过docker-compose.yml的environment部分设置:
environment:
- NODE_ENV=development
- DEPLOY_ENV=development
这些变量会在容器运行时生效,但对于已经构建好的静态文件,只有以NEXT_PUBLIC_开头的环境变量才能在客户端访问。
停止服务
./stop.sh
或者直接使用Docker Compose命令:
docker-compose down
查看日志
# 查看所有服务的日志
docker-compose logs
# 查看特定服务的日志
docker-compose logs api # 后端API服务
docker-compose logs web # 前端Web应用
docker-compose logs mysql
docker-compose logs redis
# 实时查看日志
docker-compose logs -f
重启服务
可以使用start.sh脚本重启特定服务:
# 重启前端服务
./start.sh --restart-web
# 重启后端服务
./start.sh --restart-api --github-oauth ${clientId}:${secret} --google-oauth ${clientId}:${secret} --server http://example.com
也可以直接使用Docker Compose命令:
# 重启前端服务
docker-compose restart web
# 查看前端日志
docker-compose logs -f web
系统初始化
生成系统API Key
系统初始化时需要生成一个系统级别的API Key,用于管理和访问所有API资源。我们提供了一个脚本来自动生成系统API Key并将其写入数据库。 ./start.sh启动服务时会自动生成。如需手动生成,请使用./generate-system-apikey.sh脚本。
使用方法
直接在Docker环境中执行
./generate-system-apikey.sh
使用自定义数据库连接参数
DB_USER=bella_user DB_PASS=123456 ./generate-system-apikey.sh
脚本功能
- 检查数据库中是否已存在系统API Key
- 如果不存在,生成一个新的系统API Key并写入数据库
- 如果已存在,显示现有系统API Key的信息
- 将API Key信息保存到
system-apikey.txt
文件中
重要说明
- 系统API Key具有最高权限,请妥善保管
- API Key只会在生成时显示一次,之后只能看到掩码版本
- 如果丢失API Key,需要重新生成一个新的,如果是系统AK,需要将其设置为失效,并重新生成
- 生成的API Key具有
all
角色,可以访问所有端点 - 脚本需要在Docker环境中运行,会自动连接到MySQL容器
示例输出
正在生成系统API key...
检查数据库中是否已存在系统API key...
在数据库中插入新的系统API key...
成功生成并插入系统API key到数据库。
API Key Code: ak-026e84f5-8a1c-4243-a800-d44581f0f1b7
API Key: 9be9d54d-d4ae-4510-8819-a62a4e69e57b
API Key SHA-256: d58ed6447aa8da22d6fa3064d242f8f8dd74a6df4a1663084f4003b2d559b9ea
API Key Display: 9b****e57b
API key详细信息已保存到 system-apikey.txt
重要: 请妥善保管此信息,API key只会显示一次!
完成。
授权管理员
系统初始化后,需要授权管理员用户。管理员用户可以管理API Key、用户权限等系统资源。
授权流程
-
首先启动服务并生成系统API Key
./start.sh
如果新生成系统ak时会自动进入管理员授权流程,如果不想在启动时进行管理员授权(仍会检查系统ak是否需要生成),可以使用
--skip-auth
参数:./start.sh --skip-auth
注意:如果系统中已存在API Key,脚本会自动跳过管理员授权步骤。只有在首次生成新的API Key时才会询问是否需要授权管理员。
-
启动脚本会询问您是否需要授权管理员
- 如果选择"是",脚本会引导您完成整个授权流程
- 如果选择"否",您可以稍后手动运行授权脚本
- 如果使用了
--skip-auth
参数,则会跳过询问步骤
-
按照提示登录前端页面获取用户ID或邮箱
- 访问 http://localhost:3000
- 使用第三方账号登录(如Google、GitHub等)
- 点击右上角头像,查看个人信息获取用户ID或邮箱
-
授权脚本会自动启动,根据提示输入用户信息
- 可以选择使用用户ID或邮箱进行授权
- 按照脚本提示输入相关信息
-
如果您稍后需要授权管理员,可以随时运行:
./authorize-admin.sh
-
授权后点击头像登出系统,重新登录即可拥有管理员权限