進入官網(wǎng):https://nodejs.org/en/download/东亦。
網(wǎng)站會自動檢測系統(tǒng),如果是windows系統(tǒng)唯竹,則下載.exe安裝文件乐导,下載后打開運行,進行安裝浸颓。
如果是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。
下載安裝包
下載后拯坟,雙擊.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安裝
使用npm安裝pm2:
npm install -g pm2
檢查是否安裝成功:
pm2 -version
md5模塊安裝(必須)
下載了項目代碼后菠净,進入項目根目錄下,安裝md5模塊。
npm install md5
注意毅往,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的安裝步驟)。
npm install -g cnpm --registry=https://registry.npm.taobao.org
檢查cnpm是否安裝:
cnpm -v
使用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更新代碼。
注意吁伺,開發(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特性(版本控制)
經(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 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é)果頁面:
此處測試,文件地址存儲在項目的當前目錄下的data目錄中缚俏,接口正式使用時惊搏,傳入完整路徑(此處為示例返回JSON,以接口文檔返回值為準)忧换。
本文還未提供源碼恬惯。下次分享,謝謝亚茬。