| |
| |
|
|
| FROM python:3.11-slim AS backend-builder |
|
|
| WORKDIR /build |
|
|
| |
| RUN apt-get update && apt-get install -y \ |
| gcc \ |
| postgresql-client \ |
| git \ |
| && rm -rf /var/lib/apt/lists/* |
|
|
| |
| RUN git clone --depth 1 https://github.com/xiamuceer-j/MuMuAINovel.git project |
|
|
| |
| WORKDIR /build/project/backend |
| RUN pip install --no-cache-dir -r requirements.txt |
|
|
| |
| ENV SENTENCE_TRANSFORMERS_HOME=/app/embedding |
| RUN mkdir -p /app/embedding |
| RUN python -c "from sentence_transformers import SentenceTransformer; SentenceTransformer('sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2')" |
|
|
| |
| FROM node:20-slim AS frontend-builder |
|
|
| WORKDIR /build |
|
|
| |
| RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/* |
| RUN git clone --depth 1 https://github.com/xiamuceer-j/MuMuAINovel.git project |
|
|
| WORKDIR /build/project/frontend |
| RUN npm install |
|
|
| |
| RUN sed -i "s|outDir:.*|outDir: 'dist',|g" vite.config.ts || true |
| RUN npm run build |
|
|
| |
| RUN ls -la /build/project/frontend/ |
|
|
| |
| FROM python:3.11-slim |
|
|
| WORKDIR /app |
|
|
| |
| RUN apt-get update && apt-get install -y \ |
| netcat-traditional \ |
| git \ |
| && rm -rf /var/lib/apt/lists/* |
|
|
| |
| RUN mkdir -p /app/data /app/logs /app/storage/generated_covers /app/embedding /app/backend/static /app/scripts |
|
|
| |
| COPY --from=backend-builder /usr/local/lib/python3.11/site-packages /usr/local/lib/python3.11/site-packages |
| COPY --from=backend-builder /usr/local/bin/alembic /usr/local/bin/alembic |
| COPY --from=backend-builder /usr/local/bin/uvicorn /usr/local/bin/uvicorn |
|
|
| |
| COPY --from=backend-builder /app/embedding /app/embedding |
|
|
| |
| RUN git clone --depth 1 https://github.com/xiamuceer-j/MuMuAINovel.git /tmp/project |
|
|
| |
| RUN cp -r /tmp/project/backend/. /app/backend/ |
|
|
| |
| COPY --from=backend-builder /build/project/backend/alembic-postgres.ini ./alembic.ini |
| COPY --from=backend-builder /build/project/backend/alembic/postgres ./alembic |
| COPY --from=backend-builder /build/project/backend/scripts/entrypoint.sh /app/entrypoint.sh |
| COPY --from=backend-builder /build/project/backend/scripts/migrate.py ./scripts/migrate.py |
|
|
| |
| COPY --from=frontend-builder /build/project/frontend/dist /app/backend/static |
|
|
| |
| RUN chmod +x /app/entrypoint.sh |
| COPY ca.pem /app/certs/ca.pem |
| |
| ENV PYTHONUNBUFFERED=1 |
| ENV APP_HOST=0.0.0.0 |
| ENV APP_PORT=7860 |
| ENV SSL_CERT_FILE="/app/certs/ca.pem" |
| |
| ENV REQUESTS_CA_BUNDLE="/app/certs/ca.pem" |
| ENV NODE_EXTRA_CA_CERTS="/app/certs/ca.pem" |
| ENV SENTENCE_TRANSFORMERS_HOME=/app/embedding |
| ENV TRANSFORMERS_OFFLINE=1 |
| ENV HF_DATASETS_OFFLINE=1 |
| ENV HF_HUB_OFFLINE=1 |
|
|
| |
| WORKDIR /app/backend |
| |
| |
| |
| |
| |
| |
| |
| EXPOSE 7860 |
|
|
| |
| HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \ |
| CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:7860/health')" || exit 1 |
|
|
| |
| CMD ["/app/entrypoint.sh"] |