1. 程式人生 > >從零開始構建部署上線Node.js+Express+Bootstrap+Jade響應式網站應用—RSPT丨留學生活第一站(三)

從零開始構建部署上線Node.js+Express+Bootstrap+Jade響應式網站應用—RSPT丨留學生活第一站(三)

一、Nodejs 線上伺服器部署與釋出綜述

伺服器配置生產環境所需要的步驟大致為:

這裡寫圖片描述

整個專案部署詳細流程文字解析:
這裡寫圖片描述

部署流程圖依照學習課程的流程:
這裡寫圖片描述

看著這個圖,Scott老師有一段精彩的故事詮釋它:

故事還得從左下腳的角落開始,一把椅子,一臺桌子,一個電腦,可能還有一罐紅牛,一包紙巾,我們就開始了白天當黑夜,黑夜當白天的程式設計之旅,程式碼寫的死去活來,bug敲的痛不欲生,總算在七七四九天之後,我們終於在電腦上藉助nodejs開發出了我們一個靜態網站,電影網站,一個給狗狗配音的手機app,一個裝修房子的微信小程式,還有一個可以回覆和分享和看電影的微信公眾號。然而這些應用都是跑在本地電腦上,誰也看不到,誰也用不了,左思右想,還是得把這些自己辛辛苦苦生出來的孩子放在網上給別人看,好歹也算是自己的一次創業經歷。

於是我們開始邁出了第一步,那就是先為這這五個應用購買一個域名,雖然購買五個也行,但是看看北京的房價,還是隻買一個吧,一個域名也可以分出五個二級域名來使用嘛,創業總是要省著點的嘛。購買域名之後,我們需要給這個域名備案,畢竟還是得接受國家監管的嘛,不備案不是中國人,哼~。

接下來我們要邁出第二步,把用來買零食的錢都用來買一臺伺服器,有了這個伺服器,我們總算給這些孩子們提供了一個家了,但是現在家徒四壁,啥都沒有,我們的五個孩子嗷嗷待哺,別說嬰兒車,安全座椅,連奶都沒有。

於是我們開始邁出第三步,從我們的小角落通過ssh通道,連線上我們的伺服器,配置使用者的許可權,安裝mongodb資料庫,配置nodejs環境,配置nginx前置數

,為了不讓孩子們受到傷害,我們還得給伺服器加裝Iptables和FailtoBan這些安全防護措施,為了不讓大家來看我們熊孩子的時候,洩露個人資訊或者是傷害到伺服器的資料,我們還得配置SSL證書,所有的人都得頂著安全帽,帶著白口罩來咱們家,為了我們自己不會輕易的給孩子喂錯奶,換錯紙尿布,我們還得對我們本地到伺服器ssh通道進行加固防護,這有我們自己才有許可權去照顧孩子,這個網上的家算是搭好了,算不上精裝修,但是也足夠住了。但是孩子們現在都在我們本地的電腦上,離新家還有兩萬五千公里,ssh通道也太小,如果老是借來借去的,也是算是麻煩,而且還不夠安全。

於是我們邁出第四步,找一個寄養的家。什麼寄養的家,不就是一個託兒所嘛,好吧,我承認是一個非常安全的託兒所,我們找了一個提供私有倉庫的託兒所

,從我們本地電腦把五個孩子一個一個扔過去,把五個孩子存到那,如果有需要要讓他們去到伺服器裡面的時候,我們就直接通知伺服器到託兒所接孩子們,我們就再也不用從本地一個位元組一個位元組的傳送他們了。然後問題馬上就來了,用什麼工具接孩子,沒有駕駛員怎麼辦呢,怎麼才能從通知駕駛員從伺服器裡接孩子呢?想一想都頭疼。

於是我們邁出第五步,在本地和伺服器上都安裝git軟體,都安裝pm2,這個pm2不是北京天上的那個pm2.我們通過git來把孩子傳送到私有倉庫,讓伺服器通過git來下載孩子,至於pm2就是這個駕駛員兼職保姆,其實就是個老司機,我們本地通知伺服器上的pm2,讓他去私有倉庫(託兒所)用git把孩子運到新家後,pm2會去協調node程序,培養孩子們各自發揮自己的聰明才智,跟外面的朋友們進行各種互動,可是孩子們太自私了,都想搶佔80埠。

於是我們被逼邁出了第六步,開始分家,我們按照老大、老二、老三的順序,分別給他們分配3000埠、3001埠、3002埠、3003埠、3004埠,然後讓nginx來當伺服器的大門總管,由他一個人持有80埠,所有想要訪問新房的客人,都得先過nginx這一關,有他來識別訪客,如果訪客來看老二的,也就是電影網站,我們就把這個訪客轉發到3001埠,以此類推下去。伺服器的大門總管nginx一眼便識訪客們的真正目的,首先通過SSL證書跟訪客進行握手交流,溝通認證之後,便會把訪客的請求轉交給後臺的300X埠,由nodejs來全部接手這個請求。

埠總算是分好了,可是問題又來了,訪客們都蒙圈了,不知道咱們新家在哪裡,這時候我們才想起來最後一件事,那就忘了給他們地址了,於是我們氣喘吁吁的跑到購買域名的服務商,去把域名的DNS記錄修改後,並且進行解析指向,給5個孩子分別分配了五個二級域名,訪客們就可以通過這五個域名,準確的找到這五個孩子們後發糖吃了。

養一個家不容易,養一個有孩子的家更難,事情到這裡也遠遠沒有結束,我們還有太多的育兒心得在接下來的學習中,這次部署方案並不是唯一的方式,也未必是最優,不同的產品的形態與運維方案有完全不同的操作方式。

二、選購域名伺服器及備案

我選購的域名商和伺服器商是: 阿里雲
官網地址:https://cn.aliyun.com/
進去後註冊賬號,個人實名驗證,然後去選擇伺服器的選擇。根據阿里雲的購買指南和網上的教程,買一個伺服器,一個域名,然後去備案,備案部分稍微有點麻煩,但只需要按照官方指示,也是很容易通過的。
這裡寫圖片描述

三、遠端登入伺服器

使用mac電腦,我自己的是黑蘋果,虛擬機器上安裝OS系統,然後進行操作。mac系統已經內建了windows下的 putty 軟體功能,下面就說一下具體使用方法。

mac系統下開啟的終端頁面,輸入如下程式碼:

ssh user@hostname

注:上邊程式碼為固定格式,其中
user為 linux 伺服器的管理員名稱
hostname 為 linux 伺服器的IP
如: ssh [email protected]
如此就可以像windows下的putty工具一樣遠端登入管理你的linux伺服器了。這裡可以用ssh [email protected] 登陸,因為root是預設最高管理員。
接下來就是輸入密碼(命令列輸密碼,不會顯示,游標都不會動,但只要準確輸入就好),確定後就可以遠端登入到咱們的伺服器了。

登入進ssh [email protected]後,我們需要配置root許可權賬號,指定欽差大臣去完成管理,不會動到一些敏感檔案。

  1. 通過 adduser rspt_manger 命令進入
  2. 輸入新的管理員密碼,完成管理員資訊完善
  3. rspt_manger進行升權:gpasswd -a rspt_manager sudo
  4. 輸入 sudo visudo,然後新增一句話,例如:
    這裡寫圖片描述
  5. 通過 shift+y 命令進入儲存,回車退出
  6. 這樣就可以通過ssh [email protected]來登入伺服器了

配置通過SSH實現無密碼登入

這裡寫圖片描述

  1. 本地生成金鑰
    在終端下執行命令:
ssh-keygen -t rsa -b 4096 -C "郵箱"

一路回車,各種提示按預設不要改,密碼可以跳過,等待執行完畢。然後執行:ls ~/.ssh
可以看到兩個金鑰檔案:id_rsa(私鑰),id_rsa.pub(公鑰)
然後輸入:eval "$(ssh-agent -s)" 把ssh代理跑起來。
將ssh的key加入到代理中:ssh-add ~/.ssh/id_rsa

  1. 放置公鑰到Linux伺服器。
    在伺服器端輸入 ssh-keygen -t rsa -b 4096 -C "郵箱"
    一路回車到底;
    然後輸入:eval "$(ssh-agent -s)" 把ssh代理跑起來。
    將ssh的key加入到代理中:ssh-add ~/.ssh/id_rsa
    然後把id_rsa.pub的內容加入到伺服器端的預設驗證檔案authorized_keys,執行:
    先登入到遠端伺服器
cd ~/.ssh

cat -n /home/cssor/.ssh/id_rsa.pub >> authorized_keys #將公鑰內容加入到authorized_keys檔案,沒有則新建一個就行。例如:

這裡寫圖片描述
然後通過 chmod 600 authorized_keys 把這個檔案的許可權給修改下。
在通過:sudo service ssh restart 把這個ssh服務重啟。

  1. 配置本地ssh config檔案。
    執行:vi ~/.ssh/config
    加入以下內容:
    Host cssor_server #別名,域名縮寫
    HostName cssor.com #完整的域名
    User cssor #登入該域名使用的賬號名
    PreferredAuthentications publickey #有些情況或許需要加入此句,優先驗證型別ssh
    IdentityFile ~/.ssh/id_rsa #私鑰檔案的路徑

注意事項
公鑰要放在登入伺服器所用的賬號的家目錄下,比如你用 abc登入遠端伺服器,就要把公鑰 放到 /home/abc/.ssh/下, authorized_keys檔案也是在這個目錄下。

給一張我完整無密碼登陸遠端伺服器的樣圖:
這裡寫圖片描述

第四部分會接著繼續實現線上部署~~~~