部署流程
1、創建主機
2、創建用戶
3、安裝運行環境
4、把項目同步到服務器
5、安裝進程管理程序
6、使用ip和端口調試,沒問題,使用nginx作為反向代理
7、使用域名訪問(先申請再綁定)
一、創建主機
目前可(ke)以使用(yong)各(ge)大廠商提(ti)供的云服(fu)務,快速創建主機。而不用(yong)自己花高昂(ang)的價格去(qu)買,也不用(yong)在全國各(ge)地找合適的節點安裝部(bu)署(shu)。
二、創建用戶
創建主機后(hou),默認有一個root賬戶,擁有所有權限。首(shou)先需要需要給root賬戶設置密碼(ma)。
因為root具有所有權(quan)限(xian),掌握著整臺服(fu)務(wu)(wu)器的(de)生(sheng)殺大(da)權(quan),我們(men)部署服(fu)務(wu)(wu)的(de)時候,通常(chang)不(bu)用root賬號去(qu)配置(zhi)(zhi),而(er)是(shi)重(zhong)新設置(zhi)(zhi)一個(ge)賬號去(qu)配置(zhi)(zhi)。通常(chang)是(shi)一個(ge)服(fu)務(wu)(wu)一個(ge)賬號,單獨管(guan)理。比(bi)如我們(men)要設置(zhi)(zhi)一個(ge)web服(fu)務(wu)(wu)的(de)賬號,我們(men)可以這(zhe)樣(yang)
add user web
就創建了web賬戶,當然,你需要(yao)為他設(she)定(ding)密(mi)碼。因為在很多地(di)方都需要(yao)用(yong)到sudo命令(ling),而默認情況下,新建的用(yong)戶并不具備這個命令(ling)的權(quan)限。因此給web賬戶配置sudo權(quan)限。打開/etc/sudoers文件,發現(xian)sudo其實是個用(yong)戶組,使用(yong)
usermod -G sudo web
把web賬戶加入sudo這個組就可以了。
使(shi)用exit退出當(dang)前用戶,輸入(ru)web@ip和密碼(ma),使(shi)用web賬戶登錄。
三、安裝運行環境
像(xiang)Nodejs Python 這種動態語言而言,必(bi)須要(yao)有相應環境才能(neng)運行(xing)。因此(ci)需要(yao)配(pei)置運行(xing)環境。而 C、C++、Golang 、Rust 是靜態語言,需要(yao)先(xian)將項目(mu)編(bian)(bian)(bian)譯(yi)成(cheng)(cheng)二(er)進制文件,再直接在(zai)(zai)服(fu)務(wu)(wu)器運行(xing)。因此(ci)靜態語言需要(yao)配(pei)置編(bian)(bian)(bian)譯(yi)環境,但一般不(bu)在(zai)(zai)服(fu)務(wu)(wu)器配(pei)置,而是在(zai)(zai)其(qi)他(ta)地(di)方配(pei)置編(bian)(bian)(bian)譯(yi)環境,比(bi)如在(zai)(zai)docker中,服(fu)務(wu)(wu)器只(zhi)需要(yao)運行(xing)編(bian)(bian)(bian)譯(yi)后(hou)(hou)的(de)二(er)進制可(ke)執行(xing)文件即可(ke)。即便是使(shi)用(yong)nvm安裝node運行(xing)環境,nvm在(zai)(zai)正(zheng)式的(de)生產(chan)環境也是很少使(shi)用(yong),因為nvm有很多弊端,比(bi)如,nvm將程序安裝在(zai)(zai)了用(yong)戶目(mu)錄,這就意味著(zhu)其(qi)他(ta)用(yong)戶無(wu)法使(shi)用(yong)。從而給后(hou)(hou)期的(de)維護造(zao)成(cheng)(cheng)麻煩。因此(ci),可(ke)以(yi)參考(kao)node官網是如何安裝的(de)。
四、把項目同步到服務器
手(shou)動(dong)部(bu)署,比如通過(guo)ssh sftp等把文(wen)件拉過(guo)來(lai),或者使用(yong)git clone下來(lai)。這些都是(shi)手(shou)動(dong)部(bu)署,效率不(bu)高。而現在,越(yue)來(lai)越(yue)多項目在使用(yong)自(zi)動(dong)部(bu)署,例如jenkins進行自(zi)動(dong)化部(bu)署,還可(ke)以進行自(zi)動(dong)化測試。可(ke)以在docker中安(an)裝。kubernetes 是(shi)用(yong)來(lai)管理docker集(ji)群的。
五、安裝進程管理程序
當我(wo)們(men)(men)在(zai)(zai)使用(yong)(yong)(yong)(yong)npm start 啟動(dong)程序(xu)(xu)時,默(mo)認是在(zai)(zai)前臺(tai)運行的(de)(de),一旦使用(yong)(yong)(yong)(yong)Ctrl + C干掉當前的(de)(de)進程回到命令行時,服務(wu)也就跟著掛了(le)。因此(ci),我(wo)們(men)(men)想讓程序(xu)(xu)在(zai)(zai)后臺(tai)運行,我(wo)們(men)(men)可以(yi)在(zai)(zai)命令行的(de)(de)末尾加上 & 比(bi)如 npm start & 盡管(guan)程序(xu)(xu)在(zai)(zai)后臺(tai)運行了(le),但是管(guan)理(li)這個進程卻有(you)不小的(de)(de)麻煩。因此(ci)推(tui)薦使用(yong)(yong)(yong)(yong)專門的(de)(de)進程管(guan)理(li)程序(xu)(xu) 比(bi)如 使用(yong)(yong)(yong)(yong)node寫的(de)(de)pm2 和使用(yong)(yong)(yong)(yong)Python寫的(de)(de)supervisor盡管(guan)可以(yi)使用(yong)(yong)(yong)(yong)pm2 logs來查看日(ri)志(zhi),但是也有(you)專門的(de)(de)日(ri)志(zhi)服務(wu),來方便我(wo)們(men)(men)處理(li)日(ri)志(zhi),比(bi)如elastic。
六、使用ip和端口調試,沒問題,使用nginx作為反向代理
先使(shi)用(yong)IP地址和端口(kou)(kou)(kou)(kou)組合(he)進行調試,需要注意的是,root用(yong)戶(hu)才有權限(xian)取得(de)1024端口(kou)(kou)(kou)(kou)以下的端口(kou)(kou)(kou)(kou),而(er)(er)其他用(yong)戶(hu)是沒(mei)有這個(ge)權限(xian)的。而(er)(er)一(yi)般(ban)我們寫程(cheng)序也(ye)不要指定80端口(kou)(kou)(kou)(kou),而(er)(er)是使(shi)用(yong)反向代理(li),使(shi)用(yong)nginx 將監聽的80端口(kou)(kou)(kou)(kou),映射到(dao)程(cheng)序指定的端口(kou)(kou)(kou)(kou)處理(li)。
在(zai)Ubuntu環境下我們(men)可(ke)以(yi)使(shi)(shi)用(yong)apt-get 來安裝(zhuang) nginx 服(fu)務(wu),而使(shi)(shi)用(yong)nginx需(xu)要在(zai)nginx的配(pei)(pei)置(zhi)(zhi)文(wen)件配(pei)(pei)置(zhi)(zhi)這個(ge)服(fu)務(wu)端口映射關系。其配(pei)(pei)置(zhi)(zhi)文(wen)件路徑在(zai) /etc/nginx/config.d/目錄下,不(bu)存在(zai)是可(ke)以(yi)創建一(yi)個(ge)default.conf寫入配(pei)(pei)置(zhi)(zhi)。可(ke)以(yi)使(shi)(shi)用(yong) nginx -t來檢(jian)測配(pei)(pei)置(zhi)(zhi)是否有問題(ti)。配(pei)(pei)置(zhi)(zhi)完成之后需(xu)要使(shi)(shi)用(yong)sudo nginx -s reload重啟服(fu)務(wu),以(yi)使(shi)(shi)配(pei)(pei)置(zhi)(zhi)生效(xiao)。
在node程(cheng)序(xu)中,我們(men)使(shi)用了環境(jing)變量PORT來指定端(duan)口(kou),在自動化(hua)配(pei)(pei)置(zhi)(zhi)時(shi),修改端(duan)口(kou)時(shi)或許不太(tai)方(fang)便,我們(men)也(ye)可以使(shi)用專業(ye)的(de)配(pei)(pei)置(zhi)(zhi)服(fu)務來處理這(zhe)些事情。比如使(shi)用consul來管理配(pei)(pei)置(zhi)(zhi)服(fu)務,可以做(zuo)到(dao)配(pei)(pei)置(zhi)(zhi)的(de)集中化(hua)。
七、使用域名訪問
IP地(di)址難于(yu)記憶,于(yu)是就有了域(yu)名(ming),將域(yu)名(ming)和IP地(di)址一(yi)一(yi)匹配就可以(yi)通過域(yu)名(ming)來訪問了,這就是所謂(wei)的dns所做的事(shi)情,將域(yu)名(ming)解析為IP地(di)址。還有些(xie)場合要求(qiu)必(bi)須(xu)使用(yong)域(yu)名(ming)而不(bu)讓(rang)用(yong)ip地(di)址。因(yin)此使用(yong)域(yu)名(ming)訪問的第(di)一(yi)步,就是要注(zhu)冊一(yi)個域(yu)名(ming)。
一個(ge)域名(ming)只能綁(bang)定(ding)一個(ge)主機,如(ru)果想讓同一個(ge)域名(ming)下指定(ding)多個(ge)主機,可(ke)以設(she)置子域名(ming),再指向別的(de)主機。注冊域名(ming)之后,要將域名(ming)和主機進(jin)行(xing)綁(bang)定(ding)。綁(bang)定(ding)之后,就可(ke)以直接使用域名(ming)來訪問了(le)。