最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Docker部署Node.js+Playwright項(xiàng)目并實(shí)現(xiàn)瀏覽器截圖、打印和下載功能

 更新時(shí)間:2025年10月31日 09:09:20   作者:代碼怪獸大大作戰(zhàn)  
在現(xiàn)代前端/自動(dòng)化測(cè)試項(xiàng)目中,Playwright 常用于瀏覽器自動(dòng)化操作,如截圖、打印和下載 PDF,本文詳細(xì)介紹如何在 Linux 環(huán)境下使用 Docker 部署 Node.js + Playwright 項(xiàng)目,并對(duì) Dockerfile、docker-compose 和自動(dòng)化部署腳本逐行解析,需要的朋友可以參考下

一、項(xiàng)目目錄結(jié)構(gòu)

假設(shè)項(xiàng)目目錄為 /opt/test/front-node/,結(jié)構(gòu)如下:

/opt/test/front-node/
├── node/
│   ├── src/                # Node.js 源碼
│   ├── package.json
│   ├── pnpm-lock.yaml
│   ├── assets/             # 靜態(tài)資源
│   └── test.js             # Playwright 測(cè)試腳本
├── Dockerfile              # Docker 鏡像構(gòu)建文件
├── docker-compose.yml      # Docker Compose 服務(wù)定義
└── deploy-node.sh          # 自動(dòng)化部署腳本

說明:

  • node/ 文件夾包含完整 Node.js 應(yīng)用
  • 其他文件用于 Docker 構(gòu)建和部署

二、Dockerfile

2.1 完整 Dockerfile 內(nèi)容

下面是完整的 Dockerfile:

# 基于官方 Node.js 鏡像
FROM node:20-bullseye

LABEL authors="test"

# 設(shè)置非交互模式
ENV DEBIAN_FRONTEND=noninteractive

# 使用清華源 + 安裝必要依賴(Playwright 運(yùn)行時(shí))
RUN sed -i 's|http://deb.debian.org/debian|https://mirrors.tuna.tsinghua.edu.cn/debian|g' /etc/apt/sources.list && \
    apt-get update && \
    apt-get install -y --no-install-recommends \
    libnss3 libnspr4 libatk1.0-0 libatk-bridge2.0-0 libcups2 \
    libdrm2 libxkbcommon0 libatspi2.0-0 libxcomposite1 libxdamage1 \
    libxfixes3 libxrandr2 libgbm1 libasound2 curl ca-certificates git \
    && rm -rf /var/lib/apt/lists/*

# 設(shè)置工作目錄
WORKDIR /usr/src/app

# 先僅復(fù)制依賴聲明文件,加快構(gòu)建緩存
COPY node/package*.json ./

# 使用國內(nèi) npm 源
RUN npm config set registry https://registry.npmmirror.com/

# 切換目錄安裝依賴
WORKDIR /usr/src/app/node
RUN npm install --omit=dev --loglevel=error

# 復(fù)制完整項(xiàng)目代碼(最后執(zhí)行,避免頻繁失效緩存)
COPY node ./

# 設(shè)置環(huán)境變量以通過 npm 安裝瀏覽器
ENV PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1

# 先安裝依賴包
RUN npm install --omit=dev

# 再手動(dòng)用 npm 裝 chromium
RUN npx playwright install chromium --with-deps --force

# 暴露端口
EXPOSE 3001

# 啟動(dòng)命令
CMD ["npm", "run", "start"]

2.2 Dockerfile 詳解

# 基于官方 Node.js 鏡像
FROM node:20-bullseye
LABEL authors="test"

# 設(shè)置非交互模式,避免 apt-get 安裝彈出交互界面
ENV DEBIAN_FRONTEND=noninteractive

# 使用清華源加速 Debian 包下載,同時(shí)安裝 Playwright 運(yùn)行依賴
RUN sed -i 's|http://deb.debian.org/debian|https://mirrors.tuna.tsinghua.edu.cn/debian|g' /etc/apt/sources.list && \
    apt-get update && \
    apt-get install -y --no-install-recommends \
    libnss3 libnspr4 libatk1.0-0 libatk-bridge2.0-0 libcups2 \
    libdrm2 libxkbcommon0 libatspi2.0-0 libxcomposite1 libxdamage1 \
    libxfixes3 libxrandr2 libgbm1 libasound2 curl ca-certificates git \
    && rm -rf /var/lib/apt/lists/*

解析

基礎(chǔ)鏡像node:20-bullseye

  • Node 20 官方 Debian 版本,體積適中,兼容 Playwright
  • 選擇 Debian 而不是 Alpine,是因?yàn)?Playwright 對(duì) Chromium 依賴較多,Alpine 缺少很多庫容易報(bào)錯(cuò)

非交互模式ENV DEBIAN_FRONTEND=noninteractive

  • 避免 apt-get install 過程中彈出交互提示導(dǎo)致構(gòu)建卡住

清華源加速sed -i 's|http://deb.debian.org/debian|https://mirrors.tuna.tsinghua.edu.cn/debian|g'

  • 國內(nèi)訪問 Debian 官方源慢,替換成清華鏡像,加速依賴安裝

安裝 Chromium 運(yùn)行依賴

  • Playwright 需要一些系統(tǒng)庫,如 libnss3、libatk1.0-0、libcups2 等
  • --no-install-recommends 避免安裝不必要的額外軟件,減小鏡像體積
# 設(shè)置工作目錄
WORKDIR /usr/src/app

# 先復(fù)制依賴聲明文件,加快 Docker 緩存
COPY node/package*.json ./

# 使用國內(nèi) npm 鏡像
RUN npm config set registry https://registry.npmmirror.com/

解析

WORKDIR

  • 設(shè)置鏡像工作目錄,所有后續(xù)操作都在 /usr/src/app 進(jìn)行

COPY package.json*

  • 先只復(fù)制依賴文件,不復(fù)制源碼
  • 利用 Docker 緩存層,如果 package.json 未修改,npm install 不會(huì)重復(fù)執(zhí)行

npm 鏡像加速

  • 國內(nèi)訪問官方 npm registry 速度慢
  • 使用 registry.npmmirror.com 可以大幅加快依賴安裝
# 切換目錄安裝依賴
WORKDIR /usr/src/app/node
RUN npm install --omit=dev --loglevel=error

解析

  • WORKDIR 切換到 node:保證依賴安裝在項(xiàng)目源代碼目錄下
  • npm install --omit=dev:生產(chǎn)環(huán)境只安裝必要依賴,不安裝 devDependencies
  • –loglevel=error:減少構(gòu)建日志輸出
# 復(fù)制完整項(xiàng)目代碼
COPY node ./ 

# 設(shè)置 Playwright 環(huán)境變量,跳過瀏覽器自動(dòng)下載
ENV PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1

# 再安裝依賴
RUN npm install --omit=dev

# 手動(dòng)安裝 Chromium
RUN npx playwright install chromium --with-deps --force

解析

復(fù)制完整項(xiàng)目

  • 先安裝依賴,再復(fù)制源碼,可以利用 Docker 緩存,加快 rebuild

跳過自動(dòng)下載瀏覽器

  • 避免 npm install playwright 時(shí)重復(fù)下載 Chromium,減少網(wǎng)絡(luò)依賴

手動(dòng)安裝 Chromium

  • --with-deps 安裝 Playwright 運(yùn)行所需的所有系統(tǒng)依賴
  • --force 確保每次安裝都是最新版本
# 暴露端口
EXPOSE 3001

# 啟動(dòng)命令
CMD ["npm", "run", "start"]

解析

  • EXPOSE 3001:容器對(duì)外暴露端口
  • CMD:容器啟動(dòng)時(shí)執(zhí)行的命令,運(yùn)行 Node.js 服務(wù)

三、docker-compose.yml 詳解

version: "3.9"

services:
  front-node:
    build:
      context: .
      dockerfile: Dockerfile
    image: test-node:latest   # <-- 指定鏡像名稱
    container_name: test-node
    restart: always
    ports:
      - "3001:3001"
    environment:
      - NODE_ENV=production
    working_dir: /usr/src/app
    command: ["npm", "run", "start"]
    volumes:
      # 映射整個(gè) node 項(xiàng)目文件夾
      - /opt/test/front-node/node:/usr/src/app
      # 防止 node_modules 被宿主機(jī)空目錄覆蓋
      - /usr/src/app/node_modules

解析

services.front-node

  • 定義 Node.js 服務(wù)

build.context / dockerfile

  • 指定 Dockerfile 和構(gòu)建上下文

image / container_name

  • 鏡像與容器命名,方便管理

restart: always

  • 容器異常退出自動(dòng)重啟

ports

  • 宿主機(jī)端口映射到容器端口

volumes

  • 映射宿主機(jī)代碼目錄,方便開發(fā)調(diào)試
  • 單獨(dú)掛載 node_modules 防止空目錄覆蓋

四、自動(dòng)化部署腳本 deploy-node.sh

#!/bin/bash

# 工作目錄
WORKDIR="/opt/test/front-node"

# 容器和鏡像名稱
CONTAINER_NAME="test-node"
IMAGE_NAME="test-node:latest"

# 切換到工作目錄
cd "$WORKDIR" || { echo "工作目錄不存在: $WORKDIR"; exit 1; }

echo "=== 檢查并停止容器 ${CONTAINER_NAME} ==="
if docker ps -a --format '{{.Names}}' | grep -w "${CONTAINER_NAME}" > /dev/null; then
    docker stop "${CONTAINER_NAME}"
    docker rm "${CONTAINER_NAME}"
    echo "容器 ${CONTAINER_NAME} 已停止并刪除"
else
    echo "容器 ${CONTAINER_NAME} 不存在"
fi

echo "=== 刪除鏡像 ${IMAGE_NAME} ==="
if docker images --format '{{.Repository}}:{{.Tag}}' | grep -w "${IMAGE_NAME}" > /dev/null; then
    docker rmi "${IMAGE_NAME}" -f
    echo "鏡像 ${IMAGE_NAME} 已刪除"
else
    echo "鏡像 ${IMAGE_NAME} 不存在"
fi

echo "=== 構(gòu)建鏡像并啟動(dòng)容器 ==="
docker compose build
docker compose up -d

echo "=== 完成 ==="


解析

  • 自動(dòng)停止舊容器:避免端口沖突
  • 刪除舊鏡像:保證構(gòu)建最新版本
  • docker compose build + up:構(gòu)建鏡像并啟動(dòng)容器
  • 一鍵部署:Linux 下快速上線

五、Playwright 瀏覽器截圖/打印示例

const { chromium } = require('playwright');

(async () => {
  const browser = await chromium.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com');

  // 截圖
  await page.screenshot({ path: 'example.png' });

  // 打印 PDF
  await page.pdf({ path: 'example.pdf', format: 'A4' });

  await browser.close();
})();

解析

  • chromium.launch():啟動(dòng)瀏覽器實(shí)例
  • page.goto():訪問頁面
  • page.screenshot() / page.pdf():實(shí)現(xiàn)截圖和打印功能
  • 支持自動(dòng)化生成報(bào)告、文件下載等操作

六、優(yōu)化建議

國內(nèi)加速源

  • Debian 清華源 + npm 鏡像
  • 顯著提升構(gòu)建速度

緩存依賴

  • 先復(fù)制 package*.json 再安裝依賴
  • 再復(fù)制源碼,減少重復(fù)構(gòu)建

非 root 用戶運(yùn)行

  • 提升安全性

分階段構(gòu)建(可選)

  • 構(gòu)建階段安裝 Playwright
  • 生產(chǎn)階段只復(fù)制 Node + 依賴
  • 鏡像更小,啟動(dòng)更快

七、總結(jié)

在 Linux 使用 Docker 部署 Node.js + Playwright 項(xiàng)目 的方案,涵蓋:

  • Dockerfile 構(gòu)建 Playwright 所需環(huán)境
  • docker-compose 服務(wù)配置
  • 自動(dòng)化部署腳本
  • 瀏覽器截圖與打印示例

通過上述方法,可以快速在國內(nèi) Linux 環(huán)境部署 Playwright 項(xiàng)目,并支持截圖、打印和下載等自動(dòng)化操作。

以上就是Docker部署Node.js+Playwright項(xiàng)目并實(shí)現(xiàn)瀏覽器截圖、打印和下載功能的詳細(xì)內(nèi)容,更多關(guān)于Docker部署Node.js+Playwright項(xiàng)目的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Docker 部署Mysql 服務(wù)和Redis 服務(wù)的方法

    Docker 部署Mysql 服務(wù)和Redis 服務(wù)的方法

    這篇文章主要介紹了Docker 部署Mysql 服務(wù)和Redis 服務(wù)的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • SpringBoot程序打包Docker鏡像的最佳方式

    SpringBoot程序打包Docker鏡像的最佳方式

    本文探索了SpringBoot程序打包Docker鏡像的幾種方式及其性能表現(xiàn),作者通過四種方法進(jìn)行測(cè)試,并通過代碼示例講解的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2026-03-03
  • 詳解私有 Docker Registry 部署方案及用戶手冊(cè)

    詳解私有 Docker Registry 部署方案及用戶手冊(cè)

    本文主要介紹了詳解私有 Docker Registry 部署方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-04-04
  • linux上安裝Docker(非常簡單的安裝方法)

    linux上安裝Docker(非常簡單的安裝方法)

    今天小編就為大家分享一篇關(guān)于linux上安裝Docker(非常簡單的安裝方法),小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • Docker 環(huán)境運(yùn)行 Mysql 和開啟 Binlog 配置主從同步的設(shè)置方法

    Docker 環(huán)境運(yùn)行 Mysql 和開啟 Binlog 配置主從同步的設(shè)置方法

    今天給大家分享Docker 環(huán)境運(yùn)行 Mysql 和開啟 Binlog 配置主從同步的設(shè)置方法,利用docker模擬mysql設(shè)置的主從同步,通過兩種方式給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-06-06
  • Docker打包前后端項(xiàng)目的實(shí)現(xiàn)示例

    Docker打包前后端項(xiàng)目的實(shí)現(xiàn)示例

    目前我們大多數(shù)服務(wù)應(yīng)該會(huì)使用Docker來進(jìn)行部署,本文主要介紹了Docker打包前后端項(xiàng)目的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-04-04
  • docker容器如何查看運(yùn)行日志

    docker容器如何查看運(yùn)行日志

    這篇文章主要介紹了docker容器如何查看運(yùn)行日志問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Docker容器訪問掛載文件權(quán)限問題小結(jié)

    Docker容器訪問掛載文件權(quán)限問題小結(jié)

    在使用docker-compose部署項(xiàng)目時(shí),因?yàn)镾ELinux策略導(dǎo)致容器無法訪問宿主機(jī)上掛載的文件,解決方案包括禁用SELinux、修改文件類型為svirt_sandbox_file_t或使用:Z選項(xiàng)掛載文件,本文介紹Docker容器訪問掛載文件權(quán)限問題,感興趣的朋友一起看看吧
    2025-02-02
  • 從主機(jī)獲取Docker容器IP地址的四種方法

    從主機(jī)獲取Docker容器IP地址的四種方法

    在使用Docker進(jìn)行開發(fā)和部署時(shí),經(jīng)常需要從主機(jī)獲取容器的IP地址,以進(jìn)行代碼部署、容器配置或與容器進(jìn)行通信等操作,本文介紹多種從主機(jī)獲取Docker容器IP地址的方法,需要的朋友可以參考下
    2025-06-06
  • docker容器/etc/hosts文件修改方法

    docker容器/etc/hosts文件修改方法

    在容器內(nèi)部,當(dāng)需要訪問其他容器或主機(jī)時(shí),可以通過/etc/hosts文件來解析主機(jī)名,從而實(shí)現(xiàn)網(wǎng)絡(luò)通信,這篇文章主要介紹了docker容器/etc/hosts文件,需要的朋友可以參考下
    2023-06-06

最新評(píng)論

万安县| 垫江县| 清丰县| 缙云县| 武宣县| 九台市| 揭东县| 娱乐| 桂东县| 桐柏县| 沙坪坝区| 民勤县| 商南县| 新化县| 林州市| 衡东县| 饶河县| 息烽县| 柳河县| 噶尔县| 洪湖市| 贵港市| 巴彦淖尔市| 凤阳县| 白水县| 乌拉特前旗| 囊谦县| 建德市| 新野县| 涪陵区| 余姚市| 巴东县| 壤塘县| 昌乐县| 都匀市| 玛沁县| 石屏县| 江油市| 连云港市| 吉首市| 石楼县|