All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 1m40s
- core/frontend: Vite 多阶段镜像 + nginx 同源反代 /api,/admin,/static(零 CORS) - core/backend: Django gunicorn 镜像 + entrypoint(自动 migrate/collectstatic)+ WhiteNoise - k8s/core: api/worker/web Deployment+Service + ingress(airshelf-web.airlabs.art) - workflow: 追加 core 前后端 build/push,从 core/backend/.env 套生产覆盖生成 env Secret 后部署 - .gitignore 放行 core/backend/.env;.env 白名单加入 airshelf-web 域名 - 含前端 WIP 还原改动 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
27 lines
896 B
Docker
27 lines
896 B
Docker
# ---- 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"]
|