Files
rdgen/Dockerfile
T

34 lines
1.1 KiB
Docker

FROM python:3.13-alpine
ENV PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
PIP_NO_CACHE_DIR=1
WORKDIR /opt/rdgen
# 先单独安装依赖,尽量复用 Docker 层缓存
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 拷贝项目源码
COPY . .
# su-exec 用于在入口脚本中降权运行;创建非 root 用户与数据目录;
# 预收集静态文件(WhiteNoise 直接由应用进程对外提供)
RUN apk add --no-cache su-exec wget \
&& adduser -D -u 1000 appuser \
&& mkdir -p exe png temp_zips data static \
&& sed -i 's/\r$//' docker-entrypoint.sh \
&& chmod +x docker-entrypoint.sh \
&& python manage.py collectstatic --noinput \
&& chown -R appuser:appuser /opt/rdgen
EXPOSE 8000
# 健康检查:业务根路径需要登录会 302,故检查专用的 /healthz
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
CMD wget -q -O /dev/null http://127.0.0.1:8000/healthz/ || exit 1
ENTRYPOINT ["./docker-entrypoint.sh"]
CMD ["gunicorn", "-c", "gunicorn.conf.py", "rdgen.wsgi:application"]