FROM denoland/deno:latest WORKDIR /app # 安装构建 dynamic-proxy 需要的依赖 RUN apt-get update && \ apt-get install -y git golang net-tools build-essential && \ rm -rf /var/lib/apt/lists/* # 克隆 dynamic-proxy 并构建 RUN git clone https://github.com/kbykb/dynamic-proxy.git /app/dynamic-proxy && \ cd /app/dynamic-proxy && \ go build -o /usr/local/bin/dynamic-proxy . && \ rm -rf /app/dynamic-proxy # 拷贝服务端文件 COPY main.ts . COPY config.yaml . # 默认环境变量(可在 HF Space WebUI 覆盖) ENV WORKER_API_KEY="1" ENV PROXY_URL="http://127.0.0.1:17285" ENV SERVICE_PORT="8000" EXPOSE 17285 EXPOSE 8000 # 启动脚本:先起 dynamic-proxy → 等待端口 → 再启动 Deno 服务 CMD sh -c "\ echo 'Starting dynamic-proxy...'; \ /usr/local/bin/dynamic-proxy -config=/app/config.yaml > /app/proxy.log 2>&1 & \ echo 'Waiting for proxy to listen on port 17285...'; \ for i in $(seq 1 20); do \ if netstat -tuln | grep ':17285' > /dev/null; then \ echo 'dynamic-proxy is UP.'; \ break; \ fi; \ sleep 1; \ echo '...'; \ done; \ if ! netstat -tuln | grep ':17285' > /dev/null; then \ echo 'ERROR: dynamic-proxy FAILED to start'; \ echo '---- proxy log ----'; \ cat /app/proxy.log; \ exit 1; \ fi; \ echo 'Starting main.ts'; \ deno run --allow-net --allow-env --allow-read /app/main.ts \ "