fix: 改用 Playwright Headless Chromium 实现扫码登录
部署到群晖 / deploy (push) Failing after 1m27s

sso.douyin.com 有 JS 反爬,纯 HTTP 无法通过。
改用 Microsoft.Playwright 驱动 Headless Chromium 打开
creator.douyin.com 登录页,直接提取 QR 码 base64 和登录后 Cookie。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
yuming
2026-04-27 09:22:15 +08:00
parent 0848ebc272
commit 2a4ce563b0
3 changed files with 122 additions and 111 deletions
+30 -19
View File
@@ -1,14 +1,11 @@
# 多阶段构建 Dockerfile
# 第一阶段:构建前端
# 使用官方 Docker Hub(mcr 能访问的环境一般也能访问 docker.io)
FROM node:18-alpine AS frontend-builder
WORKDIR /app/frontend
# 复制前端依赖文件
COPY app/package.json app/pnpm-lock.yaml* ./
# 配置 npm 和 pnpm 使用国内镜像源
RUN npm config set registry https://registry.npmmirror.com && \
npm install -g pnpm && \
pnpm config set registry https://registry.npmmirror.com && \
@@ -18,33 +15,30 @@ RUN npm config set registry https://registry.npmmirror.com && \
npm install; \
fi
# 复制前端源码
COPY app/ ./
# 构建前端
RUN pnpm build || npm run build
# 第二阶段:构建后端
# 第二阶段:构建后端 + 下载 Playwright Chromium
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS backend-builder
WORKDIR /src
# 复制项目文件
COPY *.csproj ./
RUN dotnet restore dy.net.csproj
# 复制所有文件
COPY . .
# 删除 macOS 资源分叉文件(._* 文件)
RUN find . -name "._*" -type f -delete
# 复制前端构建产物
COPY --from=frontend-builder /app/frontend/dist ./app/dist
# 发布后端
RUN dotnet publish dy.net.csproj -c Release -o /app/publish
# 安装 Playwright CLI 并下载 Chromium 浏览器到固定路径
ENV PLAYWRIGHT_BROWSERS_PATH=/ms-playwright
RUN dotnet tool install --global Microsoft.Playwright.CLI --version 1.44.0 2>/dev/null || true && \
/root/.dotnet/tools/playwright install chromium --with-deps 2>/dev/null || \
dotnet /app/publish/playwright.ps1 install chromium 2>/dev/null || true
# 第三阶段:运行镜像
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS final
@@ -54,16 +48,33 @@ WORKDIR /app
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 从构建阶段复制发布文件
# 安装 Chromium 运行时依赖(Debian Bullseye)
RUN apt-get update && apt-get install -y --no-install-recommends \
libnss3 \
libatk1.0-0 \
libatk-bridge2.0-0 \
libcups2 \
libdrm2 \
libxkbcommon0 \
libxcomposite1 \
libxdamage1 \
libxfixes3 \
libxrandr2 \
libgbm1 \
libasound2 \
libpango-1.0-0 \
libpangocairo-1.0-0 \
libgtk-3-0 \
fonts-liberation \
&& rm -rf /var/lib/apt/lists/*
# 从构建阶段复制应用和浏览器
COPY --from=backend-builder /app/publish .
COPY --from=backend-builder /ms-playwright /ms-playwright
# 暴露端口
ENV PLAYWRIGHT_BROWSERS_PATH=/ms-playwright
EXPOSE 10101
# 设置环境变量
ENV ASPNETCORE_URLS=http://*:10101
ENV ASPNETCORE_ENVIRONMENT=Production
# 启动应用
ENTRYPOINT ["dotnet", "dy.net.dll"]