Spaces:
Sleeping
Sleeping
| FROM node:18 AS frontend-builder | |
| WORKDIR /app/frontend | |
| # Copy frontend package files and install dependencies in one layer | |
| COPY app/frontend/package*.json ./ | |
| RUN npm install && \ | |
| npm uninstall tailwindcss @tailwindcss/postcss && \ | |
| npm install tailwindcss@3.3.0 postcss autoprefixer --save-dev | |
| # Copy frontend source files and build in one layer | |
| COPY app/frontend/ ./ | |
| RUN npm run build && ls -la build/ | |
| # Backend stage | |
| FROM ghcr.io/astral-sh/uv:python3.13-bookworm-slim | |
| ENV UVICORN_WS_PROTOCOL=websockets | |
| # Create a non-root user in one layer | |
| RUN groupadd -r appuser && useradd -r -g appuser -m -u 1000 -d /home/appuser -s /sbin/nologin appuser | |
| USER appuser | |
| WORKDIR /app | |
| COPY uv.lock pyproject.toml /app/ | |
| RUN uv sync | |
| # Copy application files in one layer | |
| COPY aimakerspace/ /app/aimakerspace/ | |
| COPY api/ /app/api/ | |
| # Set up directories and copy frontend build files | |
| RUN mkdir -p /app/logs /app/static/css /app/static/js && \ | |
| chmod -R 777 /app/logs | |
| COPY --from=frontend-builder /app/frontend/build/static/css/* /app/static/css/ | |
| COPY --from=frontend-builder /app/frontend/build/static/js/* /app/static/js/ | |
| COPY --from=frontend-builder /app/frontend/build/index.html /app/static/ | |
| COPY --from=frontend-builder /app/frontend/build/asset-manifest.json /app/static/ | |
| # Set ownership in one layer | |
| RUN chown -R appuser:appuser /app/logs | |
| # Set environment variables in one layer | |
| ENV PYTHONPATH=/app \ | |
| PORT=7860 \ | |
| HOST=0.0.0.0 \ | |
| LANGCHAIN_TRACING_V2=true \ | |
| LANGSMITH_TRACING=true \ | |
| LANGSMITH_PROJECT=pythonic-rag \ | |
| LANGSMITH_ENDPOINT=https://api.smith.langchain.com | |
| # Expose the Hugging Face required port | |
| EXPOSE 7860 | |
| # Switch to non-root user | |
| USER appuser | |
| # Start the application | |
| CMD ["uv", "run", "uvicorn", "api.main:app", "--host", "0.0.0.0", "--port", "7860"] |