# 阶段一:构建前端资源 FROM node:20-alpine AS frontend-builder # 安装前端构建依赖 RUN apk add --no-cache autoconf automake libtool make g++ zlib-dev nasm python3 libpng-dev WORKDIR /frontend-app COPY frontend/package.json frontend/package-lock.json* ./ RUN npm install --registry=https://registry.npmmirror.com --prefer-offline COPY frontend/ ./ ARG VITE_API_URL=/api ENV VITE_API_URL=${VITE_API_URL} RUN npm run build # 阶段二:构建后端及最终镜像 FROM python:3.12-slim # 设置环境变量 ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONUNBUFFERED=1 ENV PYTHONIOENCODING=utf-8 # 安装系统依赖和 Nginx(使用本地缓存) RUN apt-get update && apt-get install -y \ gcc \ libpq-dev \ libffi-dev \ libjpeg-dev \ zlib1g-dev \ nginx \ && rm -rf /var/lib/apt/lists/* || true # 配置后端工作目录 WORKDIR /app/backend # 复制后端 requirements 文件并安装依赖 COPY backend/requirements.txt . RUN pip install --no-cache-dir --upgrade pip && \ pip install --no-cache-dir -r requirements.txt # 复制后端代码 COPY backend/ . # 创建媒体和静态文件目录 RUN mkdir -p /app/backend/media /app/backend/static # 从前端构建阶段复制静态文件到 Nginx 目录 COPY --from=frontend-builder /frontend-app/dist /usr/share/nginx/html # 复制 Nginx 配置文件 COPY nginx-all-in-one.conf /etc/nginx/conf.d/default.conf # 复制并配置启动脚本 COPY entrypoint.sh /app/entrypoint.sh RUN chmod +x /app/entrypoint.sh # 暴露 Nginx 端口 EXPOSE 8890 # 健康检查 HEALTHCHECK --interval=30s --timeout=10s --start-period=10s --retries=3 \ CMD curl -f http://localhost:8890/health || exit 1 # 启动脚本 CMD ["/app/entrypoint.sh"]