精簡版nodejs線上項目部署

image.png

本文不講解各種技術的詳細使用,只把整個node初步部署的過程寫出來,最終目的是能確保nodejs成功在云主機跑起來,并能通過自己的IP地址或域名訪問得到。長話短說,首先來看看需要做的整個流程:

  • 購買服務器
  • 購買域名
  • DNSPod域名解析
  • 本地連接主機服務器
  • 安裝nodejs運行環境
  • 安裝pm2進程管理工具
  • Nginx反向代理與負載均衡配置

上面幾個過程,在一些有部署經驗的人看來很簡單,但對于一個初出茅廬的新手來說,碰到的坑還是不少的,雖然可以百度可以谷歌,但網上資源多如繁星,要想快速正確篩選到正確答案,需要付出不少的精力和時間,更糟糕的情況是有些過于陳舊的答案,一旦放到項目使用,因為版本不相同,導致整個項目運行錯亂,這時候需要從更加深入的環節才能解決處理,這對一名剛涉及部署上線的人來說是非常辛苦的。下面重回正題,就上面的各個環節更加詳細地談談。

購買服務器

服務器商有很多選擇,目前國內最多人使用的是阿里云,我買的是騰訊云。其實服務器都是差不多的,根據性價比買即可。個人購買出了系統選擇其他一般按默認選擇即可。系統選擇linux的CentOS系統,Ubuntu也是linux系統,但CentOS更新,在安裝軟件時候比Ubuntu更加便捷。

image.png

選好配置后購買付款即可。

購買域名

騰訊是新網,阿里是萬網,根據性價比買即可。

DNSPod域名解析

購買了服務器和域名之后,需要把服務器IP地址綁定到域名方可根據域名運行項目,否則只能通過IP地址來訪問。

域名解析有兩種方式,一是在當前的購買域名的平臺解析,二是使用其他服務商解析,例如我選擇的DNSPod。

1.購買域名的平臺解析

在個人域名控制臺打開,點擊解析選項。

image.png

進入解析版面后點擊添加選項,可以下面的彈出框,只需要把記錄類型選為A,主機記錄填www,記錄值填自己IP地址,其他的默認即可。

image.png

2.DNSPod平臺解析

打開DNSPod官網,注冊登陸。

  • 進入域名解析控制臺
image.png
  • 點擊域名選項進入主機記錄界面
image.png
  • 點擊添加記錄,同樣只需要把記錄類型選為A,主機記錄填www,記錄值填自己IP地址,其他的默認即可。
image.png

注意:

自己當前的www.XXX.com是一級域名,可以用這個域名解析多個子域名,也就是二級域名——www.xxx.XXX.com。二級域名是免費無需再購買的。解析方法只需把主機記錄值改成二級域名名即可,如下:

image.png

本地登陸主機服務器

Mac使用iTerm登陸,

  • 打開iTerm登陸輸入:

ssh -t root@公網ip地址 -p 22

  • 然后在提示會讓輸入密碼,輸入登陸即可。

也可以設置無需輸入密碼登陸

  • 打開finder,按command + shift + g 鍵搜~/.ssh文件
  • 編輯下面內容至文件whatevername,保存在.ssh目錄
set user <用戶名>
set host <ip地址>
set password <密碼>
set timeout -1

spawn ssh $user@$host
expect "*assword:*"
send "$password\r"
interact
expect eof
  • 打開iTerm2的profiles設置,編輯profiles
  • 在Genernal->Command下選擇 Command,在輸入框里填入 expect ~/.ssh/whatevername即可完成,以后每次登陸都用whatevername文件自動填寫了信息。


    image.png

在window系統下登陸

使用putty登陸:

  • 打開Putty客戶端輸入
  • Host Name:云服務器的公網IP
  • Port:云服務器的端口,必須填22
  • Connect type:選擇“SSH”

全部輸入完后,點擊“Open”,創建一個新對話。

image.png

在Putty會話窗口中,主機帳號密碼登錄。


image.png

安裝nodejs運行環境

yum -y install nodejs

查看版本

node -v

可使用下面命令快速升級到最新版:

  • 首先安裝n模塊

npm install -g n

  • 升級命令

n stable

這時nodejs已經升到最新版了。

為了測試node.js的運行,先新建個文件跑一跑:

  • 隨便找位置建個空目錄:

mkdir -p /data/node

  • 打開目錄,并新建并且編輯app.js文件

cd /data/node

vim app.js

  • 將以下測試代碼放入:
const http =require('http')
http.createServer(function(req,res){
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('hello world')
}).listen(8081)
console.log('Server running at http://119.29.72.246:8081/');
  • 保存成功后運行:

node app.js

這時成功運行就可以看到打印信息了:

Server running at http://119.29.72.246:8081/

這時根據自己IP地址加端口訪問在瀏覽器訪問即可。

注意:

這時候如果能訪問到'hello world'說明沒問題了,如果長久頁面跳轉不成功,說明端口出了問題,這是服務器的安全組設置所導致的。

  • 打開服務器控制臺,打開安全組選項:
image.png
  • 打開編輯規則:
image.png
  • 進入添加規則界面可以看到各條規則,我們要訪問哪個端口,必須添加相應的入站規則。(出站規則是本站訪問外網時設置的)
image.png
  • 添加規則,來源保持和原來一致,tcp對應的就是要訪問的端口號,完成保存。
image.png

現在再回到終端運行nodo app.js就可以訪問到8081端口了!

安全組作用和防火墻相似,都是IPTables規則來做包過濾,相當于給主機添加多一重保護,設置了安全組后可以給主機添加多一層防火墻作雙重防護。

安裝pm2進程管理工具

基于node命令運行的項目都是一次性,斷開主機連接后就不運行了,這時候需要安裝用到進程管理工具。相關的工具有pm2,forever,我推薦pm2,更新更強大!

  • 安裝pm2:

npm install -g pm2

  • 使用pm2:

pm2 start app.js

  • 運行pm2 list可以監控進程列表:

pm2 list

pm2的其他命令使用可以參考:
https://www.douban.com/note/314200231/

如果pm2運行剛剛app.js端口有沖突,需要更改端口重新運行或者關掉進程重新運行。Linux查找端口進程和關掉進程的命令:

netstat -apn | grep 端口號

kill -9 進程的pid號

Nginx配置使用

  • 安裝Nginx之前需要先安裝一些依賴和lib庫:

yum install gcc-c++

yum -y install zlib zlib-devel openssl openssl--devel pcre pcre-devel

  • 直接安裝Nginx:

yum install nginx -y

  • 查到版本號即安裝成功:

nginx -v

Nginx配置

剛剛pm2運行的app.js示例是在端口8081下運行的,Nginx的反向代理設置可以把端口號去掉或搭配個人域名使用。

反向代理設置

反向代理需要通過修改Nginx的配置文件來完成,Nginx的默認的配置文件是目錄etc/nginx下的nginx.conf文件。

  • 進入etc/nginx文件夾

cd /etc/nginx

image.png
  • 用編輯方式打開nginx.conf配置文件

vim nginx.conf

  • 下拉可以看到核心選賢server:
image.png
  • 這個server是Nginx的默認配置,我們需要把默認配置的listen改掉,保留其中一個監聽80端口;然后多加一個server選項:
image.png
  • 在添加server的里寫上配置:
server {
  listen 80;
  server_name 119.29.72.246;
  location / {
        proxy_pass http://119.29.72.246:8081;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    
    proxy_set_header Host $http_host; 
    proxy_set_header X-Nginx-Proxy true;
    proxy_redirect off;
  }
}

上面配置中,最重要是server_nameproxy_pass選項,proxy_pass對應的是項目運行原本帶有端口的iP 地址,server_name是映射proxy_pass地址的新的地址。至此,Nginx初步配置完成。

  • 重啟一下Nginx就可以通過server_name的地址就可以訪問到項目原來帶有端口的地址了。

nginx -s reload

http://119.29.72.246 => http://119.29.72.246:8081;

域名解析成功后,server_name選項可以用域名代替:

server_name xxx.com; //不用帶www

現在可以通過域名訪問到原來的端口號了:

http://www.xxx.com => http://119.29.72.246:8081;

最后的nginx.conf:

image.png

到現在Nginx的反向代理已經完成,不過如果想更完善些,還能再調整一下。

nginx.conf文件下有一句代碼:

include /etc/nginx/conf.d/*.conf

這句代碼會把conf.d目錄下所以的conf文件引入,所以我們其實可以把剛新建的server選項單獨寫在這些conf文件里,這種方式對管理復雜項目更加便捷。

  • 打開conf.d目錄,新建編輯test.conf

cd conf.d
vim test.conf

  • 把剛剛的nginx.conf里新建的server選項剪貼到該目錄下。

負載均衡

所謂負載均衡,就是通過配置多臺服務來對單一路徑進行訪問服務,當有某臺主機發生宕機時候,其他主機能承擔相應任務,繼續提供完整服務。

用剛剛在test.conf做下這個設置,test.conf原文件:

server {
  listen 80;
  server_name 119.29.72.246;
  location / {
        proxy_pass http://119.29.72.246:8081;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    
    proxy_set_header Host $http_host; 
    proxy_set_header X-Nginx-Proxy true;
    proxy_redirect off;
  }
}

改寫后的最終文件:

upstream roots {
  server 119.29.72.246:8081;
}

server {
  listen 80;
  server_name 119.29.72.246;
  location / {
        proxy_pass http://roots;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    
    proxy_set_header Host $http_host; 
    proxy_set_header X-Nginx-Proxy true;
    proxy_redirect off;
  }
}

可以看到這個變動只是把server的proxy_pass對應的提取出來,然后在upstream里單獨設置。當想設置負載均衡時,只需在upstream里繼續添加主機Ip,如:

upstream roots {
  server 119.29.72.246:8081;
  server 119.221.72.246:3000;
  server 119.221.12.246:3000;
  ...
}

這樣就可以設置多臺主機為119.29.72.246這個訪問提供服務了。

更多干貨請訪問https://github.com/osjj/。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,460評論 6 538
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,067評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 177,467評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,468評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,184評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,582評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,616評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,794評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,343評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,096評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,291評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,863評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,513評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,941評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,190評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,026評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,253評論 2 375

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,807評論 18 139
  • 第一章 Nginx簡介 Nginx是什么 沒有聽過Nginx?那么一定聽過它的“同行”Apache吧!Ngi...
    JokerW閱讀 32,740評論 24 1,002
  • 上一篇《WEB請求處理一:瀏覽器請求發起處理》,我們講述了瀏覽器端請求發起過程,通過DNS域名解析服務器IP,并建...
    七寸知架構閱讀 81,118評論 21 356
  • 配置運行Nginx服務器用戶(組) 用于配置運行Nginx服務器用戶(組)的指令是user,其語法格式為: use...
    吃瓜的東閱讀 4,526評論 0 41
  • 1、第八章 Samba服務器2、第八章 NFS服務器3、第十章 Linux下DNS服務器配站點,域名解析概念命令:...
    哈熝少主閱讀 3,760評論 0 10