- 集中维护 Dockerfile,使用多阶段构建和 Bun 独立可执行文件 - 提供 MCP 浏览器镜像,保留中文与 Emoji 字体并校验下载完整性 - 配置健康检查、非 root 运行、内部网络和持久化数据卷 - 增加容器端到端验证脚本,覆盖模型调用、浏览器启动及数据恢复 - 重组 README,精简部署、配置和开发说明
102 lines
3.4 KiB
Docker
102 lines
3.4 KiB
Docker
# syntax=docker/dockerfile:1
|
|
|
|
# 构建上下文为项目根目录;使用已固定的上游子模块源码。
|
|
FROM golang:1.24-alpine AS build
|
|
|
|
WORKDIR /src
|
|
|
|
COPY modules/xiaohongshu-mcp/go.mod modules/xiaohongshu-mcp/go.sum ./
|
|
RUN --mount=type=cache,target=/go/pkg/mod \
|
|
go mod download
|
|
|
|
COPY modules/xiaohongshu-mcp/ ./
|
|
|
|
# 静态编译 MCP,移除调试信息;依赖与编译缓存不进入运行镜像。
|
|
RUN --mount=type=cache,target=/go/pkg/mod \
|
|
--mount=type=cache,target=/root/.cache/go-build \
|
|
CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o /out/mcp .
|
|
|
|
FROM debian:bookworm-slim AS browser
|
|
|
|
RUN apt-get update \
|
|
&& apt-get install -y --no-install-recommends ca-certificates curl xz-utils \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# 与 Go 端读取同一版本文件,下载后校验上游 SHA256。
|
|
COPY modules/xiaohongshu-mcp/browser/browser_version.txt /tmp/browser-version
|
|
|
|
# Rod 通过 CDP 连接浏览器,不需要 ChromeDriver;语言包只保留中文和英文。
|
|
RUN set -eu; \
|
|
version="$(tr -d '[:space:]' </tmp/browser-version)"; \
|
|
base="https://cdn.one-world.ai/browsers/${version}"; \
|
|
destination="/browser/xiaohongshu-mcp/browser/${version}"; \
|
|
mkdir -p "$destination"; \
|
|
curl -fSL --retry 3 "$base/linux-x64.tar.xz" -o /tmp/browser.tar.xz; \
|
|
curl -fsSL --retry 3 "$base/SHA256SUMS" -o /tmp/SHA256SUMS; \
|
|
awk '$2 == "linux-x64.tar.xz" {print $1 " /tmp/browser.tar.xz"}' /tmp/SHA256SUMS >/tmp/browser.sha256; \
|
|
test -s /tmp/browser.sha256; \
|
|
sha256sum -c /tmp/browser.sha256; \
|
|
tar -xJf /tmp/browser.tar.xz -C "$destination" --strip-components=1; \
|
|
test -x "$destination/chrome"; \
|
|
if [ -d "$destination/locales" ]; then \
|
|
find "$destination/locales" -type f \
|
|
! -name 'en-US.pak' ! -name 'zh-CN.pak' -delete; \
|
|
fi; \
|
|
rm -f "$destination/chromedriver"
|
|
|
|
# 安装内置浏览器的动态依赖以及中文、Emoji 字体。
|
|
FROM debian:bookworm-slim AS runtime
|
|
|
|
RUN apt-get update \
|
|
&& apt-get install -y --no-install-recommends \
|
|
ca-certificates \
|
|
curl \
|
|
fonts-noto-color-emoji \
|
|
fonts-wqy-zenhei \
|
|
libasound2 \
|
|
libatk-bridge2.0-0 \
|
|
libatk1.0-0 \
|
|
libcairo2 \
|
|
libcups2 \
|
|
libdrm2 \
|
|
libgbm1 \
|
|
libnspr4 \
|
|
libnss3 \
|
|
libpango-1.0-0 \
|
|
libx11-xcb1 \
|
|
libxcomposite1 \
|
|
libxdamage1 \
|
|
libxfixes3 \
|
|
libxkbcommon0 \
|
|
libxrandr2 \
|
|
&& rm -rf /var/lib/apt/lists/* \
|
|
&& groupadd --gid 10001 upup \
|
|
&& useradd --uid 10001 --gid upup --no-create-home upup \
|
|
&& mkdir -p /app/data/home /app/data/config /app/images \
|
|
&& chown -R upup:upup /app
|
|
|
|
WORKDIR /app
|
|
|
|
COPY --from=build /out/mcp /usr/local/bin/xiaohongshu-mcp
|
|
COPY --from=browser /browser /opt/browser
|
|
|
|
# 缺少浏览器依赖时在构建阶段报错。
|
|
RUN ldd /opt/browser/xiaohongshu-mcp/browser/*/chrome >/tmp/browser-libraries \
|
|
&& ! grep -q 'not found' /tmp/browser-libraries \
|
|
&& rm /tmp/browser-libraries
|
|
|
|
# 浏览器二进制留在镜像中,避免被数据卷覆盖;登录态与用户配置写入数据卷。
|
|
ENV XDG_CACHE_HOME=/opt/browser \
|
|
HOME=/app/data/home \
|
|
XDG_CONFIG_HOME=/app/data/config \
|
|
COOKIES_PATH=/app/data/cookies.json
|
|
|
|
USER upup
|
|
|
|
EXPOSE 18060
|
|
|
|
HEALTHCHECK --interval=15s --timeout=5s --start-period=10s --retries=3 \
|
|
CMD curl -fsS http://127.0.0.1:18060/health >/dev/null || exit 1
|
|
|
|
ENTRYPOINT ["/usr/local/bin/xiaohongshu-mcp"]
|