|
|
|
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"] |