getzero11 commited on
Commit
da5cd59
·
verified ·
1 Parent(s): 9204e81

Upload 3 files

Browse files
Files changed (3) hide show
  1. Dokerfile +39 -0
  2. package.json +9 -0
  3. server.js +54 -0
Dokerfile ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM node:20-bookworm
2
+
3
+ # Install Chromium dependencies
4
+ RUN apt-get update && apt-get install -y \
5
+ chromium \
6
+ fonts-liberation \
7
+ libatk-bridge2.0-0 \
8
+ libatk1.0-0 \
9
+ libcups2 \
10
+ libdrm2 \
11
+ libgbm1 \
12
+ libnspr4 \
13
+ libnss3 \
14
+ libxkbcommon0 \
15
+ libxcomposite1 \
16
+ libxrandr2 \
17
+ libxdamage1 \
18
+ libpango-1.0-0 \
19
+ libpangocairo-1.0-0 \
20
+ libasound2 \
21
+ ca-certificates \
22
+ dumb-init \
23
+ --no-install-recommends \
24
+ && rm -rf /var/lib/apt/lists/*
25
+
26
+ WORKDIR /app
27
+
28
+ COPY package.json .
29
+ RUN npm install --omit=dev
30
+
31
+ COPY server.js .
32
+
33
+ ENV NODE_ENV=production
34
+ ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium
35
+
36
+ EXPOSE 3000
37
+
38
+ ENTRYPOINT ["dumb-init", "--"]
39
+ CMD ["node", "server.js"]
package.json ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "puppeteer-pdf-service",
3
+ "version": "1.0.0",
4
+ "type": "module",
5
+ "dependencies": {
6
+ "express": "^4.19.2",
7
+ "puppeteer": "^22.8.0"
8
+ }
9
+ }
server.js ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import express from "express";
2
+ import puppeteer from "puppeteer";
3
+
4
+ const app = express();
5
+ app.use(express.json({ limit: "10mb" }));
6
+
7
+ const PORT = process.env.PORT || 7860; // IMPORTANT
8
+
9
+ app.post("/pdf", async (req, res) => {
10
+ try {
11
+ const { html, options = {} } = req.body;
12
+
13
+ if (!html) {
14
+ return res.status(400).json({ error: "Missing HTML" });
15
+ }
16
+
17
+ const browser = await puppeteer.launch({
18
+ executablePath: process.env.PUPPETEER_EXECUTABLE_PATH,
19
+ args: [
20
+ "--no-sandbox",
21
+ "--disable-dev-shm-usage",
22
+ "--disable-setuid-sandbox",
23
+ "--disable-gpu",
24
+ "--no-zygote"
25
+ ],
26
+ });
27
+
28
+ const page = await browser.newPage();
29
+ await page.setContent(html, { waitUntil: "networkidle0" });
30
+
31
+ const pdf = await page.pdf({
32
+ format: "A4",
33
+ printBackground: true,
34
+ ...options
35
+ });
36
+
37
+ await browser.close();
38
+
39
+ res.setHeader("Content-Type", "application/pdf");
40
+ res.send(pdf);
41
+ } catch (err) {
42
+ console.error(err);
43
+ res.status(500).json({ error: err.message });
44
+ }
45
+ });
46
+
47
+ /* Optional but recommended root route */
48
+ app.get("/", (_req, res) => {
49
+ res.send("Puppeteer PDF Service is running");
50
+ });
51
+
52
+ app.listen(PORT, () => {
53
+ console.log(`Puppeteer PDF service running on port ${PORT}`);
54
+ });