43 lines
1.1 KiB
Docker
43 lines
1.1 KiB
Docker
################
|
|
# Stage: Build #
|
|
################
|
|
|
|
FROM python:3.13-slim AS build
|
|
|
|
WORKDIR /app
|
|
|
|
# Export poetry dependencies to file
|
|
RUN pip install --upgrade pip
|
|
RUN pip install poetry poetry-plugin-export
|
|
COPY poetry.lock pyproject.toml ./
|
|
RUN poetry lock
|
|
RUN poetry export --without-hashes --format requirements.txt --output /app/requirements.txt
|
|
|
|
#####################
|
|
# Stage: Production #
|
|
#####################
|
|
FROM python:3.13-slim AS prod
|
|
|
|
# ENV PYTHONPATH=/app
|
|
|
|
WORKDIR /app
|
|
|
|
# Copy requirements from build stage, and install them
|
|
COPY --from=build /app/requirements.txt .
|
|
RUN pip install --upgrade pip
|
|
RUN pip install --no-cache-dir "fastapi[standard]"
|
|
RUN pip install --no-cache-dir -r requirements.txt
|
|
|
|
COPY . .
|
|
|
|
# Create a non-root user to run the web server
|
|
RUN adduser -u 5678 --disabled-password --gecos "" appuser && chown -R appuser /app
|
|
USER appuser
|
|
|
|
# Run server
|
|
EXPOSE 8001
|
|
# CMD ["gunicorn", "--bind", "0.0.0.0:8001", "main_package.app:app"]
|
|
# CMD ["uvicorn", "main_package.app:app", "--reload", "--host", "0.0.0.0", "--port", "8001", "--proxy-headers"]
|
|
CMD ["fastapi", "run", "main_package/app.py", "--reload", "--port", "8001", "--proxy-headers"]
|
|
|