File size: 5,076 Bytes
6fefda3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 |
#!/bin/bash
# JetBrains AI Proxy 启动脚本
# 支持自动配置发现和多种配置方式
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' # No Color
# 打印带颜色的消息
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
# 检查.env文件
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 "$@"
|