摘要:現(xiàn)在,我們已經(jīng)有了云服務(wù)器了,接下來(lái)就是如何把我們能在本地跑起來(lái)的代碼部署在服務(wù)器上。云服務(wù)器設(shè)置,是運(yùn)維同學(xué)經(jīng)常打交道的。討論地址歡迎一起討論,地址從零開(kāi)始學(xué)習(xí)部署參考資料誰(shuí)說(shuō)前端不需要懂反向代理與負(fù)載均衡從入門到實(shí)踐
前段時(shí)間看到了張?jiān)讫埖奈恼?一個(gè)程序員的成長(zhǎng)之路 - 剖析別人,總結(jié)自己,里面有這么一段話
棧外技術(shù),是指棧內(nèi)技術(shù)的上下游,領(lǐng)域外的相關(guān)專業(yè)知識(shí),包括但不限于服務(wù)端技術(shù)、運(yùn)維、CDN、測(cè)試,甚至 UI 設(shè)計(jì)、產(chǎn)品設(shè)計(jì)等等,擴(kuò)展你棧內(nèi)技術(shù)的周圍領(lǐng)域,充分理解你的工作在整個(gè)技術(shù)研發(fā)體系中處于怎樣的環(huán)節(jié)。工作之余多投入一份精力,把其他棧外技術(shù)不斷納入到你的知識(shí)體系中來(lái),建立棧外能力。前端想要做的深入,往往會(huì)涉及到緩存、模板渲染、用戶體驗(yàn)等知識(shí),沒(méi)有相當(dāng)?shù)臈M饧夹g(shù)積累,你很難為自己的團(tuán)隊(duì)爭(zhēng)取到足夠的話語(yǔ)權(quán)。
想想自己在公司的時(shí)候,基本都是寫(xiě)業(yè)務(wù),做前端相關(guān)的工作,但對(duì)于其他方面是涉獵比較少,或者基本沒(méi)有的。又再想想之前面試的時(shí)候,面試官也會(huì)問(wèn)一些棧外問(wèn)題,比如說(shuō)你們公司的代碼是如何發(fā)布部署的,這時(shí)候的我是一臉懵逼的。這就使得我想要懂得如何部署代碼,以下是折騰的過(guò)程,記錄一下。
云服務(wù)器云服務(wù)器的購(gòu)買,可以選擇阿里云和騰訊云,我之前并沒(méi)有仔細(xì)地去比價(jià)兩者的價(jià)格如何,想著就是用來(lái)玩玩如何部署的,也就沒(méi)有多在意這些,畢竟也不是長(zhǎng)期購(gòu)買,花不了幾個(gè)錢,就選了騰訊云。至于選購(gòu)什么配置的服務(wù)器,就看個(gè)人了。買完之后,還要做一些認(rèn)證等,需要等待一兩天的時(shí)間。對(duì)了,我還買了一個(gè)域名,但是后來(lái)發(fā)現(xiàn)備案的手續(xù)挺麻煩的,想著之后用 ip 地址也可以訪問(wèn),就沒(méi)有去管了。
ssh 登錄有了服務(wù)器后,你需要登錄。那要怎么登錄呢,這里介紹一個(gè)簡(jiǎn)單的方法。
本地生成 ssh 公鑰首先,你需要確認(rèn)自己是否已經(jīng)擁有秘鑰。默認(rèn)情況下,用戶的 SSH 秘鑰存儲(chǔ)在~/.ssh 目錄下。進(jìn)入該目錄并列出其中內(nèi)容,便可以快速確認(rèn)自己是否已擁有秘鑰:
# 本地 $ cd ~/.ssh $ ls config id_rsa id_rsa.pub known_hosts
我們需要尋找一對(duì)以 id_dsa 或 id_rsa 命名的文件,其中一個(gè)帶有 .pub 擴(kuò)展名。.pub 文件是你的公鑰,另 一個(gè)則是私鑰。如果找不到這樣的文件或者根本沒(méi)有 .ssh 目錄, 你可以通過(guò)運(yùn)行 ssh-keygen 程序來(lái)創(chuàng)建它們。
# 本地 $ ssh-keygen Generating public/private rsa key pair. # 輸入 enter 鍵 Enter file in which to save the key (/Users/laohan/.ssh/id_rsa): Created directory "/Users/laohan/.ssh". # 兩次輸入密碼 Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /Users/laohan/.ssh/id_rsa. Your public key has been saved in /Users/laohan/.ssh/id_rsa.pub. The key fingerprint is: SHA256:XhI9aeGsVJklGyUTvNu+6ABzOZdZL2+y5aMOVQa+ZvI laohan@bogon The key"s randomart image is: +---[RSA 2048]----+ | .O*+ | | =+X . | | o O.o o | | . =.= = | | o S *o* . | | = =.*.o | | o ..E + | | . o.*. | | .o.=o.. | +----[SHA256]-----+
首先 ssh-keygen 會(huì)確認(rèn)密鑰的存儲(chǔ)位置(默認(rèn)是 .ssh/id_rsa),然后它會(huì)讓你重復(fù)一個(gè)密碼兩次,如果不想在使用公鑰的時(shí)候輸入密碼,可以留空。
公鑰看起來(lái)是這樣的:
$ cat ~/.ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDc4xbJxlMTgiE13I1RL6IsG44+3CQc8Ft03eZnYfNrPVeQIf9r9kTuArSiUnY+BHXn3mrQ5i+5AGi+alys94Pum2dZ68QtlY1QdEl4iN3LFXUkbJc+M0rllaDGH5JNtfk5imVqDo8Tn7aJsFd4IXbwrl3Euf+ccOb+s92RHwzbSRx37tP9pLF9ujfL0UXfg3+DmRJMJT7iN3OiJxfuF5k8KSySEz+YbhQoNeySuvVPeRHG/U6xOGcpzNjQIPApGsuFdLT5R/5x15W7SrC//XWuIQMmlVTW2X0YH+5NjT0nlLVWxS4drtRCS66JXtRceVqs5H5InbsLfALfTPyIkZ4t laohan@bogon
具體可以參考這里 Generating a new SSH key and adding it to the ssh-agent
云服務(wù)器配置$ cd $ mkdir .ssh && chmod 700 .ssh $ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys
接下來(lái),把開(kāi)發(fā)者的 SSH 公鑰添加到這個(gè)用戶的 authorized_keys 文件中。
$ vim .ssh/authorized_keys # 把之前生成是 SSH 公鑰添加到文件尾部本地 config 配置
現(xiàn)在已經(jīng)可以通過(guò) ssh 無(wú)密碼的方式登錄云服務(wù)器了
ssh root@IP # IP 為 云服務(wù)器的 IP 地址
如上,是不是感覺(jué)很方便。可是這種方式,你還是需要知道云服務(wù)器的 ip 地址,那有沒(méi)有更省腦的方式呢?
有的,在~/.ssh 下的 config 文件中添加以下代碼即可
Host hostname # hostname 為你想要設(shè)置的別名 HostName IP # IP 為云服務(wù)器的 IP 地址 User root IdentitiesOnly yes
之后,就可以通過(guò)如下的方式登錄到云服務(wù)器了
ssh hostname # hostname 為你剛才設(shè)置的名稱代碼
個(gè)人理解,云服務(wù)器也就是一臺(tái)機(jī)器,你的代碼在自己的電腦怎么跑,到了云服務(wù)器還是怎么跑,只是運(yùn)行的環(huán)境不一樣了,需要做一些配置。
現(xiàn)在,我們已經(jīng)有了云服務(wù)器了,接下來(lái)就是如何把我們能在本地跑起來(lái)的代碼部署在服務(wù)器上。
我采用的方式比較簡(jiǎn)單,就是直接在把我本地的代碼 push 到 github 上面,然后在服務(wù)器那里用 git clone,把代碼下載到本地。github 地址 koa-demo。又或者你可以把代碼在本地打包后,利用 scp 遠(yuǎn)程復(fù)制。
云服務(wù)器設(shè)置 nginxnginx,是運(yùn)維同學(xué)經(jīng)常打交道的。你可能聽(tīng)過(guò)反向代理、負(fù)載均衡等名詞,這都是跟 nginx 有關(guān)的。
安裝 nginx我的服務(wù)器是 centos 系統(tǒng)的,所以安裝的方式如下
yum install -y nginx
至于其他系統(tǒng)的安裝方式,自行查找了。
conf 配置對(duì)于 nginx 來(lái)說(shuō),主要就是 nginx.cof 這份配置文件,位于/etc/nginx 路徑下,下面就進(jìn)行修改
cd /etc/nginx vi nginx.conf
修改后的內(nèi)容如下
注意:確保紅色圈中的 1 部分沒(méi)有被注釋,圈中的 2 部分注釋。
這樣做的目的是為了如果之后需要添加多個(gè) server 的話,都在 nginx.conf 文件改,就不容易維護(hù)了。
接下來(lái),添加我們這次需要的跟 nginx 相關(guān)的文件
cd /etc/nginx/conf.d touch koa-demo.conf vi koa-demo.conf
然后,把以下內(nèi)容 copy 到 koa-demo.con 中并保存
upstream koa-demo { server 127.0.0.1:3000; } server { listen 80; location / { proxy_pass http://koa-demo; } }
之后,使用下面的命令
nginx -t # 用來(lái)測(cè)試你的配置文件是否 ok nginx -s reload # 重新加載配置文件
沒(méi)意外的話,這個(gè)時(shí)候在瀏覽器中輸入你的云服務(wù)器 ip 地址,就可以看到效果了。
等等,你說(shuō)你的瀏覽器沒(méi)反應(yīng)。不要慌,這是因?yàn)槟愕拇a還沒(méi)運(yùn)行呢
# 我的代碼克隆在這里,你的路徑可能跟我的不同 cd /opt/koa-demo npm start
這時(shí)候再刷新頁(yè)面,ok 了,大功告成。
接著,你可能就想給自己加個(gè)雞腿慶祝一下,然后就退出了云服務(wù)器,跑去吃飯了。吃完飯回來(lái),再次刷新瀏覽器,我了個(gè)去,怎么又沒(méi)內(nèi)容了。 為什么會(huì)這樣呢?
這是因?yàn)槟愦蜷_(kāi)的方式不對(duì),也就是啟動(dòng)代碼的方式不對(duì),你可以看看 packagek.json 的內(nèi)容,npm start 其實(shí)就是執(zhí)行 node index.js 。當(dāng)你這邊退出了,這個(gè)進(jìn)程也就結(jié)束了,想想在你的本地是不是也這樣,你在你的終端運(yùn)行,打開(kāi)瀏覽器是沒(méi)有問(wèn)題的,退出終端,再刷新頁(yè)面,就出問(wèn)題了。
那這個(gè)問(wèn)題要如何解決呢?呃,如果你之前有接觸過(guò) node,那應(yīng)該就聽(tīng)過(guò) pm2 這個(gè)詞了。是的,沒(méi)錯(cuò),接下來(lái)我們就用這個(gè) pm2 解決我們的問(wèn)題。
pm2 運(yùn)行程序如何學(xué)習(xí) pm2 呢,最快的方式就去看它的 官網(wǎng) 咯,里面的文檔還是寫(xiě)的很不錯(cuò)的,一個(gè) Quick Start 直接入門。
這里就不多介紹了,看文檔會(huì)更快了解。 那接下來(lái)怎么跑呢,你可以看到 package.json 里面的 script 還有個(gè)命令,就是 pm2,這個(gè)就是我之前已經(jīng)添加好了,用 pm2 來(lái)啟動(dòng)程序的命令。具體如下:
# 先登錄到云服務(wù)器 ssh hostname # 進(jìn)入代碼目錄 cd /opt/koa-demo # run npm run pm2
這個(gè)時(shí)候,即使你退出了,再次刷新頁(yè)面,也不會(huì)有問(wèn)題了。
Docker 部署docker,你應(yīng)該聽(tīng)過(guò)這個(gè)名詞吧,沒(méi)聽(tīng)過(guò)說(shuō)明你有點(diǎn)跟不上時(shí)代阿。 如果沒(méi)有了解過(guò) docker,可以參考阮一峰老師的 Docker 入門教程。
接下來(lái),就試一試如何利用 docker 部署我們的 nodejs 應(yīng)用。
首先,我們需要在我們的 koa-demo 中添加 Dockerfile 和.dockerignore。我已經(jīng)在代碼中添加好了,你可以直接簡(jiǎn)單地復(fù)制到你的項(xiàng)目中。至于其中的那些命令代表什么意思,就不多解釋了。你看完阮老師的那篇文章,多少有點(diǎn)了解了。或者你可以 docker COMMAND -h 獲取各個(gè)命令的使用。
云主機(jī)安裝 docker首先,我們需要在云主機(jī)上安裝 docker,可以參考 docker 官網(wǎng) About Docker CE, 里面有關(guān)于各個(gè)系統(tǒng)的安裝說(shuō)明,很詳細(xì)了。
編譯鏡像進(jìn)入到我們的代碼目錄,利用 docker build 命令,編譯出我們需要的鏡像文件,然后用 docker run,運(yùn)行容器
cd /opt/koa-demo docker build -t koa-demo . docker run -d -p 7000:3000 koa-demo
這里,我用本地的 7000 端口映射容器的 3000 端口。
這個(gè)時(shí)候,你可以使用一下命令,看是否正確運(yùn)行
curl -i localhost:7000 # 應(yīng)該會(huì)返回如下結(jié)果 HTTP/1.1 200 OK Content-Type: text/plain; charset=utf-8 Content-Length: 30 Date: Mon, 02 Jul 2018 12:12:26 GMT Connection: keep-alive It"s success, congratulation!
現(xiàn)在,我們的容器已經(jīng)跑起來(lái)了,你可以想試試直接在瀏覽器輸入 ip:port 這樣的形式是否可以訪問(wèn),等你輸入之后,你會(huì)發(fā)現(xiàn)是沒(méi)有反應(yīng)的。
為什么呢,不要急,我們還沒(méi)有添加 nginx 配置呢。
cd /etc/nginx/conf.d vi docker-demo.conf # 寫(xiě)入以下內(nèi)容 upstream docker-demo { server 127.0.0.1:7000; } server { listen 7000; location / { proxy_pass http://docker-demo; } }
記得用 nginx -t 來(lái)測(cè)試你的 conf 是否 ok, 然后 nginx -s reload 重新加載一下。
這個(gè)時(shí)候,你就可以用 IP:Port(這里的 Port 是上面的 listen 的端口) 的形式訪問(wèn)了。
假如,你這個(gè)時(shí)候還是沒(méi)法訪問(wèn)的話,有可能是你的安全組設(shè)置的問(wèn)題,設(shè)置一下即可。
總結(jié)以上就是一個(gè)小白的辛酸部署路,路程艱辛,但學(xué)到了不少東西,收獲很多。
討論地址歡迎一起討論,github地址 從零開(kāi)始學(xué)習(xí)部署
參考資料誰(shuí)說(shuō)前端不需要懂-Nginx 反向代理與負(fù)載均衡
Dockerizing a Node.js web app
Get Docker CE for CentOS
Docker — 從入門到實(shí)踐
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/39994.html
摘要:現(xiàn)在,我們已經(jīng)有了云服務(wù)器了,接下來(lái)就是如何把我們能在本地跑起來(lái)的代碼部署在服務(wù)器上。云服務(wù)器設(shè)置,是運(yùn)維同學(xué)經(jīng)常打交道的。討論地址歡迎一起討論,地址從零開(kāi)始學(xué)習(xí)部署參考資料誰(shuí)說(shuō)前端不需要懂反向代理與負(fù)載均衡從入門到實(shí)踐 前段時(shí)間看到了張?jiān)讫埖奈恼?一個(gè)程序員的成長(zhǎng)之路 - 剖析別人,總結(jié)自己,里面有這么一段話 棧外技術(shù),是指棧內(nèi)技術(shù)的上下游,領(lǐng)域外的相關(guān)專業(yè)知識(shí),包括但不限于服務(wù)端技...
摘要:后來(lái)網(wǎng)上看到了很多和搭建的靜態(tài)博客,由于編輯器的實(shí)用性,及,等代碼托管平臺(tái)的免費(fèi)特點(diǎn),讓很多人都轉(zhuǎn)向了和。于是我也花了兩三天的時(shí)間來(lái)研究搭建了自己的博客。 以前的博客(blog.duweibin.cn)是在學(xué)習(xí)thinkphp的時(shí)候自己做的一個(gè)小項(xiàng)目,模板也是網(wǎng)上找的,后臺(tái)是自己用thinkphp框架寫(xiě)的,上一個(gè)博客搭建過(guò)程中讓自己學(xué)會(huì)了thinkphp對(duì)MVC操作,(M層還沒(méi)具體用過(guò)...
摘要:盡量按照前端后端部署運(yùn)維來(lái)講,當(dāng)然中途涉及到跨域這種前后協(xié)調(diào)的還是無(wú)法避免捎帶一筆。關(guān)于我目前在寫(xiě)從零構(gòu)建前后分離項(xiàng)目系列,修正和補(bǔ)充以此為準(zhǔn)不斷更新的項(xiàng)目實(shí)踐地址彩蛋提前預(yù)覽下一章傳送門 序: 開(kāi)源的意義 本系列提前首發(fā)地址 背景 從事了近4年的互聯(lián)網(wǎng)行業(yè),逐漸擔(dān)當(dāng)過(guò)團(tuán)隊(duì)的前端到后端的負(fù)責(zé)人,和大家一樣從小白逐漸的成長(zhǎng)起來(lái),回首望去幾年前的博客還是那么稚嫩。 回首這幾年: 從一個(gè)ja...
摘要:列表是中數(shù)據(jù)類型其中的一種關(guān)鍵字是。列表是一種可變序列類型我們可以追加插入刪除和替換列表中的元素。 列表是python中數(shù)據(jù)類型其中的一種,關(guān)鍵字是list。列表(list)是一種可變序列類型,我們可以追加、插入、刪除和 替換列表中的元...
摘要:從前端到后端到運(yùn)維,經(jīng)歷了幾次前后端架構(gòu)的演變,踩了無(wú)數(shù)的坑,度過(guò)無(wú)數(shù)難免的夜。為了工作或?qū)W習(xí),確實(shí)造過(guò)一些輪子,前端的后端的,也開(kāi)源出來(lái)過(guò)覺(jué)得能提高生產(chǎn)力的。 showImg(https://segmentfault.com/img/bVbgeXP?w=713&h=275); 序: 開(kāi)源的意義 本系列提前首發(fā)地址 背景 從事了近4年的互聯(lián)網(wǎng)行業(yè),逐漸擔(dān)當(dāng)過(guò)團(tuán)隊(duì)的前端到后端的負(fù)責(zé)人,和...
閱讀 3076·2023-04-25 18:54
閱讀 2597·2021-11-02 14:40
閱讀 3188·2021-09-23 11:58
閱讀 2434·2019-08-30 13:50
閱讀 1242·2019-08-29 12:46
閱讀 3125·2019-08-28 17:51
閱讀 683·2019-08-26 11:47
閱讀 905·2019-08-23 16:17