本次提交主要对 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 目录。
64 lines
2.0 KiB
Docker
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"] |