# goodNews web/API image. # # The SQLite database is NOT baked into the image — mount it at /data so the API # and the ingestion CLI (run separately, e.g. via cron on the host) share one # file. Build: docker build -t goodnews . # Run: docker run -p 8000:8000 -v /srv/goodnews/data:/data goodnews FROM python:3.13-slim WORKDIR /app # Install dependencies first for better layer caching. COPY pyproject.toml README.md ./ COPY goodnews ./goodnews RUN pip install --no-cache-dir ".[web]" # API reads the database from here; mount a host dir or named volume. ENV GOODNEWS_DB=/data/goodnews.sqlite3 VOLUME ["/data"] EXPOSE 8000 CMD ["uvicorn", "goodnews.api:app", "--host", "0.0.0.0", "--port", "8000"]