You've already forked pruchase_jhw
Docker打包
This commit is contained in:
+68
@@ -0,0 +1,68 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
# 基础镜像版本必须与 uv.lock 中的 playwright 版本一致(当前 1.60.0),
|
||||
# 浏览器二进制与系统依赖已预装在 /ms-playwright。
|
||||
FROM mcr.microsoft.com/playwright/python:v1.60.0-noble
|
||||
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
# X 虚拟桌面 + VNC/noVNC + 录屏/截图/图像匹配运行依赖 + 日文字体 + 进程编排
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
xvfb \
|
||||
fluxbox \
|
||||
x11vnc \
|
||||
novnc \
|
||||
websockify \
|
||||
ffmpeg \
|
||||
scrot \
|
||||
libgl1 \
|
||||
fonts-noto-cjk \
|
||||
supervisor \
|
||||
curl \
|
||||
tzdata \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /usr/local/bin/
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# 私有 PyPI 索引(git.jerryyan.net)若需要认证,构建时传入:
|
||||
# docker build --build-arg UV_INDEX_JERRYYAN_USERNAME=xxx --build-arg UV_INDEX_JERRYYAN_PASSWORD=xxx .
|
||||
ARG UV_INDEX_JERRYYAN_USERNAME
|
||||
ARG UV_INDEX_JERRYYAN_PASSWORD
|
||||
|
||||
# 依赖层缓存:仅复制依赖清单后同步,源码变更不触发依赖重装
|
||||
COPY pyproject.toml uv.lock ./
|
||||
RUN --mount=type=cache,target=/root/.cache/uv uv sync --frozen --no-dev
|
||||
|
||||
COPY src ./src
|
||||
COPY resources ./resources
|
||||
COPY .env.prod ./.env.prod
|
||||
|
||||
# 容器配置模板:运行时若挂载的 /app/config 中无 accounts.yaml,entrypoint 会用它初始化
|
||||
COPY deploy/config/accounts.yaml /app/deploy-defaults/accounts.yaml
|
||||
|
||||
COPY docker/supervisord.conf /etc/supervisor/supervisord.conf
|
||||
COPY docker/entrypoint.sh /entrypoint.sh
|
||||
# 防御 Windows 仓库 CRLF 换行导致脚本无法执行
|
||||
RUN sed -i 's/\r$//' /entrypoint.sh && chmod +x /entrypoint.sh
|
||||
|
||||
ENV APP_ENV=prod \
|
||||
TZ=Asia/Shanghai \
|
||||
DISPLAY=:99 \
|
||||
SCREEN_RES=1920x1080x24 \
|
||||
ACCOUNTS_CONFIG_PATH=/app/config/accounts.yaml \
|
||||
PYTHONUNBUFFERED=1
|
||||
|
||||
# 关键数据声明为卷(兜底):即使 docker run 时未显式挂载,
|
||||
# 浏览器登录态(accounts 的 user_data_dir 父目录)与账号配置也会落入匿名卷持久化。
|
||||
# accounts.yaml 中每个账号的 user_data_dir 都应指向 /app/chrome-profile/ 下的子目录。
|
||||
VOLUME ["/app/chrome-profile", "/app/config"]
|
||||
|
||||
# 6080: noVNC web | 5900: 原生 VNC | 8080: 截图/账号配置 API
|
||||
EXPOSE 5900 6080 8080
|
||||
|
||||
# 启动需等待 Xvfb + 浏览器预热 + API 拉起
|
||||
HEALTHCHECK --interval=30s --timeout=5s --start-period=120s --retries=3 \
|
||||
CMD curl -fs "http://localhost:8080/api/screenshots?days=1" > /dev/null || exit 1
|
||||
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
||||
Reference in New Issue
Block a user