摘要:于是著手將應(yīng)用遷移到阿里云的上去。環(huán)境介紹本地,應(yīng)用采用的技術(shù)遠(yuǎn)端服務(wù)器阿里云核內(nèi)存,,系統(tǒng)為賬戶名系統(tǒng)架構(gòu)服務(wù)器部署的應(yīng)用,并在端口進(jìn)行監(jiān)聽。通過瀏覽器打開可以看到部署的應(yīng)用可以訪問了。
背景
前一段時(shí)間,是通過百度云的BAE部署自己的Node應(yīng)用的,不過隨著應(yīng)用的不斷開發(fā),BAE的限制不斷制約了應(yīng)用的使用。于是著手將應(yīng)用遷移到阿里云的ECS上去。本文即是介紹了如何在ECS上搭建Node環(huán)境,并將本地制作好的應(yīng)用進(jìn)行發(fā)布。
環(huán)境介紹本地: Mac OSX 10.11.4,應(yīng)用采用的技術(shù):Node.js + Express.js
遠(yuǎn)端服務(wù)器:阿里云ECS(1核CPU、1GB內(nèi)存),IP:123.57.205.23,系統(tǒng)為CentOS7.0
Github:賬戶名:e10101
系統(tǒng)架構(gòu)服務(wù)器部署Node的應(yīng)用,并在3000端口進(jìn)行監(jiān)聽。本地代碼開發(fā)測(cè)試后,更新到Github私人倉庫。然后通過pm2部署遠(yuǎn)程服務(wù)器。
服務(wù)器端安裝必要的軟件擬安裝如下應(yīng)用:Node、npm、pm2。
通過預(yù)留的賬號(hào)密碼登錄系統(tǒng),終端中輸入:
ssh [email protected]
更新軟件:
yum update -y
更新完畢后,安裝Node.js:
yum install nodejs -y
安裝Npm:
yum install yum -y
安裝pm2:
npm install pm2 -g(可選)服務(wù)器端創(chuàng)建新用戶
為服務(wù)器安全起見,創(chuàng)建用戶(用戶名:yishi):
useradd yishi
設(shè)置密碼:
passwd yishi
添加sudo權(quán)限:
usermod -aG wheel yishi(可選)服務(wù)器端關(guān)閉root用戶的ssh訪問
為服務(wù)器安全起見,關(guān)閉root賬戶的遠(yuǎn)程訪問。
打開配置文件:
vi /etc/ssh/sshd_config
找到如下設(shè)置,并修改yes為no:
PermitRootLogin no
保存文件后,重啟sshd服務(wù):
service sshd restart
退出root賬戶,并使用新創(chuàng)建用戶訪問。
本地安裝pm2Macbook中,由于已經(jīng)具備了node以及npm,再次不介紹如何安裝上述兩個(gè)軟件了。與服務(wù)器端類似,通過如下命令安裝pm2:
npm install pm2 -g
如果可得到版本號(hào),則說明安裝成功:
pm2 -v設(shè)置Github倉庫
此處為方便演示,我們?cè)贕ithub上新建一個(gè)私人(private)倉庫,名為pm2app。
倉庫創(chuàng)建后,還需要設(shè)置Deploy keys,依次點(diǎn)擊Settings > Deploy keys > Add deploy key。其中的Key部分,可以在服務(wù)器端上通過ssh-keygen生成,并通過
cat ~/.ssh/id_rsa.pub
即可輸出。輸出后,復(fù)制到deploy key中點(diǎn)擊Add key,完成設(shè)置。
完成上述設(shè)置后,需要本地的應(yīng)用代碼關(guān)聯(lián)此Github倉庫,按照Github官網(wǎng)的介紹,通過在本地應(yīng)用下執(zhí)行:
git remote add origin https://github.com/e10101/pm2app.git git push -u origin master
來完成設(shè)置。
本地pm2的ecosystem配置在本地的目標(biāo)應(yīng)用下,輸入:
pm2 ecosystem
生成pm2的部署配置模板文件如下:
/** * Application configuration section * PM2 - Application Declaration */ apps : [ // First application { name : "API", script : "app.js", env: { COMMON_VARIABLE: "true" }, env_production : { NODE_ENV: "production" } }, // Second application { name : "WEB", script : "web.js" } ], /** * Deployment section * PM2 - Deployment */ deploy : { production : { user : "node", host : "212.83.163.1", ref : "origin/master", repo : "[email protected]:repo.git", path : "/var/www/production", "post-deploy" : "npm install && pm2 startOrRestart ecosystem.json --env production" }, dev : { user : "node", host : "212.83.163.1", ref : "origin/master", repo : "[email protected]:repo.git", path : "/var/www/development", "post-deploy" : "npm install && pm2 startOrRestart ecosystem.json --env dev", env : { NODE_ENV: "dev" } } } }
應(yīng)為目前我們僅部署一個(gè)應(yīng)用,因此,先把不必要的信息刪除,即刪除apps部分的第二項(xiàng)。同時(shí)把我們的目標(biāo)文件改為你應(yīng)用的入口文件,此處修改為Express.js的默認(rèn)設(shè)置,即:
script : "./bin/www",
apps部分就設(shè)置完畢了,然后再設(shè)置deploy部分。其中production用于生產(chǎn)環(huán)境,dev用于開發(fā)環(huán)境,為了演示,我們只設(shè)置production部分。
下面依次介紹各個(gè)設(shè)置:
production : { user : "登錄遠(yuǎn)程服務(wù)器的用戶名,此處填寫我們創(chuàng)建的yishi", host : "遠(yuǎn)程服務(wù)器的IP或hostname,此處可以是數(shù)組同步部署多個(gè)服務(wù)器,不過鑒于我們只有一個(gè)服務(wù)器,因此我們填寫123.57.205.23", ref : "遠(yuǎn)端名稱及分支名,此處填寫origin/master", repo : "git倉庫地址,此處填寫[email protected]:e10101/pm2app.git", path : "遠(yuǎn)程服務(wù)器部署目錄,需要填寫user具備寫入權(quán)限的目錄,此處填寫/home/yishi/www/production", "post-deploy" : "部署后需要執(zhí)行的命令,此處填寫npm install && pm2 startOrRestart ecosystem.json --env production" },
整理后,按照我們的設(shè)置,應(yīng)為:
production: { user: "yishi", host: "123.57.205.23", ref: "origin/master", repo: "[email protected]:e10101/pm2app.git", path: "/home/yishi/www/production", "post-deploy": "npm install && pm2 startOrRestart ecosystem.json --env production" },
因?yàn)閜m2的部署是通過ssh進(jìn)行的,因此需要開通本地到遠(yuǎn)程服務(wù)器的無密碼登錄,同樣,在Mac下,通過ssh-keygen生成RSA公鑰,并拷貝到遠(yuǎn)程服務(wù)器:
scp ~/.ssh/id_rsa.pub [email protected]:/home/yishi/.ssh/authorized_keys
上述命令中的yishi為用戶名,執(zhí)行時(shí)需要替換為你設(shè)置的用戶名。
設(shè)置ssh完畢后,再看看整理完畢的ecosystem配置文件,如下:
{ /** * Application configuration section * PM2 - Application Declaration */ apps : [ // First application { name : "pm2app", script : "./bin/www", env: { COMMON_VARIABLE: "true" }, env_production : { NODE_ENV: "production" } } ], /** * Deployment section * PM2 - Deployment */ deploy : { production : { user: "yishi", host: "123.57.205.23", ref: "origin/master", repo: "[email protected]:e10101/pm2app.git", path: "/home/yishi/www/production", "post-deploy": "npm install && pm2 startOrRestart ecosystem.json --env production" } } }
在本地應(yīng)用目錄下,執(zhí)行pm2 deploy命令:
pm2 deploy ecosystem.json production setup
提示錯(cuò)誤:
Host key verification failed. fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. failed to clone Deploy failed
此時(shí)主要是在遠(yuǎn)程服務(wù)器中,并未將http://github.com加入known_hosts,在服務(wù)器端通過如下命令設(shè)置:
ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
在本地繼續(xù)執(zhí)行部署命令:
pm2 deploy ecosystem.json production setup
此時(shí),如無其他問題,輸出應(yīng)提示:
○ setup complete --> Success
至此,pm2的部署設(shè)置完畢。
pm2部署pm2的部署設(shè)置完畢后,接下來就是實(shí)際部署了。
在部署前,現(xiàn)將本地代碼修改并進(jìn)行g(shù)it提交:
git add . git commit -m "update ecosystem" git push
提交后,在本地應(yīng)用目錄,輸入如下命令進(jìn)行生產(chǎn)環(huán)境的部署:
pm2 deploy ecosystem.json production
可以看到如下輸出:
[PM2][WARN] Applications pm2app not running, starting... [PM2] App [pm2app] launched (1 instances) ┌──────────┬────┬──────┬──────┬────────┬─────────┬────────┬─────────────┬──────────┐ │ App name │ id │ mode │ pid │ status │ restart │ uptime │ memory │ watching │ ├──────────┼────┼──────┼──────┼────────┼─────────┼────────┼─────────────┼──────────┤ │ pm2app │ 0 │ fork │ 1028 │ online │ 0 │ 0s │ 11.246 MB │ disabled │ └──────────┴────┴──────┴──────┴────────┴─────────┴────────┴─────────────┴──────────┘ Use `pm2 show` to get more details about an app ○ hook test ○ successfully deployed origin/master --> Success
部署成功,在遠(yuǎn)程服務(wù)器查看端口情況:
netstat -antp
可以看到應(yīng)用默認(rèn)部署的3000端口已經(jīng)開放了。通過瀏覽器打開:
http://123.57.205.23:3000/
可以看到部署的Web應(yīng)用可以訪問了。(如果netstat -antp中可見3000端口可訪問,可以檢查下ECS的防火墻設(shè)置,確保3000端口對(duì)外開放)
pm2其他命令應(yīng)用列表:
pm2 list
應(yīng)用信息(查看應(yīng)用編號(hào)為0的信息):
pm2 show 0(重要)服務(wù)器端設(shè)置pm2開機(jī)自動(dòng)啟動(dòng)
開啟啟動(dòng)設(shè)置,此處是CentOS系統(tǒng),其他系統(tǒng)替換最后一個(gè)選項(xiàng)(可選項(xiàng):ubuntu, centos, redhat, gentoo, systemd, darwin, amazon):
pm2 startup centos
然后按照提示需要輸入的命令進(jìn)行輸入:
sudo su -c "env PATH=$PATH:/usr/bin pm2 startup centos -u yishi --hp /home/yishi"
保存pm2設(shè)置
pm2 save
現(xiàn)在重新啟動(dòng)系統(tǒng),測(cè)試是否可以開機(jī)啟動(dòng):
sudo reboot
等系統(tǒng)重啟后,通過瀏覽器檢查系統(tǒng)是否自動(dòng)啟動(dòng):
http://123.57.205.23:3000/
如果啟動(dòng)正常,說明設(shè)置成功!
以上就是如何通過pm2部署Node應(yīng)用到服務(wù)器生成環(huán)境的總結(jié)。
參考參考部分包含了一些先關(guān)鏈接,詳見我的知乎專欄此:
作者:郭一實(shí)
鏈接:https://zhuanlan.zhihu.com/p/20940096
來源:知乎
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/39287.html
摘要:原始文檔在現(xiàn)在搬過來學(xué)習(xí)入門學(xué)習(xí)頁面之間的導(dǎo)航學(xué)習(xí)使用共享組件學(xué)習(xí)創(chuàng)建動(dòng)態(tài)內(nèi)容學(xué)習(xí)使用路由掩碼創(chuàng)建干凈的學(xué)習(xí)干凈的服務(wù)器支持學(xué)習(xí)獲取數(shù)據(jù)學(xué)習(xí)部署部署要部署一個(gè)應(yīng)用程序當(dāng)然我們首先需要一個(gè)可部署的已經(jīng)開發(fā)完成的應(yīng)用程序以下面這個(gè)開發(fā)的小型博客 原始文檔在 https://github.com/developerw... 現(xiàn)在搬過來.學(xué)習(xí) Next.js: 入門學(xué)習(xí) Next.js: 頁面...
摘要:就在幾周前,我正在和一個(gè)朋友談話,他不經(jīng)意間提到,你永遠(yuǎn)都不會(huì)在生產(chǎn)中直接使用來運(yùn)行程序。我強(qiáng)烈點(diǎn)頭,表示我也不會(huì)在生產(chǎn)中直接運(yùn)行,原因可能每個(gè)人都知道。首先,讓我們弄清楚永遠(yuǎn)不要在生產(chǎn)中直接通過運(yùn)行程序的說法。 原文地址:You should never ever run directly against Node.js in production. Maybe. 原文作者:Burke ...
摘要:一是什么是可以用于生產(chǎn)環(huán)境的的進(jìn)程管理工具,并且它內(nèi)置一個(gè)負(fù)載均衡。嗯嗯,最好的用處就是監(jiān)控我們的生產(chǎn)環(huán)境下的程序運(yùn)行狀態(tài),讓它給我們?nèi)找岳^日的處于工作狀態(tài)。部署自動(dòng)部署,避免逐個(gè)在所有服務(wù)器中進(jìn)行。 一、PM2是什么 是可以用于生產(chǎn)環(huán)境的Nodejs的進(jìn)程管理工具,并且它內(nèi)置一個(gè)負(fù)載均衡。它不僅可以保證服務(wù)不會(huì)中斷一直在線,并且提供0秒reload功能,還有其他一系列進(jìn)程管理、監(jiān)控...
摘要:使用背景當(dāng)我們需要將項(xiàng)目部署到遠(yuǎn)程線上服務(wù)器時(shí)傳統(tǒng)的方法可能就是將本地代碼通過等方式上傳到服務(wù)器然后通過登入到服務(wù)器,配置好環(huán)境手動(dòng)啟動(dòng)應(yīng)用。 使用背景 當(dāng)我們需要將項(xiàng)目部署到遠(yuǎn)程線上服務(wù)器時(shí);傳統(tǒng)的方法可能就是: 將本地代碼通過ssh、ftp等方式上傳到服務(wù)器; 然后通過ssh登入到服務(wù)器,配置好環(huán)境; 手動(dòng)啟動(dòng)應(yīng)用。 太過手動(dòng)化,麻煩,操作繁瑣。 現(xiàn)代自動(dòng)化部署 ...
閱讀 2039·2023-04-25 23:30
閱讀 1458·2021-11-24 10:18
閱讀 3097·2021-10-09 09:54
閱讀 2024·2021-10-08 10:05
閱讀 3447·2021-09-23 11:21
閱讀 3169·2019-08-30 15:52
閱讀 1569·2019-08-30 13:05
閱讀 1068·2019-08-30 13:02