一、上傳項目代碼到線上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、重載iptables
sudo 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/