40 lines
1.3 KiB
Docker
40 lines
1.3 KiB
Docker
# Default image for a pip-based Python web app (Flask via gunicorn).
|
|
# ADJUST the CMD at the bottom to match the app's entry point.
|
|
FROM python:3.12-slim
|
|
|
|
WORKDIR /app
|
|
ENV PYTHONUNBUFFERED=1 PIP_NO_CACHE_DIR=1
|
|
|
|
# sqlite3 CLI is used by the backup snapshot; curl for healthchecks.
|
|
RUN apt-get update \
|
|
&& apt-get install -y --no-install-recommends sqlite3 curl \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
COPY requirements.txt .
|
|
RUN pip install -r requirements.txt && pip install gunicorn requests
|
|
|
|
COPY . .
|
|
|
|
# Persistent data lives on a mounted volume, not in the image.
|
|
RUN mkdir -p /data/uploads/suggestions
|
|
|
|
COPY entrypoint.sh /entrypoint.sh
|
|
RUN chmod +x /entrypoint.sh
|
|
|
|
EXPOSE 8000
|
|
ENTRYPOINT ["/entrypoint.sh"]
|
|
|
|
# ---- ADJUST THIS LINE to the app's real entry point ----
|
|
# Flask (app object named `app` in app.py):
|
|
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "--workers", "2", "app:app"]
|
|
#
|
|
# FastAPI (app object named `app` in main.py) — swap the CMD for:
|
|
# RUN pip install "uvicorn[standard]"
|
|
# CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
|
|
#
|
|
# Django (project package `mysite`):
|
|
# CMD ["gunicorn", "--bind", "0.0.0.0:8000", "mysite.wsgi:application"]
|
|
#
|
|
# Streamlit:
|
|
# CMD ["streamlit", "run", "app.py", "--server.port=8000", "--server.address=0.0.0.0"]
|