kingcap/openapi
0
1FROM eceasy/cli-proxy-api:latest AS cpa2FROM seakee/cpa-manager-plus:latest AS mgr3 4# 使用 Debian/glibc 运行时,而不是 Alpine/musl。5# CLIProxyAPI 官方插件通过 dlopen 加载原生 .so;6# 在 Alpine + gcompat 上会在 cliproxy_dlopen 处 SIGSEGV 并导致 cpa 进程崩溃。7FROM python:3.12-slim-bookworm8 9RUN apt-get update \10 && apt-get install -y --no-install-recommends \11 bash \12 ca-certificates \13 nginx \14 supervisor \15 tzdata \16 && pip install --no-cache-dir "psycopg[binary]==3.2.10" \17 && groupadd -r app \18 && useradd -r -m -d /home/app -u 1000 -g app app \19 && mkdir -p \20 /app \21 /data \22 /run/nginx \23 /tmp/.cli-proxy-api \24 /tmp/logs \25 /tmp/pg_cache/pgstore \26 /tmp/nginx/client_temp \27 /tmp/nginx/proxy_temp \28 /tmp/nginx/fastcgi_temp \29 /tmp/nginx/uwsgi_temp \30 /tmp/nginx/scgi_temp \31 && chown -R app:app \32 /app \33 /data \34 /run/nginx \35 /tmp/.cli-proxy-api \36 /tmp/logs \37 /tmp/pg_cache \38 /tmp/nginx \39 /home/app \40 && rm -rf /var/lib/apt/lists/*41 42WORKDIR /app43 44COPY --from=cpa /CLIProxyAPI/CLIProxyAPI /usr/local/bin/cli-proxy-api45COPY --from=mgr /usr/local/bin/cpa-manager-plus /usr/local/bin/cpa-manager-plus46 47RUN chmod +x /usr/local/bin/cli-proxy-api /usr/local/bin/cpa-manager-plus48 49COPY --chown=app:app docker/entrypoint.sh /app/entrypoint.sh50COPY --chown=app:app docker/supervisord.conf /etc/supervisord.conf51COPY --chown=app:app docker/nginx.conf /etc/nginx/nginx.conf52COPY --chown=app:app docker/sync_usage.py /app/sync_usage.py53COPY --chown=app:app docker/prestart_migrate.py /app/prestart_migrate.py54 55RUN chmod +x /app/entrypoint.sh /app/sync_usage.py /app/prestart_migrate.py56 57# 入口脚本需要 root 权限按需写入 /etc/hosts;supervisord 保持 root 以便打开58# 容器 stdout/stderr,业务进程在 supervisord.conf 中按需降权为 app。59USER root60 61ENV HOME=/home/app62ENV TZ=Asia/Shanghai63 64# CPA-Manager-Plus 本地 SQLite(原生)65ENV HTTP_ADDR=127.0.0.1:1831766ENV USAGE_DATA_DIR=/data67ENV USAGE_DB_PATH=/data/usage.sqlite68ENV CPA_MANAGER_DATA_KEY_PATH=/data/data.key69ENV CPA_MANAGER_ADMIN_KEY_FILE=/data/cpamp_admin.key70ENV USAGE_COLLECTOR_MODE=auto71ENV USAGE_RESP_QUEUE=usage72ENV USAGE_RESP_POP_SIDE=right73ENV USAGE_BATCH_SIZE=10074ENV USAGE_POLL_INTERVAL_MS=50075ENV USAGE_QUERY_LIMIT=5000076ENV USAGE_CORS_ORIGINS=*77 78# CLIProxyAPI PG 本地镜像目录79ENV PGSTORE_LOCAL_PATH=/data80 81# 同步脚本参数82ENV USAGE_SYNC_SCHEMA=cpa_manager_usage83ENV USAGE_SYNC_INTERVAL_SEC=384ENV USAGE_SYNC_BATCH=50085ENV USAGE_SYNC_MANAGER_BASE=http://127.0.0.1:1831786ENV USAGE_SYNC_FORCE_UPSTREAM_URL=http://127.0.0.1:831787ENV USAGE_SYNC_WAIT_SEC=30088# usage 镜像保留策略:防止 PG/Supabase 中 cpa_manager_usage 无限增长89ENV USAGE_SYNC_RETENTION_DAYS=3090ENV USAGE_SYNC_MAX_USAGE_EVENTS=5000091ENV USAGE_SYNC_MAX_DEAD_LETTERS=500092ENV USAGE_SYNC_PRUNE_INTERVAL_SEC=360093ENV USAGE_SYNC_PRUNE_SQLITE=true94ENV USAGE_SYNC_VACUUM_SQLITE_ON_PRUNE=false95ENV USAGE_SYNC_PURGE_ON_START=false96ENV USAGE_SYNC_CONFIG_PATH=/data/usage_sync_config.json97ENV USAGE_SYNC_CONFIG_HTTP_HOST=127.0.0.198ENV USAGE_SYNC_CONFIG_HTTP_PORT=1831899ENV USAGE_SYNC_CONFIG_SESSION_TTL_SEC=43200100 101# 首次空 PG 启动时,CLIProxyAPI 的 bootstrap 配置102ENV CPA_BIND_HOST=127.0.0.1103ENV CPA_BIND_PORT=8317104ENV CPA_AUTH_DIR=/tmp/.cli-proxy-api105ENV CPA_BOOTSTRAP_MANAGEMENT_KEY=changeme106 107EXPOSE 7860108 109ENTRYPOINT ["/app/entrypoint.sh"]
110 