File size: 1,857 Bytes
05c6ec5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
#!/bin/sh
# 如果命令失败则立即退出
set -e

# 定义临时密钥文件的路径
KEY_FILE_PATH="/tmp/keys.txt"

echo "--- 正在检查 Secrets ---"

# 检查 API_PASSWORD 是否已设置
if [ -z "${API_PASSWORD}" ]; then
  echo "[错误] 必须在 Hugging Face Secrets 中设置 API_PASSWORD !"
  exit 1
fi

# 检查 key_list 是否已设置
if [ -z "${key_list}" ]; then
  echo "[错误] 必须在 Hugging Face Secrets 中设置 key_list !"
  exit 1
fi

echo "--- 正在从 Secret 'key_list' 创建临时密钥文件 (${KEY_FILE_PATH}) ---"

# 从环境变量 key_list 读取内容,并写入临时文件
# 使用 'echo -e' 来解释可能存在的 '\n' 换行符
# 将标准错误重定向到 /dev/null 以避免打印潜在的密钥内容(尽管通常 echo 不会)
echo -e "${key_list}" > "${KEY_FILE_PATH}" 2>/dev/null

# 验证文件是否创建成功且非空
if [ ! -s "${KEY_FILE_PATH}" ]; then
    echo "[错误] 创建密钥文件失败或文件为空!请检查 'key_list' Secret 的内容。"
    exit 1
fi

echo "--- 密钥文件已生成 ---"

# !!! 【重要】生产环境中不要取消下面这行的注释,避免日志泄露 !!!
# echo "密钥文件内容预览 (前几行):"
# head -n 3 "${KEY_FILE_PATH}"

echo "--- 正在启动 api-pool 服务 ---"

# 使用 exec 执行 Go 程序,将脚本进程替换为 Go 程序进程
# 将临时文件路径传给 --key-file
# 将从 Secret 读取的密码传给 --password
# 将地址设为 0.0.0.0 以便容器外访问
# 传入其他您指定的参数
exec /app/api-pool \
    --key-file "${KEY_FILE_PATH}" \
    --target-url "https://api.siliconflow.cn" \
    --port "6969" \
    --address "0.0.0.0" \
    --password "${API_PASSWORD}" \
    --max-workers=1000 \
    --max-queue=2000
    # 注意:--max-workers 和 --max-queue 值较高,请关注 Space 资源使用情况