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

基于Alpine Linux構(gòu)建前端node-web鏡像步驟詳解

 更新時(shí)間:2023年11月09日 10:45:58   作者:路邊縣  
這篇文章主要為大家介紹了基于Alpine Linux構(gòu)建前端node-web鏡像步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

鏡像內(nèi)置canvas依賴,瀏覽器,字體包

最近在做node截圖服務(wù),包含echart配置項(xiàng)和瀏覽器截圖。在本地環(huán)境開發(fā)好了之后部署容器發(fā)現(xiàn)下面問題

  • canvas包安裝不上
  • puppeteer運(yùn)行錯(cuò)誤
  • 沒有中文字體包。

接下來一步步解決問題,我們是docker部署, 首先需要選擇鏡像和編寫Dockerfile(或者流水線構(gòu)建編輯)

Dockerfile

FROM 自己打的鏡像:版本
WORKDIR /app
ADD . .
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true 
ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser
RUN npm i --registry=https://registry.npmmirror.com
EXPOSE 3030
CMD ["sh", "-c", "NODE_ENV=$NODE_ENV node ./app.js"]

鏡像

由于烏班圖和CentOS等系統(tǒng)漏洞太多安全掃描通不過公司不讓用,只能使用他們提供的基礎(chǔ)鏡像,基礎(chǔ)鏡像里面什么都沒有需要一頓安裝

根據(jù)canvas 文檔 的描述沒有找到前置依賴的文檔,導(dǎo)致老是安裝報(bào)錯(cuò),經(jīng)過摸索需要的依賴如下

步驟如下

# 安裝圖形化軟件和編譯器用于canvas依賴
apk add --update --no-cache make g++ jpeg-dev cairo-dev giflib-dev pango-dev libtool autoconf automake 
# 安裝 瀏覽器 node npm
apk add --update --no-cache chromium nodejs npm

總共安裝了238個(gè)包需要10多分鐘

安裝完成截圖發(fā)現(xiàn)沒有中文字體包,接下來就要把字體包拷貝到容器里面去了。

在另外一個(gè)控制臺(tái)輸入下面命令

# mac 字體地址 /System/Library/Fonts 其它自己查找
# 鏡像字體庫地址 /usr/share/fonts/ 不對(duì)自己查找下
# 查看運(yùn)行的鏡像 docker ps 找到需要的 CONTAINER ID
docker cp /System/Library/Fonts/ b0cda85d36:/usr/share/fonts/

然后鏡像里面查看一次運(yùn)行

cd /usr/share/fonts/
ls
mkfontscale
mkfontdir
fc-cache

然后運(yùn)行看下 fc-list :lang=zh 看下字體包 這樣就是ok的

在測(cè)試瀏覽器截圖的時(shí)候有個(gè)報(bào)錯(cuò)需要看下瀏覽器位置 找到它

cd /usr/bin
ls

然后修改js代碼 executablePath 指定一個(gè)地址或者在Dockerfile中設(shè)置環(huán)境變量

puppeteer.launch({
    args: ['--no-sandbox', '--disable-setuid-sandbox'],
    executablePath: '/usr/bin/chromium-browser',
})

下一步新建文件測(cè)試

cd /tmp
npm i canvas puppeteer
touch canvas.js
touch puppeteer.js
vi canvas.js
vi puppeteer.js

canvas.js

const fs = require('fs')
const { createCanvas, loadImage } = require('canvas')
const canvas = createCanvas(1200, 500)
const context = canvas.getContext('2d')
context.fillStyle = '#000'
context.fillRect(0, 0, 1200, 500)
context.font = 'bold 70pt Menlo'
context.textAlign = 'center'
context.textBaseline = 'top'
context.fillStyle = '#3574d4'
const text = 'Hello, World! 你好,世界'
const textWidth = context.measureText(text).width
context.fillRect(600 - textWidth / 2 - 10, 170 - 5, textWidth + 20, 120)
context.fillStyle = '#fff'
context.fillText(text, 600, 170)
const buffer = canvas.toBuffer('image/png')
fs.writeFileSync('./canvas.png', buffer)

puppeteer.js

const puppeteer = require("puppeteer");
puppeteer
    .launch({
        args: ['--no-sandbox', '--disable-setuid-sandbox'],
        executablePath: '/usr/bin/chromium-browser',
     })
    .then(async browser => {
      const page = await browser.newPage();
      await page.goto("https://www.baidu.com");
      await page.screenshot({ path: "puppeteer.png" });
      await browser.close();
    });

在下一步就是運(yùn)行測(cè)試了

node canvas.js
node puppeteer.js
ls

最后看下這兩個(gè)圖片正常嗎

沒問題刪除測(cè)試東西打鏡像了

rm -rf /tmp/*

以上是我碰到的問題,有問題歡迎討論和交流,更多關(guān)于Alpine Linux構(gòu)建node-web鏡像的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • nodejs操作mysql實(shí)現(xiàn)增刪改查的實(shí)例

    nodejs操作mysql實(shí)現(xiàn)增刪改查的實(shí)例

    下面小編就為大家?guī)硪黄猲odejs操作mysql實(shí)現(xiàn)增刪改查的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • nvm使用和nodejs切換版本詳細(xì)圖文教程

    nvm使用和nodejs切換版本詳細(xì)圖文教程

    nvm 是node version manager(node 版本管理工具)的縮寫,是一個(gè)命令行工具,用于管理和切換到不同版本的 node.js,下面這篇文章主要給大家介紹了關(guān)于nvm使用和nodejs切換版本的相關(guān)資料,需要的朋友可以參考下
    2024-04-04
  • NodeJS實(shí)現(xiàn)客戶端js加密

    NodeJS實(shí)現(xiàn)客戶端js加密

    本文主要介紹了NodeJS實(shí)現(xiàn)客戶端js加密的思路與方法,具有一定的參考價(jià)值,下面跟著小編一起來看下吧
    2017-01-01
  • Node.js編寫組件的三種實(shí)現(xiàn)方式

    Node.js編寫組件的三種實(shí)現(xiàn)方式

    這篇文章主要介紹了Node.js編寫組件的三種實(shí)現(xiàn)方式,包括純js實(shí)現(xiàn)、v8 API實(shí)現(xiàn)(同步&異步)、借助swig框架實(shí)現(xiàn),感興趣的小伙伴們可以參考一下
    2016-02-02
  • 異步JavaScript編程中的Promise使用方法

    異步JavaScript編程中的Promise使用方法

    這篇文章主要介紹了異步JavaScript編程中的Promise使用方法,包含Ajax的結(jié)合操作等問題,需要的朋友可以參考下
    2015-07-07
  • node自定義安裝更改npm全局模塊默認(rèn)安裝路徑的步驟

    node自定義安裝更改npm全局模塊默認(rèn)安裝路徑的步驟

    有段時(shí)間沒用npm了,新建個(gè)項(xiàng)目,需要改變npm全局包默認(rèn)安裝的路徑,本文就來介紹一下node自定義安裝更改npm全局模塊默認(rèn)安裝路徑的步驟,感興趣的可以了解下
    2021-09-09
  • Ubuntu中搭建Nodejs開發(fā)環(huán)境過程分享

    Ubuntu中搭建Nodejs開發(fā)環(huán)境過程分享

    這篇文章主要介紹了Ubuntu中搭建Nodejs開發(fā)環(huán)境過程,比較郁悶的是apt-get安裝失敗了,如果有遇到一樣問題的朋友,可以參考一下本文
    2014-06-06
  • yarn?install命令報(bào)錯(cuò)warning?package-lock.json?found解決辦法

    yarn?install命令報(bào)錯(cuò)warning?package-lock.json?found解決辦法

    這篇文章主要給大家介紹了關(guān)于yarn?install命令報(bào)錯(cuò)warning?package-lock.json?found的解決辦法,文中通過圖文將解決的辦法介紹的非常詳細(xì),還分享了更多yarn install遇到的報(bào)錯(cuò)及解決方案,需要的朋友可以參考下
    2024-02-02
  • 淺談使用nodejs搭建web服務(wù)器的過程

    淺談使用nodejs搭建web服務(wù)器的過程

    這篇文章主要介紹了淺談使用nodejs搭建web服務(wù)器的過程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • npm?install?-g?@vue/cli常見問題解決匯總

    npm?install?-g?@vue/cli常見問題解決匯總

    這篇文章主要給大家介紹了關(guān)于npm?install?-g?@vue/cli常見問題解決的相關(guān)資料,文中通過實(shí)例代碼將解決的方式介紹的非常詳細(xì),對(duì)遇到這個(gè)問題的朋友具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-08-08

最新評(píng)論

和平区| 江华| 綦江县| 花垣县| 新宁县| 沙洋县| 竹溪县| 嘉鱼县| 永福县| 长宁县| 宜城市| 营山县| 葫芦岛市| 常州市| 安平县| 水富县| 贵阳市| 商水县| 庆云县| 固原市| 平江县| 五寨县| 砚山县| 泰宁县| 军事| 建平县| 喜德县| 兴安盟| 荆门市| 商洛市| 池州市| 广元市| 南投市| 湖北省| 观塘区| 临沂市| 康定县| 化德县| 静安区| 万源市| 福泉市|