- FastAPI + APScheduler + SQLite, single container - Daily generation at 06:00 Europe/Copenhagen + cold-start generation - Retry with backoff (3 attempts/15 min), stale fallback with banner - OpenAI-compatible endpoint via env (OPENAI_BASE_URL/MODEL/API_KEY) - docker-compose with named volume for joke persistence
17 lines
379 B
Docker
17 lines
379 B
Docker
FROM python:3.12-slim
|
|
|
|
WORKDIR /srv/wiki-jokes
|
|
|
|
COPY requirements.txt .
|
|
RUN pip install --no-cache-dir -r requirements.txt
|
|
|
|
COPY app/ ./app/
|
|
|
|
# Run as non-root; /data is the SQLite volume mount point.
|
|
RUN useradd -m appuser && mkdir -p /data && chown -R appuser:appuser /data /srv
|
|
USER appuser
|
|
|
|
EXPOSE 8000
|
|
|
|
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
|