終于戰(zhàn)勝拖延癥墩蔓,備案好了域名梢莽,下狠心買(mǎi)了一個(gè)阿里云(低配打了折的還得好幾十一個(gè)月,寶寶心里苦~)奸披』杳苦歸苦,web環(huán)境(主要是為了node應(yīng)用服務(wù))還是要搭建起來(lái)的阵面,開(kāi)車(chē)了轻局,請(qǐng)坐好扶穩(wěn)!Qⅰ仑扑!
一、前戲
除了購(gòu)買(mǎi)之前需要先買(mǎi)一個(gè)域名以及備案置鼻,購(gòu)買(mǎi)的過(guò)程中也有事情需要注意镇饮。
阿里云實(shí)際上可以看做一臺(tái)計(jì)算機(jī),在買(mǎi)計(jì)算機(jī)之前箕母,了解配置是必不可少的一步储藐,此前我也咨詢(xún)過(guò)朋友,然而沒(méi)有實(shí)踐經(jīng)驗(yàn)嘶是,難以真正理解钙勃。反正從無(wú)到有,反正阿里云的配置可以彈性變更聂喇,莫不如聽(tīng)信阿里的讒言辖源,選一個(gè)個(gè)人入門(mén)型的。
其它的配置都幫勾選好了授帕,唯獨(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)買(mǎi)好的域名解析到實(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
,如果訪(fǎng)問(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中下載的代碼,安裝依賴(lài)包绸栅,執(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)蟆豫,得輸入域名加端口才可以訪(fǎng)問(wèn),當(dāng)然可以改為監(jiān)聽(tīng)80端口懒闷,便可以直接輸入域名訪(fǎng)問(wèn)應(yīng)用十减。然而,倘需要在服務(wù)器中部署多個(gè)node應(yīng)用監(jiān)聽(tīng)不同的端口愤估,則必有占不到80端口的應(yīng)用帮辟,如何在訪(fǎ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是單線(xiàn)程的荤西,倘若應(yīng)用出現(xiàn)了未捕獲的異常澜搅,那么進(jìn)程將中斷,服務(wù)也就中斷了邪锌,線(xiàn)上產(chǎn)品如此勉躺,那是災(zāi)難性的,使用pm2管理node進(jìn)程秃流,可以在出錯(cuò)的時(shí)候重啟赂蕴。
類(lèi)似的還有基于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ī)則,三言?xún)烧Z(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在線(xiàn)生成工具給了一個(gè)二級(jí)域名h5.facemagic888.com纳猪。這個(gè)域名解析到服務(wù)器的ip,通過(guò)80端口訪(fǎng)問(wèn)服務(wù)器(默認(rèn)無(wú)需輸入)的時(shí)候桃笙,nginx會(huì)轉(zhuǎn)發(fā)到服務(wù)器的3000端口應(yīng)用進(jìn)行處理
至此氏堤,阿里云的部署配置算是告一段落了,其它的什么問(wèn)題搏明,運(yùn)行的過(guò)程中再觀(guān)察了鼠锈,抄小路,去訪(fǎng)問(wèn)一下部署好的網(wǎng)站吧:http://h5.facemagic888.com/
總結(jié)
說(shuō)起來(lái)完成整個(gè)過(guò)程只有8步熏瞄,但是涉及到的知識(shí)點(diǎn)還是蠻多的脚祟,一步一步慢慢嘗試慢慢品,會(huì)有很多收獲强饮,just do it