|
#!/bin/bash |
|
|
|
|
|
|
|
|
|
set -e |
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" |
|
cd "$SCRIPT_DIR" |
|
|
|
|
|
RED='\033[0;31m' |
|
GREEN='\033[0;32m' |
|
YELLOW='\033[1;33m' |
|
BLUE='\033[0;34m' |
|
NC='\033[0m' |
|
|
|
|
|
print_info() { |
|
echo -e "${BLUE}ℹ️ $1${NC}" |
|
} |
|
|
|
print_success() { |
|
echo -e "${GREEN}✅ $1${NC}" |
|
} |
|
|
|
print_warning() { |
|
echo -e "${YELLOW}⚠️ $1${NC}" |
|
} |
|
|
|
print_error() { |
|
echo -e "${RED}❌ $1${NC}" |
|
} |
|
|
|
|
|
check_executable() { |
|
if [ ! -f "./jetbrains-ai-proxy" ]; then |
|
print_error "可执行文件 './jetbrains-ai-proxy' 不存在" |
|
print_info "请先编译项目: go build -o jetbrains-ai-proxy" |
|
exit 1 |
|
fi |
|
|
|
if [ ! -x "./jetbrains-ai-proxy" ]; then |
|
print_info "设置可执行权限..." |
|
chmod +x ./jetbrains-ai-proxy |
|
fi |
|
} |
|
|
|
|
|
check_configuration() { |
|
print_info "检查配置..." |
|
|
|
|
|
config_files=( |
|
"config.json" |
|
"config/config.json" |
|
"configs/config.json" |
|
".config/jetbrains-ai-proxy.json" |
|
) |
|
|
|
config_found=false |
|
for config_file in "${config_files[@]}"; do |
|
if [ -f "$config_file" ]; then |
|
print_success "找到配置文件: $config_file" |
|
config_found=true |
|
break |
|
fi |
|
done |
|
|
|
|
|
env_configured=false |
|
if [ -n "$JWT_TOKENS" ] || [ -n "$JWT_TOKEN" ]; then |
|
if [ -n "$BEARER_TOKEN" ]; then |
|
print_success "检测到环境变量配置" |
|
env_configured=true |
|
else |
|
print_warning "检测到JWT tokens但缺少BEARER_TOKEN环境变量" |
|
fi |
|
fi |
|
|
|
|
|
if [ -f ".env" ]; then |
|
print_success "找到 .env 文件" |
|
env_configured=true |
|
fi |
|
|
|
|
|
if [ "$config_found" = false ] && [ "$env_configured" = false ]; then |
|
print_warning "未找到配置文件或环境变量配置" |
|
print_info "生成示例配置文件..." |
|
|
|
if ./jetbrains-ai-proxy --generate-config; then |
|
print_success "示例配置文件已生成" |
|
print_info "请编辑 config/config.json 或 .env.example 文件" |
|
print_info "然后重新运行此脚本" |
|
exit 0 |
|
else |
|
print_error "生成示例配置失败" |
|
exit 1 |
|
fi |
|
fi |
|
} |
|
|
|
|
|
show_config() { |
|
print_info "当前配置信息:" |
|
./jetbrains-ai-proxy --print-config |
|
} |
|
|
|
|
|
start_service() { |
|
print_info "启动 JetBrains AI Proxy..." |
|
|
|
|
|
if [ $# -gt 0 ]; then |
|
print_info "使用命令行参数: $*" |
|
exec ./jetbrains-ai-proxy "$@" |
|
else |
|
|
|
exec ./jetbrains-ai-proxy |
|
fi |
|
} |
|
|
|
|
|
show_help() { |
|
echo "JetBrains AI Proxy 启动脚本" |
|
echo "" |
|
echo "用法:" |
|
echo " $0 # 使用配置文件启动" |
|
echo " $0 [options] # 使用命令行参数启动" |
|
echo " $0 --help # 显示帮助信息" |
|
echo " $0 --config # 显示当前配置" |
|
echo " $0 --generate # 生成示例配置文件" |
|
echo "" |
|
echo "配置方式 (优先级从高到低):" |
|
echo " 1. 命令行参数" |
|
echo " 2. 环境变量" |
|
echo " 3. 配置文件 (config.json, config/config.json 等)" |
|
echo " 4. 默认值" |
|
echo "" |
|
echo "示例:" |
|
echo " # 生成配置文件" |
|
echo " $0 --generate" |
|
echo "" |
|
echo " # 使用配置文件启动" |
|
echo " $0" |
|
echo "" |
|
echo " # 使用命令行参数启动" |
|
echo " $0 -c \"jwt1,jwt2,jwt3\" -k \"bearer_token\" -s random" |
|
echo "" |
|
echo " # 使用环境变量启动" |
|
echo " export JWT_TOKENS=\"jwt1,jwt2,jwt3\"" |
|
echo " export BEARER_TOKEN=\"your_token\"" |
|
echo " $0" |
|
echo "" |
|
echo "管理端点:" |
|
echo " GET /health - 健康检查" |
|
echo " GET /config - 配置信息" |
|
echo " GET /stats - 统计信息" |
|
echo " POST /reload - 重载配置" |
|
} |
|
|
|
|
|
main() { |
|
echo "🚀 JetBrains AI Proxy 启动脚本" |
|
echo "================================" |
|
|
|
|
|
case "${1:-}" in |
|
--help|-h) |
|
show_help |
|
exit 0 |
|
;; |
|
--config) |
|
check_executable |
|
show_config |
|
exit 0 |
|
;; |
|
--generate) |
|
check_executable |
|
./jetbrains-ai-proxy --generate-config |
|
exit 0 |
|
;; |
|
esac |
|
|
|
|
|
check_executable |
|
|
|
|
|
check_configuration |
|
|
|
|
|
start_service "$@" |
|
} |
|
|
|
|
|
trap 'print_info "正在停止服务..."; exit 0' INT TERM |
|
|
|
|
|
main "$@" |
|
|