| |
| FROM node:18 AS frontend-builder |
| WORKDIR /app/frontend |
| COPY frontend/package*.json ./ |
| RUN npm install |
| COPY frontend/ ./ |
| |
| ENV NODE_ENV=production |
| RUN npm run build |
|
|
| |
| FROM ghcr.io/astral-sh/uv:python3.13-bookworm-slim |
|
|
| |
| RUN apt-get update && apt-get install -y nginx && rm -rf /var/lib/apt/lists/* |
|
|
| |
| RUN mkdir /app && \ |
| useradd -m -u 1000 user && \ |
| chown -R user:user /app |
|
|
| |
| WORKDIR /app |
|
|
| |
| COPY --chown=user . /app |
|
|
| |
| COPY --from=frontend-builder --chown=user /app/frontend/build /app/static |
|
|
| |
| COPY nginx.conf /etc/nginx/nginx.conf |
| RUN mkdir -p /var/log/nginx && \ |
| chown -R user:user /var/log/nginx && \ |
| chown -R user:user /var/lib/nginx && \ |
| touch /var/run/nginx.pid && \ |
| chown -R user:user /var/run/nginx.pid |
|
|
| |
| USER user |
|
|
| |
| ENV HOME=/home/user \ |
| PATH=/home/user/.local/bin:$PATH \ |
| UVICORN_WS_PROTOCOL=websockets |
|
|
| |
| RUN uv sync |
|
|
| |
| RUN echo '#!/bin/bash\n\ |
| nginx -g "daemon off;" &\n\ |
| source /app/.venv/bin/activate && exec uvicorn api:app --host 0.0.0.0 --port 8000\n\ |
| ' > /app/start.sh && chmod +x /app/start.sh |
|
|
| |
| EXPOSE 7860 |
|
|
| |
| CMD ["./start.sh"] |