40 lines
1.1 KiB
Docker
40 lines
1.1 KiB
Docker
# Stage 1: init
|
|
FROM python:3.11 as init
|
|
|
|
# Pass `--build-arg API_URL=http://app.example.com:8000` during build
|
|
ARG API_URL
|
|
|
|
# Copy local context to `/app` inside container (see .dockerignore)
|
|
WORKDIR /app
|
|
COPY . .
|
|
|
|
# Create virtualenv which will be copied into final container
|
|
ENV VIRTUAL_ENV=/app/.venv
|
|
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
|
|
RUN python3.11 -m venv $VIRTUAL_ENV
|
|
|
|
# Install app requirements and reflex inside virtualenv
|
|
RUN pip install -r requirements.txt
|
|
|
|
# Deploy templates and prepare app
|
|
RUN reflex init
|
|
|
|
# Export static copy of frontend to /app/.web/_static
|
|
RUN reflex export --frontend-only --no-zip
|
|
|
|
# Copy static files out of /app to save space in backend image
|
|
RUN mv .web/_static /tmp/_static
|
|
RUN rm -rf .web && mkdir .web
|
|
RUN mv /tmp/_static .web/_static
|
|
|
|
# Stage 2: copy artifacts into slim image
|
|
FROM python:3.11-slim
|
|
ARG API_URL
|
|
WORKDIR /app
|
|
RUN adduser --disabled-password --home /app reflex
|
|
COPY --chown=reflex --from=init /app /app
|
|
USER reflex
|
|
ENV PATH="/app/.venv/bin:$PATH" API_URL=$API_URL
|
|
|
|
CMD reflex db migrate && reflex run --env prod --backend-only
|