NodeJS+Express+MySQL開發小記(2):服務器部署


http://borninsummer.com/2015/06/17/notes-on-developing-nodejs-webapp/

NodeJS+Express+MySQL開發小記(1)里講過在本地搭建 NodeJS 網站的若干細節。本人最近在阿里雲服務器上面按最低配租了4個月的雲服務器,所以想試着把這個項目部署到雲上。雲服務器操作系統是Ubuntu 14.04 LTS。之前一直在Windows下做開發,對於Linux下的環境搭建、配置還不是很熟悉,搭建的過程中學到很多東西。

本文簡單記錄對服務器進行部署的一些細節方面與解決方案。

安裝MySQL Server

直接通過apt-get就可以:

1
sudo apt-get install mysql-server

安裝過程會提示 After this operation, 96.4 MB of additional disk space will be used.。MySQL的版本為Server version: 5.5.43-0ubuntu0.14.04.1 (Ubuntu)

安裝完成后,運行

1
mysql -u root -p

輸入密碼,即可進入MySQL的終端了。

用Git進行版本控制

出於跟風,以及提高技術的目的,毫不猶豫地選擇了Git而不是SVN來進行代碼版本控制。最初是使用Github來作為遠程服務器,用了大概兩個月,感覺對於開發這種業務性太強的項目(尤其要在代碼里使用數據庫的),使用開源的Github倉庫來托管並不讓人放心。

后來發現了國內的業界良心 Git@OSC ,其宣布永久開放git公有庫和私有庫。相關新聞:

此貨的功能與Github並無太大區別,考慮到私有倉庫的免費,便果斷遷移了過來。

用Git部署代碼

最開始是從Github上獲取代碼的:

1
2
3
4
cd /var
mkdir www
cd www
git clone https://github.com/zilong-thu/d.git debate

以后如果代碼發生變動,可以這樣更新代碼:

1
2
cd debate
git pull origin master

后來遠程代碼倉庫遷移到git@osc,那么可以添加這個新的remote,命名為osc,然后以后就只從osc進行代碼獲取了。以后提交代碼,也就只往git@osc提交,就一切OK了。

1
2
3
git remote add osc https://git.oschina.net/zilong-thu/d.git
 
git pull osc master

如果要刪除Github那個remote,可以這樣:

1
git remote rm origin

使用SSH而非HTTPS

先生成一個SSH公鑰,方法:

注意,如果是 Windows &/8 + Git Bash 環境,那么在將你的key添加到 ssh-agent 中時應該使用這個命令(參考 Stack Overflow : Could not open a connection to your authentication agent):

1
eval $(ssh-agent -s)

在用於開發的電腦上,修改本地代碼庫的remote url

1
git remote set-url origin git@github.com:USERNAME/OTHERREPOSITORY.git

參考

以及一個中文的 Pro Git:

運行服務

安裝依賴

debate目錄下,安裝node模塊,執行

1
npm install

安裝好所有依賴后,如下啟動服務器:

1
npm start

使用阿里雲給的IP加上端口號,即可訪問到開啟了的網站。

使NodeJS服務在后台運行

目前是使用putty使用ssh遠程登錄來操作服務器的,如果關閉這個putty,即會話終止,則服務也隨即停止。解決思路自然是讓程序在后台不間斷地運行。解決方案可以參考:

因此,在/var/www/debate目錄下新建一個shell腳本start.sh,內容為:

1
2
# Debate server start shell script
nohup npm start &

&是為了讓程序能夠在后台運行。這時候ctrl+c,或者關閉putty會話,就都不會殺死這個服務進程了。

用supervisor自動重啟服務

NodeJS代碼發生變化時,一般是必須重啟Node程序才可以生效的。每次手動重啟的話太麻煩,可以使用專為NodeJS打造的node-supervisor模塊來實現代碼變動時自動重啟,以及服務崩潰時自動重啟的功能。

其官網的描述是這樣的:

Node Supervisor is used to restart programs when they crash.
It can also be used to restart programs when a *.js file changes.

務必要全局安裝:

1
npm install -g supervisor

對於express 4.*版本,啟動服務時是這樣的:

1
npm start

它其實上會到package.json里面尋找這個:

1
2
3
"scripts": {
"start": "node ./bin/www"
}

因此執行的實際上是node ./bin/www。那么使用supervisor來代替npm start的話就應該是supervisor ./bin/www。因此,在shell腳本里可以這樣寫:

1
nohup supervisor ./bin/www &

如此一來,當更新代碼時,就不必手動去重啟NodeJS服務了。

停止服務

使用kill

先列出所有進程,找到Node服務的進程ID,將其殺死,即可停止服務了。

1
2
3
4
5
6
ps aux
 
root 11200 1.1 4.0 898452 20436 ? Sl Jun19 75:13 node /usr/local
root 11387 0.0 15.4 923264 77080 ? Sl Jun19 0:03 node ./bin/www
 
kill 11200

只要殺死node /usr/local開啟的進程,node ./bin/www進程也隨之死掉了。

###使用進程名+腳本來停止服務

端口

如果運行在未被占用的非80端口上,服務器一聲不吭就給開了。但是如果用80端口,可能要注意一下權限的問題。最近都是使用root用戶來開啟Node服務並運行於80端口上,沒有碰到什么問題。

使用80端口后,訪問服務就不必加端口號了。

用shell實現自動化管理


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM