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"]
|