2018-05-10 puppeteer項目搭建

1担巩、環(huán)境準備

安裝node.js

進入官網(wǎng):https://nodejs.org/en/download/东亦。

網(wǎng)站會自動檢測系統(tǒng),如果是windows系統(tǒng)唯竹,則下載.exe安裝文件乐导,下載后打開運行,進行安裝浸颓。

linux系統(tǒng)安裝

如果是linux系統(tǒng)物臂,可下載版本:

直接安裝(建議使用)

下載后得到node-v8.11.1-linux-x64.tar.xz,按順序執(zhí)行以下命令:

tar xvf node-v8.11.1-linux-x64.tar.xz

mv node-v8.11.1-linux-x64?nodejs

接著打開/etc/profile文件:

vim /etc/profile

在文件寫入以下內(nèi)容:

export NODE_HOME=/usr/local/nodejs

export PATH=$NODE_HOME/bin:$PATH

保存并退出产上,編譯/etc/profile使配置生效棵磷,執(zhí)行:

:wq

source /etc/profile

編譯安裝

建議:正式環(huán)境直接下載64位包解壓即可。

也可以選擇下載源碼晋涣,進行編譯安裝仪媒,步驟如下:

1、下載源碼谢鹊,你需要在https://nodejs.org/en/download/下載最新的Nodejs版本算吩,本文以node-v8.11.1為例:

cd /usr/local/src/

wget https://nodejs.org/dist/v8.11.1/node-v8.11.1.tar.gz

2、解壓源碼

tar xvf node-v8.11.1.tar.gz

mv node-v8.11.1 nodejs

3佃扼、 編譯安裝

cd node-v8.11.1.tar.gz

./configure --prefix=/usr/local/nodejs

make

make install

4偎巢、 配置NODE_HOME,進入profile編輯環(huán)境變量

vim /etc/profile

設(shè)置nodejs環(huán)境變量兼耀,在 export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL 一行的上面添加如下內(nèi)容:

#set for nodejs

export NODE_HOME=/usr/local/nodejs

export PATH=$NODE_HOME/bin:$PATH

:wq保存并退出压昼,編譯/etc/profile 使配置生效

source /etc/profile

驗證

驗證是否安裝配置成功,執(zhí)行:node -v瘤运。驗證npm是否安裝成功窍霞,執(zhí)行: npm -v。

windows系統(tǒng)安裝

下載安裝包

下載后拯坟,雙擊.exe執(zhí)行文件運行安裝即可但金,安裝后在系統(tǒng)環(huán)境變量中配置NODE_HOME。

Windows系統(tǒng)查看node.js是否安裝完成似谁,打開cmd命令行工具傲绣,執(zhí)行node -v,可查看node.js版本巩踏。再安裝完node.js后秃诵,會連帶安裝好npm,在命令行輸入npm -v可查看npm版本塞琼。

Git安裝

pm2安裝

使用npm安裝pm2:

npm install -g pm2

檢查是否安裝成功:

pm2 -version

md5模塊安裝(必須)

下載了項目代碼后菠净,進入項目根目錄下,安裝md5模塊。

npm install md5

puppeteer安裝(必須)

注意毅往,puppeteer的安裝放在項目代碼拉取之后牵咙,具體安裝時,先跳過此步驟攀唯,在服務(wù)器上先安裝cnpm洁桌。

下載了項目代碼后,進入項目根目錄下侯嘀,安裝puppeteer另凌,因為puppeteer無法使用npm安裝,可以先使用npm安裝cnpm后戒幔,再使用cnpm安裝puppeteer吠谢,所以安裝之前檢查是否安裝cnpm,使用命令檢查:cnpm -v诗茎,如果未安裝cnpm工坊,參考下文的cnpm安裝說明。

cnpm安裝后敢订,使用cnpm安裝puppeteer:

cnpm install puppeteer

(在windows環(huán)境下可直接使用npm安裝puppeteer王污,忽略cnpm的安裝步驟)。

cnpm安裝

npm install -g cnpm --registry=https://registry.npm.taobao.org

檢查cnpm是否安裝:

cnpm -v

2楚午、項目運行部署

獲取項目代碼

拉取

使用Git下載node.js項目代碼:(這里的項目將在下一次分享中給出)玉掸。拉取代碼后需要進行pupeeteer的安裝。

安裝puppeteer后醒叁,檢查puppeteer依賴是否全部安裝,執(zhí)行:

ldd node_modules/puppeteer/.local-chromium/linux-555668/chrome-linux/chrome

發(fā)現(xiàn)未安裝依賴泊业,執(zhí)行命令查看其依賴包:repoquery --nvr --whatprovides libXss.so.1

安裝此依賴:?yum install libXScrnSaver-1.2.2-6.1.el7

更新

使用svn更新項目把沼,根據(jù)自己是使用SVN還是Git更新代碼。

通過pm2啟動

注意

注意吁伺,開發(fā)環(huán)境與正式環(huán)境部署時饮睬,需要指定環(huán)境名稱,通過--env參數(shù)指定篮奄。如果不指定捆愁,默認為開發(fā)環(huán)境(development),在正式環(huán)境啟動時須指定為 --env production

初次啟動

進入項目目錄窟却,使用pm2啟動:

pm2 start screen-shot/screenshot_process.json

正式環(huán)境:

pm2 start screen-shot/screenshot_process.json --env production

測試環(huán)境:

pm2 start screen-shot/screenshot_process.json --env test

開發(fā)環(huán)境:

pm2 start screen-shot/screenshot_process.json --env development

啟動結(jié)果截圖:


screenshot_process.json文件內(nèi)容說明

screenshot_process.json內(nèi)容如下:

{

??"apps": [

????{

??????"name": "screenshot",

??????"cwd": "/usr/local/svn_space/screen-shot",

??????"script": "bin/www",

??????"log_date_format": "YYYY-MM-DD HH:mm Z",

??????"error_file": "/usr/local/svn_space/screen-shot/logs/node-app.stderr.log",

??????"out_file": "/usr/local/svn_space/screen-shot/logs/node-app.stdout.log",

??????"pid_file": "/usr/local/svn_space/screen-shot/pids/node-geo-api.pid",

??????"instances": 2,

??????"min_uptime": "200s",

??????"max_restarts": 10,

??????"cron_restart": "1 0 * * *",

??????"watch": false,

??????"merge_logs": true,

??????"exec_interpreter": "node",

??????"exec_mode": "fork",

??????"autorestart": false,

??????"vizion": false,

??????"env": {

????????"NODE_ENV": "development"

??????},

??????"env_production": {

????????"NODE_ENV": "production"

??????}

????}

??]

}


內(nèi)容說明:

apps:json結(jié)構(gòu)昼丑,apps是一個數(shù)組,每一個數(shù)組成員就是對應(yīng)一個pm2中運行的應(yīng)用

name:應(yīng)用程序名稱

cwd:應(yīng)用程序所在的目錄

script:應(yīng)用程序的腳本路徑

log_date_format:

error_file:自定義應(yīng)用程序的錯誤日志文件

out_file:自定義應(yīng)用程序日志文件

pid_file:自定義應(yīng)用程序的pid文件

instances:啟動實例個數(shù)

min_uptime:最小運行時間夸赫,這里設(shè)置的是60s即如果應(yīng)用程序在60s內(nèi)退出菩帝,pm2會認為程序異常退出,此時觸發(fā)重啟max_restarts設(shè)置數(shù)量

max_restarts:設(shè)置應(yīng)用程序異常退出重啟的次數(shù),默認15次(從0開始計數(shù))

cron_restart:定時啟動呼奢,解決重啟能解決的問題

watch:是否啟用監(jiān)控模式宜雀,默認是false。如果設(shè)置成true握础,當應(yīng)用程序變動時辐董,pm2會自動重載。這里也可以設(shè)置你要監(jiān)控的文件禀综。

merge_logs:

exec_interpreter:應(yīng)用程序的腳本類型简烘,這里使用的shell,默認是nodejs

exec_mode:應(yīng)用程序啟動模式菇存,這里設(shè)置的是cluster_mode(集群)夸研,默認是fork

autorestart:啟用/禁用應(yīng)用程序崩潰或退出時自動重啟

vizion:啟用/禁用vizion特性(版本控制)

后續(xù)啟動使用pm2說明

經(jīng)過初次啟動后,項目screenshot已經(jīng)在pm2的啟動管理下依鸥,可查看下文亥至,通過pm2的命令對項目進行管理。例如:

停止項目:pm2 stop screenshot (此處的screenshot 贱迟,為screenshot_process.json配置文件中的name屬性姐扮,下同)

啟動項目(本地local):

pm2 start screenshot

正式環(huán)境:

pm2 start screenshot --env production

測試環(huán)境:

pm2 start screenshot --env test

開發(fā)環(huán)境:

pm2 start screenshot --env development

重啟項目:pm2 restart screenshot

正式環(huán)境:

pm2 restart screenshot --env production

測試環(huán)境:

pm2 start screenshot --env test

開發(fā)環(huán)境:

pm2 start screenshot --env development

等等。

pm2命令說明

$ pm2 logs顯示所有進程日志

$ pm2 stop all停止所有進程

$ pm2 restart all重啟所有進程

$ pm2 reload all 0秒停機重載進程 (用于 NETWORKED 進程)

$ pm2 stop 0停止指定的進程

$ pm2 restart 0重啟指定的進程

$ pm2 startup產(chǎn)生 init 腳本 保持進程活著

$ pm2 web運行健壯的 computer API endpoint (http://localhost:9615)

$ pm2 delete 0殺死指定的進程

$ pm2 delete all殺死全部進程


運行進程的不同方式:

$ pm2 start app.js -i max根據(jù)有效CPU數(shù)目啟動最大進程數(shù)目

$ pm2 start app.js -i 3啟動3個進程

$ pm2 start app.js -x用fork模式啟動 app.js 而不是使用 cluster

$ pm2 start app.js -x -- -a 23用fork模式啟動 app.js 并且傳遞參數(shù) (-a 23)

$ pm2 start app.js --name serverone啟動一個進程并把它命名為 serverone

$ pm2 stop serverone停止 serverone 進程

$ pm2 start app.json啟動進程, 在 app.json里設(shè)置選項

$ pm2 start app.js -i max -- -a 23在--之后給 app.js 傳遞參數(shù)

$ pm2 start app.js -i max -e err.log -o out.log啟動 并 生成一個配置文件


通過pm2 monit可監(jiān)視每個node進程的CPU和內(nèi)存的使用情況:

訪問

服務(wù)器環(huán)境上部署的應(yīng)用端口為10011衣吠,項目訪問地址: 192.16.2.141:10011茶敏。結(jié)果頁面:


接口調(diào)用結(jié)果


此處測試,文件地址存儲在項目的當前目錄下的data目錄中缚俏,接口正式使用時惊搏,傳入完整路徑(此處為示例返回JSON,以接口文檔返回值為準)忧换。


本文還未提供源碼恬惯。下次分享,謝謝亚茬。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末酪耳,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子刹缝,更是在濱河造成了極大的恐慌碗暗,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件梢夯,死亡現(xiàn)場離奇詭異言疗,居然都是意外死亡,警方通過查閱死者的電腦和手機厨疙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門洲守,熙熙樓的掌柜王于貴愁眉苦臉地迎上來疑务,“玉大人,你說我怎么就攤上這事梗醇≈剩” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵叙谨,是天一觀的道長温鸽。 經(jīng)常有香客問我,道長手负,這世上最難降的妖魔是什么涤垫? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮竟终,結(jié)果婚禮上蝠猬,老公的妹妹穿的比我還像新娘。我一直安慰自己统捶,他們只是感情好榆芦,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著喘鸟,像睡著了一般匆绣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上什黑,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天崎淳,我揣著相機與錄音,去河邊找鬼愕把。 笑死拣凹,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的恨豁。 我是一名探鬼主播咐鹤,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼圣絮!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起雕旨,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤扮匠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后凡涩,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體棒搜,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年活箕,在試婚紗的時候發(fā)現(xiàn)自己被綠了力麸。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖克蚂,靈堂內(nèi)的尸體忽然破棺而出闺鲸,到底是詐尸還是另有隱情,我是刑警寧澤埃叭,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布摸恍,位于F島的核電站,受9級特大地震影響赤屋,放射性物質(zhì)發(fā)生泄漏立镶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一类早、第九天 我趴在偏房一處隱蔽的房頂上張望媚媒。 院中可真熱鬧,春花似錦涩僻、人聲如沸缭召。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽恼琼。三九已至,卻和暖如春屏富,著一層夾襖步出監(jiān)牢的瞬間晴竞,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工狠半, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留噩死,地道東北人。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓神年,卻偏偏與公主長得像已维,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子已日,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容