File size: 2,141 Bytes
ce66478
644bdfe
 
22f28c2
644bdfe
9c1e1f6
 
 
22f28c2
644bdfe
9c1e1f6
 
ab0f837
9c1e1f6
bedc715
22f28c2
 
644bdfe
4bae965
377105f
 
74cc69f
a089a6b
9c1e1f6
6b673ac
bedc715
a089a6b
 
 
22f28c2
 
 
bedc715
d45babc
 
 
377105f
 
 
 
9123b55
bedc715
9c1e1f6
 
 
 
644bdfe
9b88aa8
a1be2d1
377105f
372d551
78a34c3
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

FROM python:3.10-slim

# ── Base OS packages ───────────────────────────────────────────────
RUN apt-get update && apt-get install -y --no-install-recommends \
    gcc python3-dev openssl curl ca-certificates gnupg build-essential \
    && rm -rf /var/lib/apt/lists/*

# ── MariaDB client libs ────────────────────────────────────────────
RUN curl -LsSO https://r.mariadb.com/downloads/mariadb_repo_setup && \
    chmod +x mariadb_repo_setup && ./mariadb_repo_setup --mariadb-server-version="mariadb-11.7" && \
    apt-get update && apt-get install -y --no-install-recommends \
    mariadb-server mariadb-client libmariadb3 libmariadb-dev && \
    apt-get clean && rm -rf /var/lib/apt/lists/*

# ── Python tooling ────────────────────────────────────────────────
RUN pip install --no-cache-dir uv==0.1.37


# MariaDB needs to run as root or mysql user for permissions on /var/lib/mysql
# We'll run the app as user later, but keep root for DB startup
WORKDIR /app
# Copy project files
COPY . /app
RUN chmod +x /app/entrypoint.sh

# Ensure our src/ is on the Python path so our local code is used
ENV PYTHONPATH=/app/src

# Install project (editable) + FastAPI stack in one layer
RUN uv pip install -e . --system && \
    uv pip install fastapi uvicorn[standard] --system

# Fix permissions so the unprivileged user can write to /app and .egg-info
RUN chown -R user:user /app

# Ensure /var/lib/mysql exists and is owned by root (MariaDB default)
RUN mkdir -p /var/lib/mysql && chown -R root:root /var/lib/mysql

# ── Remain as root for DB startup ──

ENV HOME=/home/user \
    PATH=/home/user/.local/bin:$PATH \
    UV_NO_CACHE=1 \
    UV_CACHE_DIR=/dev/null \
    PORT=7860

EXPOSE 7860

# Entrypoint starts MariaDB, waits, then launches app
ENTRYPOINT ["/app/entrypoint.sh"]
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"]