(小白指南)在 Linux 服務器上安裝 Nodejs、Nginx 以及部署 Web 應用

前段時間要把項目部署到服務器,期間踩了很多的坑。故寫下這篇文章,從零開始把本身部署的過程都記錄下來,但願能給其餘像我同樣的小白一點幫助。若是有疏漏的地方,請各位客官指出,我會盡快作好修改,謝謝!?html

做者使用的服務器系統是 CentOS 7,運行指令可能和其餘系統有所差異,在這裏再也不贅述,還請客官明察秋毫,善用百度(´・ᴗ・`)前端

安裝 Nodejs

安裝 Nodejs 有兩種方法,分別是下載源碼編譯和下載軟件包,在 Nodejs 官網的下載頁面(https://nodejs.org/en/download/)能能夠看到兩個不一樣的包,查看連接地址就能獲取到對應版本的下載連接。vue

Nodejs 官網的下載頁面

在寫這篇文章時,Nodejs 的最新穩定版本是 v8.9.1,因此如下步驟將以這個版本爲例進行安裝。node

一、編譯安裝

首先下載源碼到本地:
wget -c https://nodejs.org/dist/v8.9.1/node-v8.9.1.tar.gz
下載完畢,提取 tar 文件:
tar -zxvf node-v8.9.1.tar.gz
進入文件夾:
cd node-v8.9.1
在編譯代碼以前,還須要在機器上安裝一些軟件包,使得編譯能夠正常運行:
sudo yum install gcc gcc-c++
對源代碼進行配置:
./configure
進行編譯:
make
安裝:
sudo make installlinux

安裝完成後,能夠輸入命令 node -v 來檢查 Nodejs 是否安裝成功:webpack

$ node -v
v8.9.1         # 若是出現了對應的版本號信息,說明安裝成功

然而 Nodejs 在編譯的時候每每須要花費較多的時間,在配置較低的服務器上編譯則須要更久。因此對於配置較低的服務器,我更推薦下面的方法,利用已編譯的二進制文件安裝 Nodejs 。nginx

二、直接安裝編譯好的 Nodejs(推薦)

這種方法相比第一種節省了編譯安裝的時間,因此安裝起來更快。
第一步仍然須要下載對應的二進制文件:
wget -c https://nodejs.org/dist/v8.9.1/node-v8.9.1-linux-x64.tar.xz
提取文件:
tar -xvf node-v8.9.1-linux-x64.tar.xz
解壓以後獲得的文件夾就是已經安裝好的 Nodejs 了,爲了方便咱們能夠把它重命名一下(在這裏我把它放到了
用戶根目錄下面的 app 的文件夾裏,你也能夠換成其餘路徑):
mv node-v8.9.1-linux-x64 ~/app/nodejsc++

然而,這種方式安裝的 Nodejs 並不完美。首先,Nodejs 的命令 nodenpm 並不能在全局使用。爲了解決這個問題,咱們須要創建兩個軟連接:
sudo ln -s ~/app/nodejs/bin/node /usr/local/bin/node
sudo ln -s ~/app/nodejs/bin/npm /usr/local/bin/npm
其中,~/app/nodejs 是咱們剛纔安裝的 Nodejs 的路徑,在創建軟連接的時候要注意區別。
如今,nodenpm 能夠在全局使用了,一樣輸入命令 node -v 來檢查 Nodejs 是否安裝成功:web

$ node -v
v8.9.1         # 出現了對應的版本號信息,說明安裝成功

還有一個問題,在 npm 下全局安裝的模塊沒法直接在 bash 中執行。例如,咱們要在 npm 中安裝 yarn:vue-cli

$ npm install -g yarn
$ yarn
bash: yarn: command not found...

爲了解決這個問題,咱們須要在 Linux 上手動配置環境變量。編輯 /etc/profile 文件:
sudo vi /etc/profile
在文件的底部,添加下面兩行代碼:
export NODE_HOME=~/app/nodejs/bin
export PATH=$NODE_HOME:$PATH
跟剛纔同樣,~/app/nodejs 是咱們安裝的 Nodejs 的路徑。

如今,npm 全局安裝的模塊也可使用了:

$ yarn
yarn install v1.3.2
info No lockfile found.
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
[4/4] Building fresh packages...
info Lockfile not saved, no dependencies.
Done in 0.09s.

至此,Nodejs 的安裝已經順利完成,咱們能夠在服務器上對 Nodejs 隨心所欲了!
隨心所欲.jpg

三、經過 yum 進行安裝

咱們也能夠經過系統的 yum 來直接安裝 Nodejs。這種方式安裝時須要先確保能訪問到官方庫:
sudo yum install epel-release
而後咱們就能夠安裝 Nodejs 了:
sudo yum install nodejs

然而這種方法並不能確保安裝的 Nodejs 爲最新版本。在最新穩定版本爲 v8.9.1 的狀況下,我用這種方法安裝的 Nodejs 的版本是 v6.12.0 ,升級過程也屢遭波折,因此這種方法也不推薦採用。

Nginx 的安裝與配置

安裝 Nginx

CentOS 上安裝 Nginx 比較簡單,步驟跟 Nodejs 的編譯安裝很是相似,網上也有不少安裝 Nginx 的帖子。我參考的是 CentOS 7 下安裝 Nginx 這篇帖子,安裝過程也很是順利,沒有出現任何問題,故在這裏再也不贅述。

配置 Nginx

安裝完成並啓動 Nginx 後,咱們在本地的瀏覽器訪問服務器,卻發現沒法鏈接:

本地瀏覽器沒法訪問服務器

然而,咱們在終端運行命令 curl http://127.0.0.1,卻能看到 HTML 代碼:

服務器成功訪問本地的 Nginx 頁面

說明 Nginx 啓動正常,而且本地是能成功訪問的!
這個問題困擾了我一段時間。後來百度的時候才發現,原來是被 CentOS 的防火牆攔截了(CentOS 7 的防火牆改成 firewall ,而 7 如下是 iptables,具體修改的命令請參考 Centos 7 開放查看端口 防火牆關閉打開 這篇文章)。因而修改服務器的防火牆,讓它通行 80 端口:
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
這條命令的幾個含義:

–zone             # 做用域
–add-port=80/tcp  # 添加端口,格式爲:端口/通信協議
–permanent        # 永久生效,沒有此參數重啓後失效

設置完還須要重啓一下防火牆:
sudo firewall-cmd --reload

咱們再用瀏覽器訪問一下服務器,如今發現能成功訪問了:

瀏覽器成功訪問服務器的 Nginx

哈哈!漸入佳境了!

憨厚的笑

部署 Web 應用

如今的前端項目基本是圍繞 Webpack 搭建的,而通過 Webpack 打包後會產生一系列 HTML 靜態文件。咱們的目的是要將 Webpack 打包後的文件放到 Nginx 上,讓用戶可以訪問咱們的項目。在這裏,咱們以 vue-cli 腳手架生成的項目爲例子來進行講解。
首先,生成一個打包後的項目文件:

$ npm install -g vue-cli    # 安裝 vue-cli 腳手架
$ vue init webpack my-vue   # 初始化項目 my-vue
$ cd my-vue && npm install  # 安裝項目所需模塊
$ npm run build             # 對項目文件進行 Webpack 打包

這樣一來,my-vue 裏面的 dist 文件夾就是咱們打包後的項目文件了。
爲了方便,咱們在根目錄新建一個 nginx 文件夾,並把 my-vue 裏面的 dist 文件夾放到 nginx 文件夾裏,再重命名爲 vue 文件夾:

$ mkdir ~/nginx
$ mv ~/my-vue/dist ~/nginx/vue

而後咱們須要對 Nginx 作一些配置,運行 sudo /usr/local/nginx/sbin/nginx -t 來肯定 nginx 的配置文件:

$ sudo /usr/local/nginx/sbin/nginx -t
# 下面這行代碼說明 nginx 的配置文件是 /usr/local/nginx/conf/nginx.conf
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

運行命令 sudo vim /usr/local/nginx/conf/nginx.conf,對配置文件添加下面代碼:

http {
    ...                                           // 其餘配置代碼
    server {
        listen          8080;                     // 監聽的端口
        server_name     localhost;
        root            /home/shoufu/nginx/vue;   // 項目文件的根目錄

        location / {
            index       index.html index.htm;
        }
    }
}

其中,/home/shoufu 是我在服務器的用戶根目錄(~
修改完畢,保存退出。運行如下命令來重啓 Nginx,讓配置生效:
sudo /usr/local/nginx/sbin/nginx -s reload
別忘了讓防火牆開放 8080 端口,容許用戶訪問:
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reload
這時咱們打開瀏覽器訪問服務器的 8080 端口,卻意外地獲得了 403 Forbidden 的錯誤:

瀏覽器遇到403

趕忙到服務器下執行命令 $ curl http://127.0.0.1:8080,發現也是 403 :

服務器下的403

恍然大悟!原來是 Nginx 還沒設置好!
那到底是什麼問題?轉戰百度,才發現是 Nginx 的權限不足。爲了保證文件能正確執行,Nginx 既須要文件的讀權限,又須要文件全部父目錄的可執行權限。所以運行如下命令,把 vue 文件夾及全部父文件夾都加上讀寫權限:

$ sudo chmod 755 ~
$ sudo chmod 755 ~/nginx
$ sudo chmod 755 ~/nginx/vue

此時咱們再打開瀏覽器訪問服務器的 8080 端口:

成功訪問

大吉大利!!

炫酷

至此,前端項目的部署已經基本完成!終於能夠暫時拋去配置的煩惱,開開心心的回去修 Bug 了!

達成共識

總結

如客官所見,這是一篇很是入門的關於 Nginx 的配置文章,沒有任何技術難點。文章有意將瀏覽器不能訪問服務器的兩個問題寫出來,是由於做者在排查問題的時候,發如今服務器直接訪問 Nginx 的頁面,能很好地檢查、排除問題;在百度尋找問題答案的時候,發現這種作法也獲得了很多人的確定。所以我把它記錄下來,但願能給後來搭建 Nginx 服務器的新人一些啓發。因爲篇幅所限,本文沒有對 Nginx 的特性作深刻講解,還請有須要的客官查閱百度;若是時間容許,我也會盡可能作好 Nginx 文章的更新。若您讀完後發現沒有任何收穫,那極可能說明您已經不在小白的行列了:D(若您讀完後能收穫幾張表情包那也是極好的)

最後,若是您讀完後以爲這篇文章對您有所收穫,歡迎點個贊或者點個收藏,這會鼓勵我寫出更多更好的文章出來的!:D

參考資料

相關文章
相關標籤/搜索