前后端分離項(xiàng)目的服務(wù)器部署

本文轉(zhuǎn)載自我的個(gè)人博客

前幾天我的個(gè)人網(wǎng)站終于部署上線了,趁現(xiàn)在還記得,趕緊把流程記錄下來(lái)。本文講的是前后端分離的項(xiàng)目的服務(wù)器部署,這里就以我的個(gè)人網(wǎng)站為例子。我的個(gè)人網(wǎng)站前端是react,后端是nodejs,數(shù)據(jù)庫(kù)是mongodb

為了把項(xiàng)目部署上線,首先我們需要確保這個(gè)項(xiàng)目已經(jīng)在本地跑通了,所謂跑通就是前端,后端,和服務(wù)器都已經(jīng)被串在一起,而且可以正常運(yùn)行了。在這個(gè)基礎(chǔ)上,我們的部署分為以下幾個(gè)步驟:

  1. 購(gòu)買域名和遠(yuǎn)程服務(wù)器
  2. 域名解析,實(shí)名制認(rèn)證,備案
  3. 把項(xiàng)目代碼放在遠(yuǎn)程服務(wù)器上
  4. 程服務(wù)器安裝數(shù)據(jù)庫(kù)
  5. 前端編譯靜態(tài)文件
  6. nginx前端配置
  7. 解決前后端跨域問(wèn)題
  8. 項(xiàng)目在線上跑通以及后續(xù)完善

步驟很多,看起來(lái)很嚇人,但是實(shí)際操作起來(lái)還是很快的,下面我們就一步一步的來(lái)講解吧。

1. 購(gòu)買域名和遠(yuǎn)程服務(wù)器

域名和遠(yuǎn)程服務(wù)器推薦在阿里云上購(gòu)買, 原因是購(gòu)買了他們的產(chǎn)品后有一系列很詳細(xì)的教程,對(duì)于新手來(lái)說(shuō)是很友好的。

購(gòu)買后的域名需要進(jìn)行實(shí)名制認(rèn)證,這個(gè)過(guò)程很快,幾乎是即時(shí)的,具體的認(rèn)證方式阿里云上都有詳細(xì)的說(shuō)明。

服務(wù)器我買的是阿里云的輕量應(yīng)用服務(wù)器,物美價(jià)廉,對(duì)于我的個(gè)人網(wǎng)站來(lái)說(shuō)足夠用了。購(gòu)買服務(wù)器時(shí),會(huì)讓你選擇服務(wù)器的地域,如果你的地域選在國(guó)內(nèi)的話那你的域名是需要備案的,而這個(gè)備案過(guò)程大約需要半個(gè)月,所以著急著項(xiàng)目上線的同學(xué)可以把地域選在香港,是不用備案的。但是服務(wù)器放在香港的缺點(diǎn)就是有點(diǎn)延遲,所以服務(wù)器放在哪里還需要自己權(quán)衡。

購(gòu)買服務(wù)器時(shí)還需要選擇應(yīng)用鏡像和系統(tǒng)鏡像,這里我們沒有用到任何應(yīng)用來(lái)構(gòu)建我們的網(wǎng)站,所以只要選擇系統(tǒng)鏡像就好了。而選擇什么系統(tǒng)呢?什么系統(tǒng)你最熟悉就選擇什么系統(tǒng),如果你完全是個(gè)小白,而且也不熟悉Linux系統(tǒng)的話,我個(gè)人不負(fù)責(zé)任的推薦windows系統(tǒng)。至于windows系統(tǒng)被嫌棄的不安全等問(wèn)題,對(duì)于我這個(gè)個(gè)人網(wǎng)站來(lái)說(shuō)都是不那么重要的。

2. 域名解析

在對(duì)域名進(jìn)行實(shí)名制認(rèn)證之后(如果你的服務(wù)器地域在國(guó)內(nèi),還需要進(jìn)行備案),我們就可以對(duì)域名進(jìn)行解析了。所謂域名解析,就是把域名的指向設(shè)置為我們購(gòu)買的服務(wù)器的ip地址。域名只是一個(gè)方便我們記住的網(wǎng)站的名字,而我們真正需要訪問(wèn)的其實(shí)是服務(wù)器的那個(gè)ip地址。你也可以這么理解:我們通過(guò)域名解析來(lái)把域名和服務(wù)器關(guān)聯(lián)了起來(lái)。

域名解析很簡(jiǎn)單,如果你的域名和服務(wù)器都是在阿里云購(gòu)買的,可以一鍵解析。具體教程阿里云上寫的很清楚,這里就不再贅述。

3. 把項(xiàng)目代碼放在遠(yuǎn)程服務(wù)器上

接下來(lái)我們需要想個(gè)辦法把代碼搬到遠(yuǎn)程服務(wù)器上,這里我推薦使用git。我們可以把項(xiàng)目放在github上之后,再在遠(yuǎn)程服務(wù)器上把代碼clone下來(lái)。關(guān)于git有一個(gè)很淺顯易懂的教程,是廖雪峰老師寫的,這是鏈接

代碼clone下來(lái)以后不要忘了在服務(wù)器上安裝運(yùn)行代碼所需要的軟件和依賴包。比如我的后端是nodejs所以我就需要安裝node。而依賴包的安裝可以借助包管理工具npm或者是yarn。具體的方法在我的另一篇文章里有,請(qǐng)移步

4. 遠(yuǎn)程服務(wù)器安裝數(shù)據(jù)庫(kù)

前后端就準(zhǔn)備妥當(dāng),這時(shí)候我們需要在服務(wù)器上安裝數(shù)據(jù)庫(kù)了。不同的數(shù)據(jù)庫(kù)安裝方法不同,相同的數(shù)據(jù)庫(kù)庫(kù)不同的操作系統(tǒng)安裝方法也不同,這里需要根據(jù)自己的情況去找相應(yīng)的文檔。

如果你也是在windows系統(tǒng)里安裝mongodb數(shù)據(jù)庫(kù)的話,可以參考這個(gè)視頻

關(guān)于如何在網(wǎng)上準(zhǔn)確的找到自己所需要的資料,這里我想結(jié)合我的經(jīng)驗(yàn)說(shuō)幾句。找資料首先第一想到的應(yīng)該是官方文檔,因?yàn)楣俜轿臋n是最新的,很多數(shù)據(jù)庫(kù)(比如mongodb我就踩過(guò)坑),版本的變更安裝方法也會(huì)不一樣,第三方網(wǎng)站給出的安裝方法往往都是過(guò)時(shí)的,不適用的。但如果官方文檔讀的云里霧里怎么辦?這個(gè)時(shí)候我推薦去Youtube找視頻看,把視頻按發(fā)布時(shí)間排序,找最新的視頻看。這樣再結(jié)合官方文檔應(yīng)該就沒有問(wèn)題了。

5. 文件編譯

關(guān)于編譯我知道的也不多,所以這里只說(shuō)一下具體我是怎么操作的,留個(gè)坑以后填。

首先是前端代碼的編譯,前端代碼里直接npm run build或者是yarn run build就可以編譯出靜態(tài)文件,這里的靜態(tài)文件是經(jīng)過(guò)壓縮的,所以代碼的加載速度快。另外由于我的前端代碼是用ES6標(biāo)準(zhǔn)寫的,執(zhí)行這個(gè)編譯過(guò)程(如果你正確配置了babel)也幫我把ES6編譯成了服務(wù)器可以識(shí)別的ES5代碼。

然后是后端,后端也使用ES6寫的,所以后端也需要用babel來(lái)編譯一下。

6. nginx前端配置

這里我們使用nginx主要有兩個(gè)目的,第一是我們需要nginx充當(dāng)我們的前端靜態(tài)文件代理服務(wù)器,第二就是我們需要nginx的反向代理幫我們解決跨域的問(wèn)題,因?yàn)槲覀冞@是一個(gè)前后端分離的項(xiàng)目,前后端運(yùn)行在不同的端口上就需要解決跨域的問(wèn)題。

ngnix可以去官網(wǎng)下載,下載完成后找到nginx.conf文件,我的是在目錄C:\nginx-1.14.2\nginx-1.14.2\conf下。打開nginx.conf文件,這里我們重點(diǎn)關(guān)注一下server里面的配置,有幾項(xiàng)要根據(jù)我們的具體情況進(jìn)行編輯。

  server {

    listen 80;
    
    server_name chenxin.art;
    
    root "C:/xinart/client/build";
    
    location / {
      try_files $uri /index.html;
    }
      
  }

首先,listen在80端口,沒有問(wèn)題,因?yàn)槲覀冚斎刖W(wǎng)址時(shí)默認(rèn)的就是訪問(wèn)80端口。

server_name后面應(yīng)該填上你自己的域名。

root后面應(yīng)該填你的前端靜態(tài)文件的存放目錄。

location后面的/表示當(dāng)路徑在主頁(yè)的時(shí)候,這里不需要改動(dòng)。花括號(hào)表示訪問(wèn)根目錄里面(也就是你填寫的root目錄)的index.html文件。如果你的入口文件是別的名字的話記得更改。

整個(gè)連起來(lái),著幾行代碼的意思就是:當(dāng)輸入網(wǎng)址chenxin.art的時(shí)候,nginx會(huì)加載root目錄里的index.html文件。相信理解以后你就知道要改哪些東西了。

到這一步為止,在瀏覽器中輸入你的域名應(yīng)該可以看到靜態(tài)部分的網(wǎng)頁(yè)了,但是你會(huì)發(fā)現(xiàn)所有的ajax請(qǐng)求都會(huì)報(bào)錯(cuò),因?yàn)槲覀兊那昂蠖诉€沒有真正的連通,還有一個(gè)跨域的問(wèn)題需要解決。

7. 解決前后端跨域問(wèn)題

我們借助nginx的反向代理來(lái)解決跨域的問(wèn)題。具體操作如下:在nginx.conf文件的server配置里新增幾行代碼,現(xiàn)在你的server應(yīng)該如下所示:

    server {
    
    listen 80;
    
    server_name chenxin.art;
    
    root "C:/xinart/client/build";
    
    location / {
        try_files $uri /index.html;
    }
       
    location /api {
        proxy_pass http://localhost:8080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection ‘upgrade’;
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
    }

別的地方都沒動(dòng),我們只是新增了一個(gè)location,而且這個(gè)location后面的路徑需要改成你自己的ajax請(qǐng)求的路徑,比如我的是/api

proxy_pass后面的端口號(hào)也要改一下,改成你的后端運(yùn)行的端口。再后面的代碼我們保持原樣,不用更改。

這新增的幾句代碼的意思是:當(dāng)請(qǐng)求的路徑以/api開頭時(shí),將請(qǐng)求代理到8080端口,而我的后端就運(yùn)行在8080端口,所以就能夠響應(yīng)請(qǐng)求了。

到這里為止,我們的項(xiàng)目就算是真正的在線上跑通了。

8. 項(xiàng)目在線上跑通以及后續(xù)完善

項(xiàng)目跑通以后還有事情可以做,比如配置https,還有各種優(yōu)化等等,有興趣的同學(xué)可以自己去搜搜資料。

一點(diǎn)小心得

把自己個(gè)人網(wǎng)站的服務(wù)器部署像流水賬這樣寫一遍也還是很有收獲的,那就是很好的找出了自己不懂地方(苦笑),那些說(shuō)不清楚的地方其實(shí)就是還沒有真正弄懂的地方。因?yàn)椴渴鸱?wù)器涉及的東西太多太雜,一時(shí)半會(huì)想弄清也不現(xiàn)實(shí),坑多慢慢填呀。。。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,412評(píng)論 6 532
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,514評(píng)論 3 416
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,373評(píng)論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,975評(píng)論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,743評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,199評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,262評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,414評(píng)論 0 288
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,951評(píng)論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,780評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,983評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,527評(píng)論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,218評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,649評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,889評(píng)論 1 286
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,673評(píng)論 3 391
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,967評(píng)論 2 374

推薦閱讀更多精彩內(nèi)容