# ---- AirShelf core backend: Django + DRF + gunicorn / celery ---- FROM docker.m.daocloud.io/python:3.12-slim ENV PYTHONUNBUFFERED=1 \ PYTHONDONTWRITEBYTECODE=1 \ PIP_NO_CACHE_DIR=1 \ PIP_INDEX_URL=https://mirrors.aliyun.com/pypi/simple/ WORKDIR /app # PyMySQL is pure-python (install_as_MySQLdb), boto3/gunicorn need no C deps, # so the slim image is enough — no build-essential required. COPY requirements.txt . RUN pip install --upgrade pip && pip install -r requirements.txt COPY . . # Collected admin/static lands here; served by WhiteNoise (see settings/production.py) RUN mkdir -p /app/staticfiles COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh RUN chmod +x /usr/local/bin/docker-entrypoint.sh EXPOSE 8000 ENTRYPOINT ["docker-entrypoint.sh"] CMD ["gunicorn", "airshelf.wsgi:application", "--bind", "0.0.0.0:8000", "--workers", "3", "--timeout", "120"]