| |
| FROM node:20-alpine AS frontend_builder |
|
|
| WORKDIR /app/qsss-web |
|
|
| |
| COPY qsss-web/package.json qsss-web/pnpm-lock.yaml ./ |
| RUN pnpm install --frozen-lockfile |
|
|
| |
| COPY qsss-web/ . |
|
|
| |
| RUN npm run build |
|
|
| |
| FROM python:3.9-slim-bullseye AS backend_builder |
|
|
| WORKDIR /app |
|
|
| |
| |
| RUN echo "--- 开始安装系统依赖 ---" && \ |
| apt-get update && apt-get install -y \ |
| libssl-dev \ |
| && apt-get clean \ |
| && rm -rf /var/lib/apt/lists/* && \ |
| echo "--- 系统依赖安装完成 ---" |
|
|
| |
| |
| RUN echo "--- 开始安装TA-Lib ---" && \ |
| mkdir -p /ta-lib-build && \ |
| wget http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz -O /ta-lib-build/ta-lib-0.4.0-src.tar.gz && \ |
| tar -xzf /ta-lib-build/ta-lib-0.4.0-src.tar.gz -C /ta-lib-build && \ |
| cd /ta-lib-build/ta-lib && \ |
| ./configure --prefix=/usr && \ |
| make && \ |
| make install && \ |
| rm -rf /ta-lib-build && \ |
| echo "--- TA-Lib安装完成 ---" |
| RUN ldconfig |
| RUN ln -s /usr/lib/libta_lib.so /usr/lib/libta-lib.so && \ |
| ln -s /usr/lib/libta_lib.so.0 /usr/lib/libta-lib.so.0 |
|
|
| |
| ENV VIRTUAL_ENV=/app/backend_venv |
| RUN echo "--- 开始创建Python虚拟环境 ---" && \ |
| python -m venv $VIRTUAL_ENV && \ |
| echo "--- Python虚拟环境创建完成 ---" |
| ENV PATH="$VIRTUAL_ENV/bin:$PATH" |
|
|
| |
| |
| COPY backend/requirements.txt . |
| RUN echo "--- 开始安装Python依赖 ---" && \ |
| pip install --no-cache-dir --upgrade pip && \ |
| pip install --no-cache-dir -r requirements.txt && \ |
| pip install --no-cache-dir fake-useragent==1.5.1 && \ |
| |
| rm -rf ~/.cache/pip && \ |
| echo "--- Python依赖安装完成 ---" |
|
|
| |
| COPY backend/ backend/ |
|
|
| |
| FROM debian:bullseye-slim AS final |
|
|
| |
| RUN echo "--- 开始安装Nginx和CA证书 ---" && \ |
| apt-get update && apt-get install -y \ |
| nginx \ |
| ca-certificates \ |
| curl \ |
| && apt-get clean \ |
| && rm -rf /var/lib/apt/lists/* && \ |
| echo "--- Nginx和CA证书安装完成 ---" |
|
|
| |
| RUN echo "--- 开始创建必要目录 ---" && \ |
| mkdir -p /app/qsss-web/out \ |
| /app/backend \ |
| /app/backend_venv \ |
| /etc/nginx/sites-enabled \ |
| /var/log/nginx && \ |
| echo "--- 必要目录创建完成 ---" |
|
|
| |
| COPY --from=frontend_builder /app/qsss-web/out /app/qsss-web/out |
|
|
| |
| COPY --from=backend_builder /app/backend_venv /app/backend_venv |
|
|
| |
| COPY --from=backend_builder /app/backend /app/backend |
|
|
| |
| COPY nginx.conf /etc/nginx/sites-enabled/default |
|
|
| |
| |
|
|
| |
|
|
| |
| EXPOSE 7860 |
|
|
| |
| HEALTHCHECK --interval=30s --timeout=10s --retries=3 CMD curl --fail http://localhost:7860/health || exit 1 |
|
|
| |
| CMD ["bash", "-c", "nginx -g 'daemon off;' & cd /app/backend && /app/backend_venv/bin/uvicorn app.main:app --host 0.0.0.0 --port ${PORT}"] |
|
|