1. 程式人生 > >nodejs+nginx+mongoDB部署專案學習筆記

nodejs+nginx+mongoDB部署專案學習筆記

4、修改伺服器預設埠增強安全防護

>sudo vi /etc/ssh/sshd_config   #將port 22改為10000-65536之間,確認useDNS 是no,最末增加一行 AllowUsers imooc_manager
>sudo service sshd restart #重啟ssh服務

5、關閉root密碼登入增強安全防護

>sudo vi /etc/ssh/sshd_config #將permitRootLogin改為no,PasswordAuthentication改為no,PermitEmptyPasswords改為no
>sudo service sshd restart #重啟ssh服務

6、配置 iptables(防火牆) 和 Fail2Ban 增強安全防護
清空iptables規則

>sudo iptables -F

配置留白

7、搭建伺服器Nodejs環境
(1)更新伺服器環境

>sudo yum update        #安裝系統補丁
>sudo yum install vim openssl build-essential libssl-dev wget curl git#裝伺服器必備的一些東西,無論專案是否需要可以一起安裝掉

遇到問題:
這裡寫圖片描述
解決辦法:暫不考慮解決,可直接往下走

(2)安裝nvm(nodejs版本管理工具)

>wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.6/install.sh | bash

(3)安裝nodejs
新開一個終端連上伺服器

>nvm install v6.9.5
#指定nodejs版本
>nvm use v6.9.5
>nvm alias default v6.9.5
#檢查nodejs版本
>node -v
#將npm下載源指定為淘寶映象(防止下的東西被牆)
>npm --registry=https://registry.npm.taobao.org install -g npm
#系統檔案數限制放大一些,一般不用設定,可以先設定避免後面有問題 >echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p #安裝cnpm >npm --registry=https://registry.npm.taobao.org install -g cnpm #將koa模組強制同步到國內映象,koa是nodejs框架 >cnpm sync koa #常用全域性工具包的安裝,未必用的上,先裝 >npm i pm2 webpack gulp grunt-cli -g

(試執行)在當前使用者目錄下(連上終端的預設目錄)新建app.js,輸入以下內容

const http=require('http')
http.createServer(function(req,res){
  res.writeHead(200,{'Content-Type':'text/plain;charset=utf-8'})
  res.end('來自慕課的力量')
}).listen(8081)
console.log('server running on http://139.224.119.134:8081/')

儲存後去阿里雲安全組中新增8081埠策略,參考步驟4。完成後執行命令

>node app.js
#開啟http://139.224.119.134:8081,已有內容輸出

(4)用pm2讓node服務常駐

>npm install pm2 -g
>pm2 start app.js

8、配置Nginx反向代理Nodejs埠
(1)確認停止apache服務,以及刪除apache(因為 Apache 可能會佔用 80 埠,這樣的話,會導致 Nginx 啟動失敗,並不是一定要刪,也可以停掉服務的。另外,如果 SSL 證書想要在本機手動生成的話,可能需要暴露服務給外面,這時候 Apache 預設的服務(如果不小心啟動)會導致生成失敗)

>sudo service apache2 stop 
>sudo yum remove apache2

(2)安裝配置nginx

>sudo yum install nginx   #此步驟前把/etc/resolv.conf中 nameserver 8.8.8.8 nameserver 8.8.4.4改回nameserver 100.100.2.136 nameserver 100.100.2.138了
>cd /etc/nginx/conf.d
>sudo vi minixu-site-8081.conf

寫入:

upstream imooc{
  server 127.0.0.1:8081;
}

server {
  listen 80;
  server_name 139.224.119.134;

  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://imooc;
    proxy_redirect off;

  }
}
>cd /etc/nginx
>sudo nginx -t

發生報錯:
nginx: [emerg] socket() [::]:80 failed (97: Address family not supported by protocol
解決辦法:

>cd /etc/nginx/conf.d
>sudo chmod a+w default.conf
>sudo vi default.conf
把listen       [::]:80 default_server;註釋掉
>cd /etc/nginx
>sudo nginx -t
>sudo nginx -s reload    #重啟nginx服務

發生報錯:
nginx: [error] invalid PID number “” in “/run/nginx.pid”
解決辦法:

>sudo nginx -c /etc/nginx/nginx.conf
>sudo nginx -s reload

隱藏請求頭資訊中nginx的版本號

>sudo vi /etc/nginx/nginx.conf
在http{}中加上一句 server_tokens off;

9、域名解析
(1)購買域名、域名備案
(2)去阿里雲域名控制檯新增A記錄
(3)去阿里雲物件儲存控制檯進行域名管理,會自動增加CNAME記錄

10、安裝mongodb
匯入匯出備份資料等操作命令–留白

11、向伺服器正式部署和釋出上線Nodejs專案
(1)上傳專案程式碼到線上私有 Git 倉庫,這裡用碼雲
註冊碼雲、建立專案倉庫、具體git命令看git使用筆記
將原生代碼提交到碼雲後,試一下在伺服器上將專案clone下來,沒有問題就ok
(2)在server專案根目錄下,建立一個pm2配置檔案ecosystem.json

{
  "apps": [
    {
      "name": "Website",
      "script": "app.js",                   //專案入口檔名
      "env": {
        "COMMON_VARIABLE": "true"
      },
      "env_production": {
        "NODE_ENV": "production"
      }
    }
  ],
  "deploy": {
    "production": {                     //伺服器主機名
      "user": "imooc_manager",          //伺服器使用者名稱
      "host": ["139.224.119.134"],          //伺服器IP
      "port": "39999",                  //伺服器埠號
      "ref": "origin/master",               //倉庫分支
      "repo": "[email protected]:minixu/backend-website.git",       //倉庫地址
      "path": "/www/website/production",    //生產環境部署目錄
      "ssh_options": "StrictHostKeyChecking=no",
      "env": {
        "NODE_ENV": "production"
      }
    }
  }
}
#配置完後去伺服器的根目錄下執行命令
>sudo mkdir www
#進入www目錄
>sudo mkdir website
#然後賦予該目錄寫許可權
>sudo chmod -R 777 website/
#然後在本地server目錄下執行pm2啟動命令
#初始化
>pm2 deploy ecosystem.json production setup
#部署,先確認ecosystem.json已經提交到遠端倉庫
>pm2 deploy ecosystem.json production
#檢查
>pm2 list

(3)修改nginx配置,配置檔案都存在下面這個目錄

>cd /etc/nginx/conf.d/

編輯內容如下:

upstream website{
  server 127.0.0.1:3000;#埠號和app.js啟動的埠一致
}
server {
  listen 80;
  server_name 139.224.119.134;  #有域名了可以改成域名

  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://website;              #//後面的值和upstream後面定義的一致
    proxy_redirect off;
  }
}

(4)由於沒配置iptables這裡不用開埠了,安全部分留白
(5)修改程式碼線上同步流程:
本地修改程式碼並且push到遠端倉庫,在本地執行以下命令通知伺服器更新

>pm2 deploy ecosystem.json production