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