File size: 2,669 Bytes
6cfe55f
 
 
 
 
 
 
 
f966728
6cfe55f
 
 
 
f966728
6cfe55f
 
 
 
 
 
f966728
6cfe55f
 
f966728
 
 
 
 
 
 
 
6cfe55f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# 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"]