10、在服務器正式部署和發布上線nodejs項目。

一、上傳項目代碼到線上git倉庫并從線上git倉庫將項目clone到服務器

github相信大家都不會陌生,大家通常可以把項目通過git提交到github來實現代碼的托管和版本的管理,但是github是一個崇尚開源的社區,在github上托管的項目基本都是公開的,如果托管的是私有的項目是要付費的。如果想要建立免費私有的項目,大家可以使用國內的gitoschina。http://git.oschina.net/。具體使用方法,大家可以進入他的官網進行學習研究。
我這里的實驗項目只是一個demo所以就直接放github上了:https://github.com/xiaoxiekeke/myblog.git,大家可以clone下來玩玩。

//如圖,我在服務器中做了以下操作,項目就已經被clone到服務器了。(服務器中應該先安裝git)
//新建node-website來存放項目代碼
mkdir node-website
//進入node-website目錄
cd node-website
//clone 項目到服務器
git clone https://github.com/xiaoxiekeke/myblog.git

這個時候我的服務器~/web-site/目錄下就有了myblog項目。


二、使用pm2將項目部署到線上

1、首先修改項目中/config/default.js目錄下的配置文件。
其中“port”為項目監聽的端口號,我們這里監聽的是8082?!癿ongodb”為連接mongo所需要配置的參數。


2、然后在項目中用pm2 start index.js開啟node進程常駐。

3、編輯iptables防火墻配置文件,并開啟相應端口號sudo vi /etc/iptables.up.rules

4、重載iptablessudo iptables-restore</etc/iptables.up.rules

5、訪問:http://47.52.28.218:8082/



此時我們的博客已經部署成功,但是只能用ip地址訪問


三、配置nginx映射并使"blog.xiaoxiekeke.com"域名可以直接訪問到http://47.52.28.218:8082/

第二節中,我們成功的把項目部署到了線上,但只能夠使用ip訪問,為了使它能夠通過域名被用戶訪問,還需要做以下操作:
1、進入nginx配置文件目錄:cd /etc/nginx/conf.d/


如圖,目前該目錄下只有一個之前在第六章中寫好的一個配置文件“xiaoke-com-8081.conf”,該配置文件是將80端口映射到8081端口,我們將其復制一份
2、復制nginx配置文件:sudo cp xiaoke-com-8081.conf blog-com-8082.conf

3、編寫配置文件為:

upstream blog {
  server 127.0.0.1:8082;
}

server {
  listen 80;
  server_name blog.xiaoxiekeke.com;
  location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-Nginx-Proxy true;
    proxy_pass http://blog;
    proxy_redirect off;
  }
}

前提:此處我們要用的blog.xiaoxiekeke.com域名已經在第8章中使用dnspod解析過了,如果沒有解析的話還需要解析一下,才能用。不了解的可參考7、8兩章。


4、編寫和保存好配置文件后重啟nginx服務:

5、此時就可以通過域名訪問項目了:




四、pm2配置自動化部署

經過以上的操作,我們已經能夠將項目成功能部署到服務器上了,然而每次部署的過程如果全部采用手動的話還是過于麻煩。我們需要登錄服務器、pull新代碼、重新安裝依賴、重啟服務……這些過程麻煩且容易出錯,因此我們考慮采用pm2的方式實現一鍵自動化的部署項目,解決項目部署過程中的痛點。
1、我們在項目的根目錄下新建一個ecosystem.json文件,并push到git倉庫:

{
  "apps" : [{
    "name"      : "myblog",
    "script"    : "index.js",
    "env": {
      "COMMON_ENV_VAR": "true"
    },
    "env_production" :{
      "NODE_ENV": "production",
    }
  }],
  "deploy" : {
    "production" : {
      "user" : "xiaoke",
      "host" : "47.52.28.218",
      "port" : "39999",
      "repo" : "https://github.com/xiaoxiekeke/myblog.git",
      "ref"  : "origin/master",
      "path" : "/www/website/myblog",
      "ssh_options": "StrictHostKeyChecking=no",
      "post-deploy" : "npm install && pm2 startOrRestart ecosystem.json --env production",
      "env"  : {
        "NODE_ENV": "production"
      }
    }
  }
}

2、若服務器用的是“非交互式”ssh登錄,則需要將服務器中~/.bashrc文件中的

#case $- in
#    *i*) ;;
#      *) return;;
#esac

注釋掉,然后source .bashrc重載

3、在服務器中新建網站目錄/www/website/myblog并賦予777權限:

4、在本地執行pm2 deploy ecosystem.json production setup把git倉庫的代碼部署到服務器。


此時服務器目錄下會出現三個文件夾:current(當前代碼),share(日志等共享文件),cource(源代碼)。

5、在本地部署遠程服務:pm2 deploy ecosystem.json production
此時服務器會執行“ecosystem.json”配置文件中的“post-deploy”,先安裝依賴然后再通過pm2啟動項目。

此時在服務器上該項目已經被啟動:


最后,附上pm2的官網,大家可以進行更深度的學習!https://keymetrics.io/

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容