全棧最後一千米

一、生產環境所須要素前端

    購買本身的域名   購買本身的服務器   域名備案  配置服務器應用環境  安裝配置數據庫  項目遠程部署發佈與更新node

 1、遠程登陸以及設置登陸權限人員以及經過ssh設置無密碼登陸webpack

遠程登陸服務器  ssh root@47.92.145.61nginx

指定一個欽差大臣,不要以root權限登陸,由於他很敏感,有可能刪掉或者修改掉一些敏感核心文件,前端時間gitlab工程師,深夜中誤刪掉了15g的文件致使形成了很大的故障。git

主要用到的命令是 < adduser dzq_manager(要設置的用戶名) >github

對用戶名進行升權操做 使該用戶可以以sudo的權限調用系統命令web

gpasswd -a dzq_manager sudomongodb

進一步進行操做 sudo visudo 修改相關配置規則shell

進行以下修改,按下 control + x 以後按 shift + y 以後按下enter鍵  保存成功數據庫

而後以該用戶的權限進行登陸

登陸成功!!!

經過ssh設置無密碼登陸

首先本地生成ssh_key,而後登陸到服務器生成相關的sshkey

ssh-keygen -t rsa -b 4096 -C "dongzhiqiang@qudian.com"

執行eval "$(ssh-agent -s)"

ssh-add ~/.ssh/id_rsa

跑通代理,創建鏈接

創建受權文件  vi authorize_keys

將本地電腦的id_rsa.pub文件複製粘貼到服務器上的該文件中

並對該文件進行受權操做 chmod 600 authorized_keys

而後執行sudo service ssh restart

如今登陸的時候就不須要進行密碼的輸入了

 

2、加強服務器的安全級別

 一、改變服務器登陸的默認端口號  sudo vi /etc/ssh/sshd_config

修改默認端口號是3999

 登陸的時候使用ssh -p 3999 dzq_manager@47.92.145.61

二、關掉以root權限登陸和禁止空密碼(由於能夠經過root進行掃描,致使安全風險)

這是咱們再以root帳號登陸,就會被拒絕

三、配置iptables防火牆

首先升級一下ubuntu,執行sudo apt-get update && sudo apt-get upgrade

清空一下當前的iptables防火牆規則

iptables -F 

繼續執行 sudo vi /etc/iptables.up.rules 建立服務器防火牆規則

配置完防火牆規則以後,告訴iptables配置文件的位置

sudo iptables-restore </etc/iptables.up.rules

查看防火牆是否成功啓動 

sudo ufw status

啓動iptables防火牆的命令

sudo ufw enable

設置開機自動啓動iptables,經過設置shell腳原本實現

sudo vi /etc/network/if-up.d/iptables

賦予腳本執行的權限

sudo chmod +x /etc/network/if-up.d/iptables

四、安裝fail2ban(防護性的動做庫,經過檢測系統的認證文件,對任何產生可疑行爲的目標進行ip的鎖定等等)

執行 sudo apt-get isntall fail2ban 進行fail2ban的安裝

修改fail2ban的配置文件

sudo vi /etc/fail2ban/jail.conf

進行下面兩處的修改

 查看fail2ban是否正常運行/啓動/中止

sudo service fail2ban status/stop/start

 

3、搭建Nodejs生產環境 

一、環境搭建與必要模塊安裝

執行 sudo apt-get install vim openssl build-essential libssl-dev wget curl git 安裝相關的依賴等

使用nvm進行nodejs的版本管理等,打開github.com搜索nvm,拷貝下面這行腳本代碼

安裝完成後,打開一個新的終端進行相關的操做,在新的終端界面輸入 nvm install v4.4.4

使用4.4.4版本的node並默認使用,執行 nvm use v4.4.4 

nvm alias default v4.4.4

指定淘寶源鏡像安裝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

npm --registry=https://registry.npm.taobao.org install -g cnpm

安裝經常使用的工具包模塊 npm i pm2 webpack gulp grunt-cli -g

二、使用pm2部署管理node進程的工具進行項目的管理

能夠先寫一個小的demo,例如在根目錄下建立app.js文件,同時在該文件寫上服務啓動代碼,監聽8081端口,經過瀏覽器中輸入ip以及端口號的方式,進行node服務項目的訪問,若成功,表明環境搭建成功。注意這裏iptables防火牆容許8081端口的訪問以及阿里雲服務器安全組規則的設定,不然沒法正常訪問。

能夠直接執行 pm2 start app.js 命令運行node項目

能夠經過pm2 list 命令列出當前運行的項目列表

使用pm2 show app 則是某個運行的項目更詳細的信息的展現

使用pm2 logs實現實時查看日誌的功能

4、配置Nginx實現反向代理

安裝nginx  sudo apt-get install nginx

進入conf.d目錄   cd /etc/nginx/conf.d  

新建8081端口的配置文件   sudo vi dzq-com-8081.conf

配置文件內容以下,核心思想即是經過server_name也就是經過服務器ip進來的流量,都轉到upstream的dongzhiqiang中去

返回上一層,查看nginx.config文件,能夠看到這麼一行代碼

會把咱們剛剛配置的.conf文件全都加載進來

執行 sudo nginx -t 檢測咱們寫的配置文件有沒有問題    

 

執行sudo nginx -s reload 重啓nginx服務

這個時候,咱們在瀏覽器中直接輸入ip地址不輸入端口號就能夠直接訪問服務器上的項目了

 5、利用DNSpos進行域名解析管理

首先,將當前域名的解析DNS服務器更換爲其餘的DNS服務器,由修改後的DNS服務器負責域名解析服務。

咱們選擇的是DNSpos做爲咱們域名的解析DNS服務器。

能夠經過 https://support.dnspod.cn/Kb/showarticle/tsid/40/ 看到萬網(被阿里雲收購)的修改DNS解析服務器的方式。

緊接着,打開阿里雲官網,找到咱們已經備案號的域名,點擊管理,點擊修改DNS,把相應的地址給填入。

 

 

 

而後咱們去到DNSpod的管理控制檯,進入域名解析,添加咱們須要解析的域名地址,我這裏是dongzhiqiang.cn,點擊肯定

 而後到DNSpod官網添加相應的記錄,進行域名的解析。

 6、服務器配置安裝MongoDB

 https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/

這是官方的mongodb unbutu 安裝教程,咱們須要按照步驟一步步進行

第一步,導入publickey

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6

第二步,爲mongodb建立列表文件

echo "deb [ arch=amd64 ] http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list

第三步,從新加載本地包數據庫

sudo apt-get update

第四步,安裝mongodb包,安裝最新的穩定的mongodb

sudo apt-get install -y mongodb-org

可能會遇到很慢的狀況,這時候咱們能夠修改一下源,提升下載速度

進入到相應的目錄文件 cd /etc/apt/sources.list.d 編輯相應的列表

sudo vi mongodb-org-3.4.list

這時,咱們在終端中輸入 mongo ,若出現連接失敗的狀況,則在防火牆規則中加入如下兩條規則

 mongod安全防禦

一、修改mongodb默認端口號爲2999

sudo vi /etc/mongod.cof

重啓mongodb服務,sudo service mongod restart

首先修改防火牆的安全規則,將端口號改成2999,同時使用 mongo --port 2999 進行數據庫的連接

將本地數據庫數據導入線上服務器

執行 mongodump -h 127.0.0.1:27017 -d platform -o platform-backup 命令,將本地的platform數據庫中的數據表備份一份

將該文件進行壓縮打包 tar zcvf platform.tar.gz platform-backup

 

經過scp命令,將本地的壓縮包上傳到服務器 

scp -P 3999 ~/workplace/project-deploy/platform.tar.gz dzq_manager@47.92.145.61:/home/dzq_manager/dbbackup/

進入到服務器,對上傳到服務器上的tar包進行解壓操做

tar xvf platform.tar.gz

講解壓後的數據文件,導入到數據庫的文件夾中

 mongorestore --host 127.0.0.1: 2999 -d platform ./dbbackup/platform-backup/platform/

 刪除線上服務器的相關數據

mongo --host 127.0.0.1:2999 platform --eval "db.dropDatabaes()"

 爲數據庫配置相應的管理員和用戶權限(核心文件,必須具備必定的安全性)

一、mongodb沒有默認的管理員帳號,因此要先添加管理員帳號,而後開啓權限的認證。

二、只有切換到admin以後,添加的帳號纔算是管理員帳號,用戶只能在用戶所在的數據庫登陸,包括管理員帳號。 

三、管理員能夠管理全部的數據庫,可是不能直接管理數據庫,首先要到admin裏認證才能夠。

 

首先,對整個mongodb數據庫設置超級管理員權限

進入mongo環境, 執行 mongo --port 2999

執行以下命令管理員角色(能夠間接的管理全部的數據庫)

db.createUser({user: 'dzq_manager_cases_owner', pwd: '1994827dzqygF', roles: [{role: 'userAdminAnyDatabase', db:'admin'}]})

在admin數據庫下面對用戶登陸進行受權,要相對數據庫建立角色,就要在這兒進行受權操做。

db.auth('dzq_manager_cases_owner', '1994827dzqygF')

進入platform數據庫,建立具備讀寫權限的角色

use platform 

db.createUser({user: 'platform_runner', pwd: '1994827dzqygF', roles: [{role: 'readWrite', db:'platform'}]})

建立備份角色

db.createUser({user: 'platform_wheel', pwd: '1994827dzqygF', roles: [{role: 'read', db:'platform'}]})

blog數據庫進行相同的操做步驟。

開啓數據庫的驗證模式:

編輯數據庫的配置文件  sudo vi /etc/mognod.conf

重啓mongodb服務  sudo service mongod restart

這時,進入mongo環境,執行show dbs,將會由於權限的問題沒法訪問

這時,咱們須要進行相關的權限驗證 db.auth('dzq_manager_cases_owner', '1994827dzqygF')

再次執行show dbs 

若是想直接登陸某個數據庫 執行 mongo 127.0.0.1:2999/platform -u platform_runner -p 1994827dzqygF 這樣就進入了某個數據庫,而後就能夠針對於每一個數據庫進行操做。

 

 7、部署線上nodejs項目

nodejs自己經過pm2來進行維護

首先,經過git把本地的項目代碼上傳到私有倉庫,到項目目錄下:

 git init  > git add . > git commit -m 'first commit'  > git remote add origin git@git.oschina.net:qqqiang123/platform.git > git push -u origin master

會出現讓咱們從遠程更新代碼的提示,執行 git pull ,如出現以下相似錯誤,則執行git pull origin master --allow-unrelated-histories後再執行git push -u origin master,代碼上傳成功~

 登陸到服務器,把生成的公鑰複製到第三方的代碼倉庫,把代碼克隆到服務器上。

部署

用 pm2 來把指令發送到服務器端,讓服務可以跑起來(傻瓜式的管理代碼更新和服務運行,可以自動更新代碼和重啓服務等)

pm2不只能夠守護nodejs服務來實現平滑重啓,實現代碼自動更新,從本地到線上的部署。

http://pm2.keymetrics.io/ pm2的相關文檔

在項目中增長配置文件 process.json

 在服務器新建相關文件夾  sudo mkdir /workplace > cd workplace > sudo mkdir website 

執行相關pm2命令:pm2 deploy process.json production setup

這時,線上服務器便有了咱們部署後的文件夾

其中,current就是咱們跑在線上的代碼,soruce即是咱們從第三方倉庫克隆下來的源碼,shared即是生成的日誌文件等等

之後,咱們每一次部署,執行pm2 deploy process.json production即可,服務器會自動拉取倉庫中的代碼並自動執行pm2的平滑重啓。

 

8、使用和配置更安全的HTTPS協議

 以platform.dongzhiqiang.cn爲例進行講解

咱們能夠到騰訊雲上申請一個免費的ssl證書

下一步,手動dns驗證

 

進入到DNSpos,根據生成的主機記錄,記錄類型和記錄值添加相應的記錄

 

最後,下載證書,經過scp命令上傳到服務器

進行nginx配置文件的修改

 

至此,ssl證書配置完成

相關文章
相關標籤/搜索