摘要:于是著手將應用遷移到阿里云的上去。環境介紹本地,應用采用的技術遠端服務器阿里云核內存,,系統為賬戶名系統架構服務器部署的應用,并在端口進行監聽。通過瀏覽器打開可以看到部署的應用可以訪問了。
背景
前一段時間,是通過百度云的BAE部署自己的Node應用的,不過隨著應用的不斷開發,BAE的限制不斷制約了應用的使用。于是著手將應用遷移到阿里云的ECS上去。本文即是介紹了如何在ECS上搭建Node環境,并將本地制作好的應用進行發布。
環境介紹本地: Mac OSX 10.11.4,應用采用的技術:Node.js + Express.js
遠端服務器:阿里云ECS(1核CPU、1GB內存),IP:123.57.205.23,系統為CentOS7.0
Github:賬戶名:e10101
系統架構服務器部署Node的應用,并在3000端口進行監聽。本地代碼開發測試后,更新到Github私人倉庫。然后通過pm2部署遠程服務器。
服務器端安裝必要的軟件擬安裝如下應用:Node、npm、pm2。
通過預留的賬號密碼登錄系統,終端中輸入:
ssh root@123.57.205.23
更新軟件:
yum update -y
更新完畢后,安裝Node.js:
yum install nodejs -y
安裝Npm:
yum install yum -y
安裝pm2:
npm install pm2 -g(可選)服務器端創建新用戶
為服務器安全起見,創建用戶(用戶名:yishi):
useradd yishi
設置密碼:
passwd yishi
添加sudo權限:
usermod -aG wheel yishi(可選)服務器端關閉root用戶的ssh訪問
為服務器安全起見,關閉root賬戶的遠程訪問。
打開配置文件:
vi /etc/ssh/sshd_config
找到如下設置,并修改yes為no:
PermitRootLogin no
保存文件后,重啟sshd服務:
service sshd restart
退出root賬戶,并使用新創建用戶訪問。
本地安裝pm2Macbook中,由于已經具備了node以及npm,再次不介紹如何安裝上述兩個軟件了。與服務器端類似,通過如下命令安裝pm2:
npm install pm2 -g
如果可得到版本號,則說明安裝成功:
pm2 -v設置Github倉庫
此處為方便演示,我們在Github上新建一個私人(private)倉庫,名為pm2app。
倉庫創建后,還需要設置Deploy keys,依次點擊Settings > Deploy keys > Add deploy key。其中的Key部分,可以在服務器端上通過ssh-keygen生成,并通過
cat ~/.ssh/id_rsa.pub
即可輸出。輸出后,復制到deploy key中點擊Add key,完成設置。
完成上述設置后,需要本地的應用代碼關聯此Github倉庫,按照Github官網的介紹,通過在本地應用下執行:
git remote add origin https://github.com/e10101/pm2app.git git push -u origin master
來完成設置。
本地pm2的ecosystem配置在本地的目標應用下,輸入:
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 : "git@github.com: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 : "git@github.com:repo.git", path : "/var/www/development", "post-deploy" : "npm install && pm2 startOrRestart ecosystem.json --env dev", env : { NODE_ENV: "dev" } } } }
應為目前我們僅部署一個應用,因此,先把不必要的信息刪除,即刪除apps部分的第二項。同時把我們的目標文件改為你應用的入口文件,此處修改為Express.js的默認設置,即:
script : "./bin/www",
apps部分就設置完畢了,然后再設置deploy部分。其中production用于生產環境,dev用于開發環境,為了演示,我們只設置production部分。
下面依次介紹各個設置:
production : { user : "登錄遠程服務器的用戶名,此處填寫我們創建的yishi", host : "遠程服務器的IP或hostname,此處可以是數組同步部署多個服務器,不過鑒于我們只有一個服務器,因此我們填寫123.57.205.23", ref : "遠端名稱及分支名,此處填寫origin/master", repo : "git倉庫地址,此處填寫git@github.com:e10101/pm2app.git", path : "遠程服務器部署目錄,需要填寫user具備寫入權限的目錄,此處填寫/home/yishi/www/production", "post-deploy" : "部署后需要執行的命令,此處填寫npm install && pm2 startOrRestart ecosystem.json --env production" },
整理后,按照我們的設置,應為:
production: { user: "yishi", host: "123.57.205.23", ref: "origin/master", repo: "git@github.com:e10101/pm2app.git", path: "/home/yishi/www/production", "post-deploy": "npm install && pm2 startOrRestart ecosystem.json --env production" },
因為pm2的部署是通過ssh進行的,因此需要開通本地到遠程服務器的無密碼登錄,同樣,在Mac下,通過ssh-keygen生成RSA公鑰,并拷貝到遠程服務器:
scp ~/.ssh/id_rsa.pub yishi@123.57.205.23:/home/yishi/.ssh/authorized_keys
上述命令中的yishi為用戶名,執行時需要替換為你設置的用戶名。
設置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: "git@github.com:e10101/pm2app.git", path: "/home/yishi/www/production", "post-deploy": "npm install && pm2 startOrRestart ecosystem.json --env production" } } }
在本地應用目錄下,執行pm2 deploy命令:
pm2 deploy ecosystem.json production setup
提示錯誤:
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
此時主要是在遠程服務器中,并未將http://github.com加入known_hosts,在服務器端通過如下命令設置:
ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
在本地繼續執行部署命令:
pm2 deploy ecosystem.json production setup
此時,如無其他問題,輸出應提示:
○ setup complete --> Success
至此,pm2的部署設置完畢。
pm2部署pm2的部署設置完畢后,接下來就是實際部署了。
在部署前,現將本地代碼修改并進行git提交:
git add . git commit -m "update ecosystem" git push
提交后,在本地應用目錄,輸入如下命令進行生產環境的部署:
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
部署成功,在遠程服務器查看端口情況:
netstat -antp
可以看到應用默認部署的3000端口已經開放了。通過瀏覽器打開:
http://123.57.205.23:3000/
可以看到部署的Web應用可以訪問了。(如果netstat -antp中可見3000端口可訪問,可以檢查下ECS的防火墻設置,確保3000端口對外開放)
pm2其他命令應用列表:
pm2 list
應用信息(查看應用編號為0的信息):
pm2 show 0(重要)服務器端設置pm2開機自動啟動
開啟啟動設置,此處是CentOS系統,其他系統替換最后一個選項(可選項:ubuntu, centos, redhat, gentoo, systemd, darwin, amazon):
pm2 startup centos
然后按照提示需要輸入的命令進行輸入:
sudo su -c "env PATH=$PATH:/usr/bin pm2 startup centos -u yishi --hp /home/yishi"
保存pm2設置
pm2 save
現在重新啟動系統,測試是否可以開機啟動:
sudo reboot
等系統重啟后,通過瀏覽器檢查系統是否自動啟動:
http://123.57.205.23:3000/
如果啟動正常,說明設置成功!
以上就是如何通過pm2部署Node應用到服務器生成環境的總結。
參考參考部分包含了一些先關鏈接,詳見我的知乎專欄此:
作者:郭一實
鏈接:https://zhuanlan.zhihu.com/p/20940096
來源:知乎
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/39287.html
摘要:原始文檔在現在搬過來學習入門學習頁面之間的導航學習使用共享組件學習創建動態內容學習使用路由掩碼創建干凈的學習干凈的服務器支持學習獲取數據學習部署部署要部署一個應用程序當然我們首先需要一個可部署的已經開發完成的應用程序以下面這個開發的小型博客 原始文檔在 https://github.com/developerw... 現在搬過來.學習 Next.js: 入門學習 Next.js: 頁面...
摘要:就在幾周前,我正在和一個朋友談話,他不經意間提到,你永遠都不會在生產中直接使用來運行程序。我強烈點頭,表示我也不會在生產中直接運行,原因可能每個人都知道。首先,讓我們弄清楚永遠不要在生產中直接通過運行程序的說法。 原文地址:You should never ever run directly against Node.js in production. Maybe. 原文作者:Burke ...
摘要:一是什么是可以用于生產環境的的進程管理工具,并且它內置一個負載均衡。嗯嗯,最好的用處就是監控我們的生產環境下的程序運行狀態,讓它給我們日以繼日的處于工作狀態。部署自動部署,避免逐個在所有服務器中進行。 一、PM2是什么 是可以用于生產環境的Nodejs的進程管理工具,并且它內置一個負載均衡。它不僅可以保證服務不會中斷一直在線,并且提供0秒reload功能,還有其他一系列進程管理、監控...
摘要:使用背景當我們需要將項目部署到遠程線上服務器時傳統的方法可能就是將本地代碼通過等方式上傳到服務器然后通過登入到服務器,配置好環境手動啟動應用。 使用背景 當我們需要將項目部署到遠程線上服務器時;傳統的方法可能就是: 將本地代碼通過ssh、ftp等方式上傳到服務器; 然后通過ssh登入到服務器,配置好環境; 手動啟動應用。 太過手動化,麻煩,操作繁瑣。 現代自動化部署 ...
閱讀 2022·2023-04-25 23:30
閱讀 1452·2021-11-24 10:18
閱讀 3069·2021-10-09 09:54
閱讀 2017·2021-10-08 10:05
閱讀 3431·2021-09-23 11:21
閱讀 3161·2019-08-30 15:52
閱讀 1560·2019-08-30 13:05
閱讀 1056·2019-08-30 13:02