39 lines
1.2 KiB
Docker
39 lines
1.2 KiB
Docker
FROM python:3.11-slim
|
||
|
||
# 运行时基础环境
|
||
ENV PYTHONDONTWRITEBYTECODE=1 \
|
||
PYTHONUNBUFFERED=1
|
||
|
||
WORKDIR /app
|
||
|
||
# 系统依赖(按需扩展;多数依赖为纯 Python)
|
||
RUN apt-get update \
|
||
&& apt-get install -y --no-install-recommends build-essential curl \
|
||
&& rm -rf /var/lib/apt/lists/*
|
||
|
||
# 先复制依赖清单以利用 Docker layer cache
|
||
COPY requirements.txt /app/requirements.txt
|
||
RUN python -m pip install -U pip \
|
||
&& pip install --no-cache-dir -r /app/requirements.txt
|
||
|
||
# 复制后端代码与迁移配置
|
||
COPY app /app/app
|
||
COPY alembic /app/alembic
|
||
COPY alembic.ini /app/alembic.ini
|
||
COPY docker-entrypoint.sh /app/docker-entrypoint.sh
|
||
|
||
RUN chmod +x /app/docker-entrypoint.sh
|
||
|
||
EXPOSE 8000
|
||
|
||
# 注意:
|
||
# - 镜像内不会打包 `.env.dev/.env.prod`(避免把敏感信息烘焙进镜像)
|
||
# - 运行容器时请通过 `--env-file` 或 `-e` 注入 DATABASE_URL / REDIS_URL / CELERY_BROKER_URL
|
||
# - 参考文档:server/README.md
|
||
|
||
# 生产镜像默认不开启 reload
|
||
# 默认行为:只启动 API(与之前一致)
|
||
# 如需同时启动定时推送相关进程(Celery Worker/Beat),可在运行时注入:
|
||
# -e START_ALL=1
|
||
ENTRYPOINT ["/app/docker-entrypoint.sh"]
|