CatPtain commited on
Commit
267991c
·
verified ·
1 Parent(s): 74f46aa

Upload 2 files

Browse files
Files changed (2) hide show
  1. Dockerfile +49 -9
  2. server.js +8 -3
Dockerfile CHANGED
@@ -1,27 +1,67 @@
1
- # 最简 HF Spaces Dockerfile - 修复版
2
- FROM ghcr.io/puppeteer/puppeteer:21.5.2
3
 
4
- # 直接设置工作目录
5
- WORKDIR /usr/src/app
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6
 
7
  # 复制 package 文件
8
  COPY package*.json ./
9
 
10
- # 切换到 root 用户安装依赖
11
- USER root
12
-
13
- # 现在有了 package-lock.json,可以使用 npm ci
14
  RUN npm ci --only=production && npm cache clean --force
15
 
16
  # 复制应用代码
17
  COPY . .
18
 
19
- # 切换回非 root 用户
 
 
 
20
  USER pptruser
21
 
22
  # 设置环境变量
23
  ENV NODE_ENV=production
24
  ENV PORT=7860
 
 
25
 
26
  # 暴露端口
27
  EXPOSE 7860
 
1
+ # HF Spaces Dockerfile - 修复 Chrome 路径问题
2
+ FROM node:18-slim
3
 
4
+ # 安装必要的系统依赖
5
+ RUN apt-get update && apt-get install -y \
6
+ wget \
7
+ gnupg \
8
+ ca-certificates \
9
+ apt-transport-https \
10
+ --no-install-recommends
11
+
12
+ # 添加 Google Chrome 官方仓库
13
+ RUN wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | apt-key add - \
14
+ && echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list
15
+
16
+ # 安装 Chrome 和相关依赖
17
+ RUN apt-get update && apt-get install -y \
18
+ google-chrome-stable \
19
+ fonts-liberation \
20
+ libappindicator3-1 \
21
+ libasound2 \
22
+ libatk-bridge2.0-0 \
23
+ libdrm2 \
24
+ libgtk-3-0 \
25
+ libnspr4 \
26
+ libnss3 \
27
+ libx11-xcb1 \
28
+ libxcomposite1 \
29
+ libxdamage1 \
30
+ libxrandr2 \
31
+ libgbm1 \
32
+ libxss1 \
33
+ libgconf-2-4 \
34
+ --no-install-recommends \
35
+ && rm -rf /var/lib/apt/lists/*
36
+
37
+ # 创建非 root 用户
38
+ RUN groupadd -r pptruser && useradd -r -g pptruser -G audio,video pptruser \
39
+ && mkdir -p /home/pptruser/Downloads \
40
+ && chown -R pptruser:pptruser /home/pptruser
41
+
42
+ # 设置工作目录
43
+ WORKDIR /app
44
 
45
  # 复制 package 文件
46
  COPY package*.json ./
47
 
48
+ # 安装 Node.js 依赖
 
 
 
49
  RUN npm ci --only=production && npm cache clean --force
50
 
51
  # 复制应用代码
52
  COPY . .
53
 
54
+ # 更改所有权
55
+ RUN chown -R pptruser:pptruser /app
56
+
57
+ # 切换到非 root 用户
58
  USER pptruser
59
 
60
  # 设置环境变量
61
  ENV NODE_ENV=production
62
  ENV PORT=7860
63
+ ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
64
+ ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/google-chrome-stable
65
 
66
  # 暴露端口
67
  EXPOSE 7860
server.js CHANGED
@@ -73,9 +73,10 @@ app.post('/screenshot', async (req, res) => {
73
  try {
74
  console.log('Launching browser...');
75
 
76
- // HF Spaces 优化配置 - 使用 Puppeteer 镜像的默认 Chrome
77
- browser = await puppeteer.launch({
78
  headless: 'new',
 
79
  args: [
80
  '--no-sandbox',
81
  '--disable-setuid-sandbox',
@@ -89,7 +90,9 @@ app.post('/screenshot', async (req, res) => {
89
  '--disable-backgrounding-occluded-windows',
90
  '--disable-renderer-backgrounding'
91
  ]
92
- });
 
 
93
 
94
  const page = await browser.newPage();
95
 
@@ -151,6 +154,8 @@ app.post('/screenshot', async (req, res) => {
151
  errorResponse.suggestion = 'Try a simpler webpage or reduce timeout';
152
  } else if (error.message.includes('net::')) {
153
  errorResponse.suggestion = 'Check if the URL is accessible';
 
 
154
  }
155
 
156
  res.status(500).json(errorResponse);
 
73
  try {
74
  console.log('Launching browser...');
75
 
76
+ // HF Spaces 优化配置 - 明确指定 Chrome 路径
77
+ const browserOptions = {
78
  headless: 'new',
79
+ executablePath: '/usr/bin/google-chrome-stable',
80
  args: [
81
  '--no-sandbox',
82
  '--disable-setuid-sandbox',
 
90
  '--disable-backgrounding-occluded-windows',
91
  '--disable-renderer-backgrounding'
92
  ]
93
+ };
94
+
95
+ browser = await puppeteer.launch(browserOptions);
96
 
97
  const page = await browser.newPage();
98
 
 
154
  errorResponse.suggestion = 'Try a simpler webpage or reduce timeout';
155
  } else if (error.message.includes('net::')) {
156
  errorResponse.suggestion = 'Check if the URL is accessible';
157
+ } else if (error.message.includes('Chrome')) {
158
+ errorResponse.suggestion = 'Chrome installation issue, contact admin';
159
  }
160
 
161
  res.status(500).json(errorResponse);