成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

通過Github與PM2部署Node應(yīng)用

tianren124 / 2019人閱讀

摘要:于是著手將應(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)建用戶訪問。

本地安裝pm2

Macbook中,由于已經(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

相關(guān)文章

  • 學(xué)習(xí) Next.js: 部署

    摘要:原始文檔在現(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: 頁面...

    laznrbfe 評(píng)論0 收藏0
  • [譯] 如果可以,永遠(yuǎn)不要在生產(chǎn)中直接運(yùn)行 Node.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 ...

    Tony_Zby 評(píng)論0 收藏0
  • 使用pm2部署node生產(chǎn)環(huán)境

    摘要:一是什么是可以用于生產(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)控...

    劉厚水 評(píng)論0 收藏0
  • 使用pm2快速將項(xiàng)目部署到遠(yuǎn)程服務(wù)器

    摘要:使用背景當(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)化部署 ...

    wind5o 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<