FROM python:3.12-slim WORKDIR /app # 安装系统依赖 RUN apt-get update && apt-get install -y \ gcc \ default-libmysqlclient-dev \ pkg-config \ && rm -rf /var/lib/apt/lists/* # 复制依赖文件 COPY requirements.txt . # 安装Python依赖 RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple # 复制项目代码 COPY . . # 暴露端口 EXPOSE 8000 # 启动命令 - 运行迁移、收集静态文件,并使用 Granian(Rust) 以 ASGI 接口启动 # Granian 性能远超 Daphne,原生支持 ASGI/WebSocket(Channels ProtocolTypeRouter) # 注意:ASGI 接口下 blocking-threads 必须为 1(Granian 限制),并发由事件循环承担 CMD python manage.py migrate --noinput && \ python manage.py collectstatic --noinput && \ granian --interface asgi --host 0.0.0.0 --port 8000 \ --workers 2 --backlog 2048 \ --log-level info chunyu_project.asgi:application