videoNote / Dockerfile
zhoujiaangyao
feat: 镜像装 Node20 + @larksuite/cli,支持飞书 lark CLI 推送
f966728
Raw
History Blame Contribute Delete
2.67 kB
# VideoMemo 后端 —— Hugging Face Spaces(Docker SDK)部署用 Dockerfile。
#
# 用法:HF Space 是一个独立 git 仓库,把它的根目录布置成:
# /Dockerfile ← 本文件(复制到 Space 根目录,重命名为 Dockerfile)
# /README.md ← deploy/hf-space/README.md(含 HF 必需的 frontmatter)
# /backend/... ← 从本项目复制整个 backend 目录过去
# 然后 git push 到 Space,HF 会构建本文件(COPY 路径相对 Space 根目录)。
#
# 镜像:ffmpeg + 后端依赖 + 官方 lark CLI(飞书「lark CLI / 自动」推送用)。
# 数据库用外接 Postgres(Supabase),通过 DATABASE_URL Secret 注入。
ARG BASE_REGISTRY=docker.io
FROM ${BASE_REGISTRY}/library/python:3.11-slim
# HF 在 huggingface.co 自家基础设施上构建/运行:用官方 PyPI / npm 源,
# 不要用国内镜像(那会更慢甚至失败)。
ARG PIP_INDEX=https://pypi.org/simple
# fonts-liberation 提供与 Arial 度量兼容的 LiberationSans,替代仓库里的 arial.ttf
# (HF git 不收二进制,故字体不进仓库,改由镜像在构建时提供)
RUN apt-get update && \
apt-get install -y --no-install-recommends ffmpeg curl fonts-liberation ca-certificates gnupg && \
rm -rf /var/lib/apt/lists/*
# 飞书「推送方式 = lark CLI / 自动」时需要官方 lark CLI(npm 包 @larksuite/cli,二进制 lark-cli)。
# slim 自带 Node 太旧,用 NodeSource 装 Node 20。走 REST 直连推送则用不到本段。
RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \
apt-get update && apt-get install -y --no-install-recommends nodejs && \
npm install -g @larksuite/cli && \
rm -rf /var/lib/apt/lists/* /root/.npm && \
(lark-cli --version || true)
ENV PYTHONUNBUFFERED=1 \
BACKEND_HOST=0.0.0.0 \
BACKEND_PORT=8483 \
STATIC=/static \
OUT_DIR=/app/static/screenshots \
IMAGE_BASE_URL=/static/screenshots \
NOTE_OUTPUT_DIR=/app/data/note_results \
DATA_DIR=/app/data
WORKDIR /app
# 先装依赖利用层缓存
COPY backend/requirements.txt /app/requirements.txt
RUN pip install --no-cache-dir -i ${PIP_INDEX} -r requirements.txt
# 再复制后端代码
COPY backend /app
# 预建可写目录(HF 容器以 root 运行,这些目录是临时盘——重启会清空,
# 所以结构化数据务必走外接 DATABASE_URL;笔记/截图属临时数据,后续可再迁对象存储)
RUN mkdir -p /app/data/note_results /app/static/screenshots /app/config /app/fonts && \
cp /usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf /app/fonts/arial.ttf
EXPOSE 8483
CMD ["python", "main.py"]