前后端分離項(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)鏡像窄潭,這里我們沒(méi)有用到任何應(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)該就沒(méi)有問(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下。打開(kāi)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端口跺嗽,沒(méi)有問(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)槲覀兊那昂蠖诉€沒(méi)有真正的連通幻赚,還有一個(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;
    }
    }

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

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

這新增的幾句代碼的意思是:當(dāng)請(qǐng)求的路徑以/api開(kāi)頭時(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í)就是還沒(méi)有真正弄懂的地方堪置。因?yàn)椴渴鸱?wù)器涉及的東西太多太雜躬存,一時(shí)半會(huì)想弄清也不現(xiàn)實(shí),坑多慢慢填呀晋柱。优构。。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末雁竞,一起剝皮案震驚了整個(gè)濱河市钦椭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌碑诉,老刑警劉巖彪腔,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡镀迂,警方通過(guò)查閱死者的電腦和手機(jī)臼勉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)格嗅,“玉大人,你說(shuō)我怎么就攤上這事唠帝⊥鸵矗” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵襟衰,是天一觀的道長(zhǎng)贴铜。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么绍坝? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任徘意,我火速辦了婚禮,結(jié)果婚禮上轩褐,老公的妹妹穿的比我還像新娘椎咧。我一直安慰自己,他們只是感情好把介,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布邑退。 她就那樣靜靜地躺著,像睡著了一般劳澄。 火紅的嫁衣襯著肌膚如雪地技。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,146評(píng)論 1 297
  • 那天秒拔,我揣著相機(jī)與錄音莫矗,去河邊找鬼。 笑死砂缩,一個(gè)胖子當(dāng)著我的面吹牛作谚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播庵芭,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼妹懒,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了双吆?” 一聲冷哼從身側(cè)響起眨唬,我...
    開(kāi)封第一講書(shū)人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎好乐,沒(méi)想到半個(gè)月后匾竿,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蔚万,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年岭妖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片反璃。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡昵慌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出淮蜈,到底是詐尸還是另有隱情斋攀,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布礁芦,位于F島的核電站蜻韭,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏柿扣。R本人自食惡果不足惜肖方,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望未状。 院中可真熱鬧俯画,春花似錦、人聲如沸司草。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)埋虹。三九已至猜憎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間搔课,已是汗流浹背胰柑。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留爬泥,地道東北人柬讨。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像袍啡,于是被迫代替她去往敵國(guó)和親踩官。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

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