Project code:
FROM python:3.11-slim
ENV PYTHONUNBUFFERED=1 \
POETRY_VIRTUALENVS_CREATE=false \
PIP_NO_CACHE_DIR=off \
PIP_DISABLE_PIP_VERSION_CHECK=on
WORKDIR /app
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
libpq-dev \
curl \
ffmpeg \
libjpeg-dev \
zlib1g-dev \
&& rm -rf /var/lib/apt/lists/*
COPY requirements.txt /app/
RUN pip install --upgrade pip && pip install -r requirements.txt
COPY . /app
COPY ./entrypoint.sh /app/entrypoint.sh
RUN chmod +x /app/entrypoint.sh
EXPOSE 8000
ENTRYPOINT ["/app/entrypoint.sh"]
CMD ["gunicorn", "learnshare.wsgi:application", "--bind", "0.0.0.0:8000", "--workers", "3"].
version: "3.8"
services:
web:
build: .
image: learnshare:web
container_name: learnshare_web
ports:
- "8000:8000"
environment:
- DEBUG=1
- SECRET_KEY=change-me-in-production
volumes:
- ./:/app:rw
- static_volume:/app/static
- media_volume:/app/media
depends_on: []
restart: unless-stopped
volumes:
static_volume:
media_volume:
#!/usr/bin/env bash
set -e
if [ -f /app/manage.py ]; then
python manage.py makemigrations --noinput || true
python manage.py migrate --noinput
python manage.py collectstatic --noinput
fi
exec "$@"
#!/usr/bin/env bash
set -e
if [ -f /app/manage.py ]; then
python manage.py makemigrations --noinput || true
python manage.py migrate --noinput
python manage.py collectstatic --noinput
fi
exec "$@"