CodeReview/Dockerfile

178 lines
4.2 KiB
Docker
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 多阶段构建 - 构建阶段
FROM node:18-alpine AS builder
# 设置工作目录
WORKDIR /app
# 禁用代理并安装 pnpm
ENV HTTP_PROXY=""
ENV HTTPS_PROXY=""
ENV http_proxy=""
ENV https_proxy=""
ENV NO_PROXY="*"
ENV no_proxy="*"
RUN npm config set registry https://registry.npmjs.org/ && \
npm config delete proxy 2>/dev/null || true && \
npm config delete https-proxy 2>/dev/null || true && \
npm config delete http-proxy 2>/dev/null || true && \
npm install -g pnpm
# 声明构建参数 - 这些参数可以在 docker build 时传入
# LLM 通用配置
ARG VITE_LLM_PROVIDER
ARG VITE_LLM_API_KEY
ARG VITE_LLM_MODEL
ARG VITE_LLM_BASE_URL
ARG VITE_LLM_TIMEOUT
ARG VITE_LLM_TEMPERATURE
ARG VITE_LLM_MAX_TOKENS
# Google Gemini 配置
ARG VITE_GEMINI_API_KEY
ARG VITE_GEMINI_MODEL
ARG VITE_GEMINI_TIMEOUT_MS
# OpenAI 配置
ARG VITE_OPENAI_API_KEY
ARG VITE_OPENAI_MODEL
ARG VITE_OPENAI_BASE_URL
# Claude 配置
ARG VITE_CLAUDE_API_KEY
ARG VITE_CLAUDE_MODEL
# 通义千问配置
ARG VITE_QWEN_API_KEY
ARG VITE_QWEN_MODEL
# DeepSeek 配置
ARG VITE_DEEPSEEK_API_KEY
ARG VITE_DEEPSEEK_MODEL
# 智谱AI 配置
ARG VITE_ZHIPU_API_KEY
ARG VITE_ZHIPU_MODEL
# Moonshot 配置
ARG VITE_MOONSHOT_API_KEY
ARG VITE_MOONSHOT_MODEL
# 百度文心一言配置
ARG VITE_BAIDU_API_KEY
ARG VITE_BAIDU_MODEL
# MiniMax 配置
ARG VITE_MINIMAX_API_KEY
ARG VITE_MINIMAX_MODEL
# 豆包配置
ARG VITE_DOUBAO_API_KEY
ARG VITE_DOUBAO_MODEL
# Ollama 配置
ARG VITE_OLLAMA_API_KEY
ARG VITE_OLLAMA_MODEL
ARG VITE_OLLAMA_BASE_URL
# Supabase 配置
ARG VITE_SUPABASE_URL
ARG VITE_SUPABASE_ANON_KEY
# GitHub 配置
ARG VITE_GITHUB_TOKEN
# 数据库配置
ARG VITE_USE_LOCAL_DB
# 应用配置
ARG VITE_APP_ID
ARG VITE_MAX_ANALYZE_FILES
ARG VITE_LLM_CONCURRENCY
ARG VITE_LLM_GAP_MS
ARG VITE_OUTPUT_LANGUAGE
# 将构建参数转换为环境变量Vite 构建时会读取这些环境变量)
ENV VITE_LLM_PROVIDER=$VITE_LLM_PROVIDER
ENV VITE_LLM_API_KEY=$VITE_LLM_API_KEY
ENV VITE_LLM_MODEL=$VITE_LLM_MODEL
ENV VITE_LLM_BASE_URL=$VITE_LLM_BASE_URL
ENV VITE_LLM_TIMEOUT=$VITE_LLM_TIMEOUT
ENV VITE_LLM_TEMPERATURE=$VITE_LLM_TEMPERATURE
ENV VITE_LLM_MAX_TOKENS=$VITE_LLM_MAX_TOKENS
ENV VITE_GEMINI_API_KEY=$VITE_GEMINI_API_KEY
ENV VITE_GEMINI_MODEL=$VITE_GEMINI_MODEL
ENV VITE_GEMINI_TIMEOUT_MS=$VITE_GEMINI_TIMEOUT_MS
ENV VITE_OPENAI_API_KEY=$VITE_OPENAI_API_KEY
ENV VITE_OPENAI_MODEL=$VITE_OPENAI_MODEL
ENV VITE_OPENAI_BASE_URL=$VITE_OPENAI_BASE_URL
ENV VITE_CLAUDE_API_KEY=$VITE_CLAUDE_API_KEY
ENV VITE_CLAUDE_MODEL=$VITE_CLAUDE_MODEL
ENV VITE_QWEN_API_KEY=$VITE_QWEN_API_KEY
ENV VITE_QWEN_MODEL=$VITE_QWEN_MODEL
ENV VITE_DEEPSEEK_API_KEY=$VITE_DEEPSEEK_API_KEY
ENV VITE_DEEPSEEK_MODEL=$VITE_DEEPSEEK_MODEL
ENV VITE_ZHIPU_API_KEY=$VITE_ZHIPU_API_KEY
ENV VITE_ZHIPU_MODEL=$VITE_ZHIPU_MODEL
ENV VITE_MOONSHOT_API_KEY=$VITE_MOONSHOT_API_KEY
ENV VITE_MOONSHOT_MODEL=$VITE_MOONSHOT_MODEL
ENV VITE_BAIDU_API_KEY=$VITE_BAIDU_API_KEY
ENV VITE_BAIDU_MODEL=$VITE_BAIDU_MODEL
ENV VITE_MINIMAX_API_KEY=$VITE_MINIMAX_API_KEY
ENV VITE_MINIMAX_MODEL=$VITE_MINIMAX_MODEL
ENV VITE_DOUBAO_API_KEY=$VITE_DOUBAO_API_KEY
ENV VITE_DOUBAO_MODEL=$VITE_DOUBAO_MODEL
ENV VITE_OLLAMA_API_KEY=$VITE_OLLAMA_API_KEY
ENV VITE_OLLAMA_MODEL=$VITE_OLLAMA_MODEL
ENV VITE_OLLAMA_BASE_URL=$VITE_OLLAMA_BASE_URL
ENV VITE_USE_LOCAL_DB=$VITE_USE_LOCAL_DB
ENV VITE_SUPABASE_URL=$VITE_SUPABASE_URL
ENV VITE_SUPABASE_ANON_KEY=$VITE_SUPABASE_ANON_KEY
ENV VITE_GITHUB_TOKEN=$VITE_GITHUB_TOKEN
ENV VITE_APP_ID=$VITE_APP_ID
ENV VITE_MAX_ANALYZE_FILES=$VITE_MAX_ANALYZE_FILES
ENV VITE_LLM_CONCURRENCY=$VITE_LLM_CONCURRENCY
ENV VITE_LLM_GAP_MS=$VITE_LLM_GAP_MS
ENV VITE_OUTPUT_LANGUAGE=$VITE_OUTPUT_LANGUAGE
# 复制依赖文件
COPY package.json pnpm-lock.yaml ./
# 安装依赖
RUN pnpm install --no-frozen-lockfile
# 复制项目文件(不包括 .env因为我们使用构建参数
COPY . .
# 构建应用(环境变量会在构建时被 Vite 读取并硬编码到代码中)
RUN pnpm build
# 生产阶段 - 使用 nginx 提供静态文件服务
FROM nginx:alpine
# 复制自定义 nginx 配置
COPY nginx.conf /etc/nginx/conf.d/default.conf
# 从构建阶段复制构建产物
COPY --from=builder /app/dist /usr/share/nginx/html
# 暴露端口
EXPOSE 80
# 启动 nginx
CMD ["nginx", "-g", "daemon off;"]