Skip to content

Commit 9392bab

Browse files
committed
refactor: update Dockerfile to streamline environment setup and improve user permissions
1 parent 038dc97 commit 9392bab

1 file changed

Lines changed: 35 additions & 26 deletions

File tree

Dockerfile

Lines changed: 35 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,61 @@
11
# ── base: shared setup ────────────────────────────────────────────────────────
22
FROM python:3.13-slim AS base
33

4-
ENV PYTHONDONTWRITEBYTECODE=1 \
5-
PYTHONUNBUFFERED=1 \
6-
PYTHONPATH=/app/src
4+
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
75

86
WORKDIR /app
97

10-
RUN apt-get update \
11-
&& apt-get install -y --no-install-recommends \
12-
build-essential \
13-
&& rm -rf /var/lib/apt/lists/*
8+
ENV PYTHONDONTWRITEBYTECODE=1 \
9+
PYTHONUNBUFFERED=1 \
10+
PYTHONPATH=/app/src \
11+
UV_COMPILE_BYTECODE=1 \
12+
UV_LINK_MODE=copy \
13+
UV_PYTHON_DOWNLOADS=0
14+
15+
COPY pyproject.toml uv.lock README.md ./
1416

15-
RUN pip install poetry
17+
RUN uv sync --locked --no-install-project --group api --group dashboard
1618

17-
COPY pyproject.toml poetry.lock ./
1819
COPY src ./src
1920

21+
RUN uv sync --locked --no-dev --group api --group dashboard
22+
2023
# ── api ────────────────────────────────────────────────────────────────────────
21-
FROM base AS api
24+
FROM python:3.13-slim AS api
25+
WORKDIR /app
2226

23-
RUN poetry install --only main,api --no-root
27+
RUN useradd -m appuser
28+
RUN chown -R appuser:appuser /app
2429

30+
COPY --from=base --chown=appuser:appuser /app /app
2531
COPY builds.db ./
2632

27-
ENV API_HOST=localhost \
28-
API_PORT=8050
33+
ENV PYTHONPATH=/app/.venv/bin:$PATH
34+
ENV PYTHONBUFFERED=1
35+
ENV API_HOST=localhost
36+
ENV API_PORT=8050
2937

3038
EXPOSE 8050
3139

32-
CMD [ \
33-
"poetry", "run", \
34-
"python", "-m", "api.main" \
35-
]
40+
# Start FastAPI using uvicorn from the project virtualenv.
41+
CMD ["/bin/sh", "-c", "exec /app/.venv/bin/uvicorn api.main:app --host 0.0.0.0 --port \"${API_PORT}\" --proxy-headers --forwarded-allow-ips='*'"]
3642

3743
# ── dashboard ──────────────────────────────────────────────────────────────────
38-
FROM base AS dashboard
44+
FROM python:3.13-slim AS dashboard
45+
WORKDIR /app
46+
47+
RUN useradd -m appuser
48+
RUN chown -R appuser:appuser /app
3949

40-
RUN poetry install --only main,dashboard --no-root
50+
COPY --from=base --chown=appuser:appuser /app /app
4151

42-
ENV API_HOST=localhost \
43-
API_PORT=8050
52+
ENV PYTHONPATH=/app/.venv/bin:$PATH
53+
ENV PYTHONBUFFERED=1
54+
ENV API_HOST=localhost
55+
ENV API_PORT=8050
4456

4557
EXPOSE 8501
4658

47-
CMD [ \
48-
"poetry", "run", \
49-
"streamlit", "run", "src/dashboard/dashboard.py", \
50-
"--server.address=0.0.0.0", \
51-
"--server.port=8501" \
59+
CMD ["/bin/sh", "-c", \
60+
"exec /app/.venv/bin/streamlit run src/dashboard/dashboard.py --server.address=0.0.0.0 --server.port=8501" \
5261
]

0 commit comments

Comments
 (0)