FROM python:3.11-slim
WORKDIR /app
ENV PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential libpq-dev && rm -rf /var/lib/apt/lists/*
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["gunicorn", "-w", "2", "-b", "0.0.0.0:5000", "run:app"]
services:
db:
image: postgres:16-alpine
environment:
POSTGRES_USER: internship
POSTGRES_PASSWORD: internship
POSTGRES_DB: internship
volumes:
- pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U internship"]
interval: 5s
retries: 5
web:
build: .
environment:
SECRET_KEY: change-me-in-prod
DATABASE_URL: postgresql+psycopg2://internship:internship@db:5432/internship
ports:
- "5000:5000"
depends_on:
db:
condition: service_healthy
command: >
sh -c "flask --app run:app init-db &&
flask --app run:app seed-demo &&
gunicorn -w 2 -b 0.0.0.0:5000 run:app"
volumes:
pgdata: