- Dockerfile.bench / docker-compose.bench.yml:tsecbench 测评镜像与编排 - bench/entrypoint.sh、seed.sh:容器入口与任务种子脚本 - bench/prompts/*:测评用 planner/worker/challenge 提示词 - bench/.env.example、kali_tools.txt:配置模板与工具清单(真实 .env 仍被忽略)
54 lines
2.2 KiB
Bash
54 lines
2.2 KiB
Bash
#!/usr/bin/env bash
|
||
# ARTEX benchmark 容器入口:起 Postgres → 起 artex → 健康检查 → REST API 一键 seed → 保活。
|
||
# 全部密钥从运行时环境变量读取,不落包内。
|
||
set -u
|
||
|
||
log() { echo "[entrypoint] $*"; }
|
||
|
||
# ---------- 环境变量默认值 ----------
|
||
export ADMIN_PASSWORD="${ADMIN_PASSWORD:-artexbench}"
|
||
export LLM_MODEL="${LLM_MODEL:-deepseek-v4-flash}"
|
||
export LLM_FORMAT="${LLM_FORMAT:-openai}"
|
||
# BENCHMARK_TOKEN / BENCHMARK_BASE_URL 由平台自动注入(本地测在 bench/.env 里填),
|
||
# seed.sh 直接读取,无需在此桥接。
|
||
API="http://127.0.0.1:8787"
|
||
|
||
# ---------- 1) 启动 Postgres ----------
|
||
PGVER="$(ls /etc/postgresql 2>/dev/null | sort -V | tail -1)"
|
||
if [ -z "$PGVER" ]; then log "找不到 PostgreSQL 集群"; exit 1; fi
|
||
PGHBA="/etc/postgresql/$PGVER/main/pg_hba.conf"
|
||
# 一次性沙箱:本机 127.0.0.1 走 trust,免密码麻烦
|
||
grep -q "127.0.0.1/32 trust" "$PGHBA" || echo "host all all 127.0.0.1/32 trust" >> "$PGHBA"
|
||
log "启动 PostgreSQL $PGVER ..."
|
||
pg_ctlcluster "$PGVER" main start || service postgresql start
|
||
for i in $(seq 1 30); do su postgres -c "pg_isready -q" && break; sleep 1; done
|
||
|
||
# 建库 + 角色
|
||
su postgres -c "psql -tAc \"SELECT 1 FROM pg_roles WHERE rolname='artex'\"" | grep -q 1 \
|
||
|| su postgres -c "psql -c \"CREATE ROLE artex LOGIN SUPERUSER PASSWORD 'artex'\""
|
||
su postgres -c "psql -tAc \"SELECT 1 FROM pg_database WHERE datname='artex'\"" | grep -q 1 \
|
||
|| su postgres -c "createdb -O artex artex"
|
||
|
||
export ARTEX_PG_DSN="postgres://artex:[email protected]:5432/artex?sslmode=disable"
|
||
|
||
# ---------- 2) 启动 artex(后台) ----------
|
||
log "启动 artex ..."
|
||
/app/artex -addr :8787 -proxy :8788 &
|
||
ARTEX_PID=$!
|
||
|
||
# ---------- 3) 等健康 ----------
|
||
log "等待 artex /api/health ..."
|
||
for i in $(seq 1 60); do
|
||
code=$(curl -s -o /dev/null -w '%{http_code}' "$API/api/health" || true)
|
||
[ "$code" = "200" ] && { log "artex 就绪"; break; }
|
||
if ! kill -0 "$ARTEX_PID" 2>/dev/null; then log "artex 进程退出"; exit 1; fi
|
||
sleep 1
|
||
done
|
||
|
||
# ---------- 4) seed 配置 ----------
|
||
API="$API" /app/bench/seed.sh || log "seed 出现非致命错误(见上)"
|
||
|
||
# ---------- 5) 保活 ----------
|
||
log "seed 完成,容器持续运行(编排 agent 的触发器将自动驱动解题)"
|
||
wait "$ARTEX_PID"
|