Files
prompt-optimizer/Dockerfile
T
linshen 80977ec8a1 feat(proxy): 优化 Docker 代理功能并完善错误处理 (develop)
本次提交主要对 Docker 代理功能进行了优化,并完善了相关的错误处理逻辑。具体内容包括:

- 精确匹配 API 代理路径,使用 `location =` 确保 Nginx 配置中的代理路径精确匹配,避免被其他正则匹配拦截。
- 添加对本地主机 URL 的自动转换支持,在 Docker 容器内部访问宿主机时,自动将 `localhost`、`127.0.0.1` 等地址转换为 `host.docker.internal`。
- 优化 ModelManager 组件,将 `useDockerProxy` 选项添加到模型配置中,调整 API URL 和 API Key 的输入位置,增强用户体验。
- 完善错误处理逻辑,为 Node Proxy 服务增加更详细的错误处理,并提供统一的 JSON 错误响应格式。
- 在开发环境的 `docker-compose.dev.yml` 文件中添加 `host.docker.internal` 映射,允许容器访问宿主机。
- 更新了相关文档,包括架构对比、实施计划和设计文档,详细描述了 Docker 代理功能的实现原理和使用方法。
- 调整了文档的分类和归档方式,将经验记录归档到 archives 目录。
2025-08-17 10:37:12 +08:00

64 lines
2.0 KiB
Docker

FROM node:20-slim AS base
ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH"
RUN npm install -g corepack@latest && corepack enable
FROM base AS build
COPY . /app
WORKDIR /app
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile
RUN pnpm run build
RUN pnpm mcp:build
FROM nginx:stable-alpine
# 安装Node.js、htpasswd工具、dos2unix和supervisor
RUN apk add --no-cache apache2-utils dos2unix supervisor nodejs npm gettext curl
# 安装pnpm
RUN npm install -g pnpm
# 复制Nginx配置
COPY docker/nginx.conf /etc/nginx/conf.d/default.conf
# 复制Web应用
COPY --from=build /app/packages/web/dist /usr/share/nginx/html
# 复制MCP服务器
COPY --from=build /app/packages/mcp-server/dist /app/mcp-server/dist
COPY --from=build /app/packages/mcp-server/package.json /app/mcp-server/
COPY --from=build /app/packages/mcp-server/preload-env.js /app/mcp-server/
COPY --from=build /app/packages/mcp-server/preload-env.cjs /app/mcp-server/
# 复制Node Proxy服务
COPY --from=build /app/node-proxy /app/node-proxy
# 复制构建后的包到正确位置
COPY --from=build /app/packages /app/packages
# 复制必要的node_modules
COPY --from=build /app/node_modules /app/node_modules
# 设置默认环境变量(向前兼容)
ENV NGINX_PORT=80
# 设置MCP服务器工作目录
WORKDIR /app/mcp-server
# 复制并设置启动脚本
COPY docker/generate-config.sh /docker-entrypoint.d/40-generate-config.sh
COPY docker/generate-auth.sh /docker-entrypoint.d/30-generate-auth.sh
COPY docker/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY docker/start-services.sh /start-services.sh
# 确保脚本有执行权限
RUN chmod +x /docker-entrypoint.d/40-generate-config.sh
RUN chmod +x /docker-entrypoint.d/30-generate-auth.sh
RUN chmod +x /start-services.sh
# 转换可能的Windows行尾符为Unix格式
RUN dos2unix /docker-entrypoint.d/40-generate-config.sh
RUN dos2unix /docker-entrypoint.d/30-generate-auth.sh
RUN dos2unix /start-services.sh
EXPOSE 80
# 使用自定义启动脚本
CMD ["sh", "/start-services.sh"]