一、生產環境所須要素前端
購買本身的域名 購買本身的服務器 域名備案 配置服務器應用環境 安裝配置數據庫 項目遠程部署發佈與更新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證書配置完成