終于戰(zhàn)勝拖延癥,備案好了域名,下狠心買了一個(gè)阿里云(低配打了折的還得好幾十一個(gè)月,寶寶心里苦~)??鄽w苦,web環(huán)境(主要是為了node應(yīng)用服務(wù))還是要搭建起來(lái)的,開(kāi)車了,請(qǐng)坐好扶穩(wěn)?。。?/p>

一、前戲
除了購(gòu)買之前需要先買一個(gè)域名以及備案,購(gòu)買的過(guò)程中也有事情需要注意。
阿里云實(shí)際上可以看做一臺(tái)計(jì)算機(jī),在買計(jì)算機(jī)之前,了解配置是必不可少的一步,此前我也咨詢過(guò)朋友,然而沒(méi)有實(shí)踐經(jīng)驗(yàn),難以真正理解。反正從無(wú)到有,反正阿里云的配置可以彈性變更,莫不如聽(tīng)信阿里的讒言,選一個(gè)個(gè)人入門型的。

其它的配置都幫勾選好了,唯獨(dú)操作系統(tǒng)是需要自己動(dòng)手的,在windows和linux之間,請(qǐng)不要猶豫,放棄windows,因?yàn)檫@是服務(wù)器,即使習(xí)慣了windows,也應(yīng)該跳出自己的思維舒適區(qū)。然而,linux系統(tǒng)也還有好幾種,這個(gè)時(shí)候該干嘛?沒(méi)錯(cuò),谷歌(或者度娘)。網(wǎng)上有各種優(yōu)劣對(duì)比,走到了這個(gè)階段也應(yīng)該知道自己的側(cè)重點(diǎn)了。我選了一個(gè)Ubuntu 14.04 64位,Ubuntu和Debian都使用的apt-get的方式安裝軟件,這是我更熟悉的一種方式,并且Ubuntu基于Debian開(kāi)發(fā),有比Debian更加激進(jìn)的軟件更新策略,嗯,年輕就應(yīng)該多嘗試。
自己折騰、實(shí)踐,選錯(cuò)了也沒(méi)多大點(diǎn)事,因?yàn)橄到y(tǒng)是可以重裝的
二、連接
拿到阿里云實(shí)例之后,第一要?jiǎng)?wù)就是能夠遠(yuǎn)程連接,我發(fā)現(xiàn)我在管理界面中點(diǎn)擊遠(yuǎn)程連接按鈕進(jìn)入命令行連接的時(shí)候我是不知道root密碼的,好吧,重置密碼吧,重置密碼之后一定要記得重啟,否則密碼是無(wú)效的
拿到root密碼,ip,其實(shí)就可以把管理后臺(tái)擱在一邊了,可以使用你習(xí)慣的終端(這里我mac shell),以ssh的方式遠(yuǎn)程登錄,以sftp的方式來(lái)上傳下載文件,服務(wù)器上編輯文件使用vi
這里全程使用命令行的方式操作,木有圖形界面,請(qǐng)?jiān)囍邮?,?xí)慣之后,你會(huì)發(fā)現(xiàn),這個(gè)逼完全是可以裝的,沒(méi)有想象中復(fù)雜,卻比想象中迅捷

連接命令:
//ssh連接
# ssh root@yourip
# your root pass
//sftp連接
# sftp root@youip
# you root pass
命令很多,不是本文的重點(diǎn),網(wǎng)上教程可以搜索到很多,可以找來(lái)看看,不需要每個(gè)命令都記住,有印象即可,用到可以去查,常用的自然會(huì)記住
三、嘗試python啟動(dòng)最簡(jiǎn)單的web服務(wù)
使用購(gòu)買好的域名解析到實(shí)例對(duì)應(yīng)的公網(wǎng)ip。
使用ssh命令連接之后,需要確定一個(gè)保存web文件的目錄,在/home目錄下創(chuàng)建一個(gè)WWW以及WWW/static。使用sftp連接,上傳一個(gè)index.html,內(nèi)容嘛as you wish,主要是用來(lái)測(cè)試的
//ssh
#cd /home
#mkdir WWW
#cd /WWW
#mkdir static
//sftp
# cd /home/WWW/static
# lcd dir(本地index.html所在目錄)
# put index.html
Ubuntu默認(rèn)已經(jīng)安裝了python,直接輸入python命令如果能進(jìn)入python命令行就可以證明此言不虛了,一個(gè)命令就可以啟動(dòng)一個(gè)最簡(jiǎn)單的web服務(wù),在瀏覽器輸入:http://youdomain/index.html,如果訪問(wèn)正常,那么第一步就成了
# python -m SimpleHTTPServer 80

四、安裝git
git無(wú)疑已經(jīng)是最流行的代碼管理工具,而github這個(gè)基于git進(jìn)行版本控制的源代碼托管服務(wù)也是最流行。我的應(yīng)用代碼也托管在github上面,安裝git之后,我可以方便的從github更新最新的代碼,這一點(diǎn)很重要。另外Ubuntu的一些軟件也可以基于git安裝
//安裝
# apt-get install git-core
//使用
# cd /home/WWW
# git clone https://github.com/zengwenfu/h5-creator.git
# your github username
# your github password
五、安裝nvm、node
我這里需要部署的是基于node的web應(yīng)用,所以需要安裝node,為了能在多個(gè)node版本中切換如流,需要安裝一個(gè)node的版本管理工具nvm
//前面我們已經(jīng)按照了git,所以可以使用git
# git clone https://github.com/creationix/nvm.git ~/.nvm && cd ~/.nvm && git checkout `git describe --abbrev=0 --tags`
//編輯環(huán)境變量文件
# cd
# vim .bashrc
//增加
source ~/.nvm/nvm.sh
// 添加到系統(tǒng)
# source .bashrc
如此nvm便安裝成功了,可以使用nvm來(lái)方便的安裝node了,
//查看可用的node版本
# nvm ls-remote
//安裝指定版本,默認(rèn)已經(jīng)安裝了npm了
# nvm install 5.8.0
進(jìn)入上一步中在github中下載的代碼,安裝依賴包,執(zhí)行啟動(dòng)命令,不過(guò)好像出了點(diǎn)錯(cuò)誤
# cd /home/WWW/h5-creator
# npm install
# npm start

六、安裝mongodb
上一步報(bào)的錯(cuò)誤是因?yàn)閔5-creator使用了mongodb,然而服務(wù)器上沒(méi)有安裝所致,所以mongodb也得安裝上
//添加mongodb簽名到APT
# apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
//創(chuàng)建/etc/apt/sources.list.d/mongodb-org-3.2.list文件并寫(xiě)入命令
# echo "deb http://repo.mongodb.org/apt/ubuntu precise/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list
//更新軟件源列表
# apt-get update
//安裝mongodb(默認(rèn)是安裝穩(wěn)定版)
# apt-get install -y mongodb-org=3.2.9 mongodb-org-server=3.2.9 mongodb-org-shell=3.2.9 mongodb-org-mongos=3.2.9 mongodb-org-tools=3.2.9
安裝成功之后,默認(rèn)已經(jīng)自啟動(dòng),重新到/home/WWW/h5-creator中運(yùn)行npm start即可正常運(yùn)行,由于這個(gè)node服務(wù)默認(rèn)使用了3000這個(gè)端口號(hào),得輸入域名加端口才可以訪問(wèn),當(dāng)然可以改為監(jiān)聽(tīng)80端口,便可以直接輸入域名訪問(wèn)應(yīng)用。然而,倘需要在服務(wù)器中部署多個(gè)node應(yīng)用監(jiān)聽(tīng)不同的端口,則必有占不到80端口的應(yīng)用,如何在訪問(wèn)網(wǎng)站的時(shí)候省去端口號(hào)呢,這需要nginx的反向代理,詳情請(qǐng)往下讀
在此之前還有一個(gè)問(wèn)題,啟動(dòng)了node服務(wù)之后,終端界面停留在了node服務(wù)日志的輸出界面中,退出終端,則服務(wù)也跟著被中斷了,所以還需要一個(gè)管理node進(jìn)程的pm2。當(dāng)然pm2解決的問(wèn)題不單是退出終端界面不中斷服務(wù),眾所周知,node是單線程的,倘若應(yīng)用出現(xiàn)了未捕獲的異常,那么進(jìn)程將中斷,服務(wù)也就中斷了,線上產(chǎn)品如此,那是災(zāi)難性的,使用pm2管理node進(jìn)程,可以在出錯(cuò)的時(shí)候重啟。
類似的還有基于python的supervisor
七、安裝pm2
pm2是基于node的模塊,使用npm全局安裝即可,不過(guò)一定要全局安裝,安裝成功使用pm2代替node啟動(dòng)node服務(wù)
//安裝
# npm install pm2 -g
//進(jìn)入h5-creator
# cd /home/WWW/h5-creator
//啟動(dòng)服務(wù)
# pm2 start server.js
//pm2 其它常用命令
//查看node進(jìn)程列表
# pm2 list
//顯示特定進(jìn)程詳情
# pm2 show id
//重啟
# pm2 restart id
//停止
# pm2 stop id
如此啟動(dòng)之后,終端不會(huì)停留在node應(yīng)用日志界面,你可以安安靜靜的離開(kāi)了~

八、安裝nginx
使用nginx的反向代理,可以將同一臺(tái)服務(wù)器上監(jiān)聽(tīng)不同端口的服務(wù),都能以80端口作為代理入口,定向到特定的服務(wù)
//安裝
# apt-get install nginx
nginx的配置文件在/etc/nginx目錄,查看nginx.conf發(fā)現(xiàn)如下一句
include /etc/nginx/conf.d/*.conf;
所以的配置文件加入conf.d目錄即可,具體的配置規(guī)則,三言兩語(yǔ)也說(shuō)不清楚,需要找點(diǎn)資料稍微系統(tǒng)的看下,這里只挑我的配置中的關(guān)鍵部分進(jìn)行說(shuō)明
listen 80;
server_name h5.facemagic888.com; //域名綁定
server_tokens off; ## Don't show the nginx version number, a security best practice
root /home/WWW/h5-creator;
index index.html index.htm;
.......
location / {
...
proxy_pass http://localhost:3000; //代理定向到localhost:3000
}
我注冊(cè)的域名是facemagic888.com,可以解析www.facemagic888.com這個(gè)一級(jí)域名,還可以解析諸如h5.facemagic888.com的二級(jí)域名,由于一級(jí)域名有別的用途(個(gè)人網(wǎng)站,開(kāi)發(fā)中),所以這個(gè)h5在線生成工具給了一個(gè)二級(jí)域名h5.facemagic888.com。這個(gè)域名解析到服務(wù)器的ip,通過(guò)80端口訪問(wèn)服務(wù)器(默認(rèn)無(wú)需輸入)的時(shí)候,nginx會(huì)轉(zhuǎn)發(fā)到服務(wù)器的3000端口應(yīng)用進(jìn)行處理
至此,阿里云的部署配置算是告一段落了,其它的什么問(wèn)題,運(yùn)行的過(guò)程中再觀察了,抄小路,去訪問(wèn)一下部署好的網(wǎng)站吧:http://h5.facemagic888.com/
總結(jié)
說(shuō)起來(lái)完成整個(gè)過(guò)程只有8步,但是涉及到的知識(shí)點(diǎn)還是蠻多的,一步一步慢慢嘗試慢慢品,會(huì)有很多收獲,just do it