-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathDockerfile
More file actions
78 lines (59 loc) · 1.71 KB
/
Copy pathDockerfile
File metadata and controls
78 lines (59 loc) · 1.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# syntax=docker/dockerfile:1
ARG PYTHON_VERSION=3.14
# ==============================
# Base stage: common setup
# ==============================
FROM python:${PYTHON_VERSION}-slim AS base
ARG USERNAME=pyuser
ARG GROUPNAME=${USERNAME}
ARG UID=1000
ARG GID=1000
ENV VIRTUAL_ENV="/code/.venv"
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
WORKDIR /code
RUN apt-get update && apt-get install -y --no-install-recommends \
git \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
RUN pip install -U pip && pip install uv
RUN groupadd -g ${GID} ${GROUPNAME} && \
useradd -m -u ${UID} -g ${GID} -s /bin/bash ${USERNAME}
RUN chown ${USERNAME}:${GROUPNAME} /code
USER ${USERNAME}
# ==============================
# Development stage:
# install dev dependencies and start dev server
# ==============================
FROM base AS dev
COPY pyproject.toml uv.lock ./
RUN uv sync --frozen
COPY --chown=${USERNAME}:${GROUPNAME} . .
RUN uv pip install -e .
ENV FLASK_ENV=development
ENV FLASK_APP="server.app"
ENV FLASK_RUN_HOST="0.0.0.0"
ENV FLASK_RUN_PORT=5050
ENV FLASK_DEBUG=1
EXPOSE 5050
CMD ["flask", "run", "--reload"]
# ==============================
# Production stage:
# install only prod dependencies and start prod server
# ==============================
FROM base AS prod
USER root
RUN apt-get update && \
apt-get install -y --no-install-recommends \
build-essential \
python3-dev \
libssl-dev \
libpcre2-dev \
supervisor && \
rm -rf /var/lib/apt/lists/*
RUN uv pip install uwsgi --system
COPY pyproject.toml uv.lock ./
RUN uv sync --no-dev --frozen
COPY . .
RUN uv pip install .
ENV FLASK_ENV=production
ENV FLASK_APP="server.app"
CMD ["/usr/bin/supervisord", "-c", "supervisord.web.conf"]