趣談個(gè)人建站
寫了一部分,發(fā)現(xiàn)內(nèi)容太多了,最后是分幾次完成的。雖然是技術(shù)文章,但我會(huì)盡量把這件事搞的輕松一點(diǎn),大家讀起來也更有趣。最后會(huì)在macshuo.com上形成一篇完整的文章。
2000年前后是第一波互聯(lián)網(wǎng)浪潮,無論是幸與不幸,我的早期職業(yè)生涯都是從這波浪潮開始的,那時(shí)候很多ASP(Application Service Provider)廠商會(huì)給個(gè)人用戶免費(fèi)提供一些靜態(tài)建站功能,大家可以寫一些HTML+CSS+JS的頁面?zhèn)魃先ィ闶窃缙诘膫€(gè)人的站點(diǎn),我記得自己的 第一個(gè)站點(diǎn)叫做「雪域蒼穹」,貌似取自一首流行歌曲的名字。無論是名稱還是頁面,現(xiàn)在看來都土的能掉出翔來,但當(dāng)時(shí)的感覺是,這特么的太酷了。
后面做過一些個(gè)人網(wǎng)站,由于各種原因都關(guān)掉了。再后來開始寫博客,很多人開始建自己的博客站點(diǎn)。站點(diǎn)不少,一直保持更新的倒沒幾個(gè)。我的想法是,專業(yè)的事就讓專業(yè)的廠商去做吧,所以一直也沒建個(gè)人博客網(wǎng)站,斷斷續(xù)續(xù)的在博客園和圖靈社區(qū)寫一些東西,也算是保持更新了。
終于有一天,微信公眾平臺(tái)來了,一個(gè)偶然的機(jī)會(huì)注冊(cè)了MacTalk(原Mac技巧),之后一口氣寫了一百三十多篇文章,文字總數(shù)超過了我前幾年的 博客總和,而且保持了一定的文字水準(zhǔn)(自以為-_-#)。然后就有很多讀者一直提醒我,MacTalk里的內(nèi)容有一部分是技術(shù)性質(zhì)的,有存留價(jià)值,如果能 夠進(jìn)行查詢檢索,對(duì)Mac的新老用戶都有幫助。我想了想也是,扯淡的東西估計(jì)沒人愿意重復(fù)閱讀的,技術(shù)類又很難記在當(dāng)下,所以就準(zhǔn)備開始著手建站,然后 macshuo.com就建成了。下面我把整個(gè)過程寫一下,供大家參考,另外,我只說自己的選擇,不會(huì)去比對(duì)各種指標(biāo),比如Linode和國(guó)內(nèi)VPS的優(yōu) 劣,Apache和Nginx的性能差異等等,如果你想了解這些東西,那就用Google百度一下。
搭建個(gè)人站點(diǎn),大致需要做這么幾件事情:
- 一臺(tái)具備公網(wǎng)IP的服務(wù)器
- 安裝操作系統(tǒng),搭建環(huán)境
- 購(gòu)買域名,域名綁定IP
- 部署應(yīng)用程序
基本上這四套組合拳打完,你的個(gè)人網(wǎng)站就算建起來了,后續(xù)的事情就是添磚加瓦和蓬蓽生輝了。
好把我們依次介紹:
服務(wù)器
大部分公司都會(huì)有自己的服務(wù)器和公網(wǎng)IP,要么托管要么自建機(jī)房。但對(duì)于個(gè)人用戶來說,就沒必要費(fèi)時(shí)費(fèi)力做這個(gè)事情了,購(gòu)買一個(gè) VPS(Virtual Private Server)即可。什么是VPS,建議大家去維基百科上查一下,簡(jiǎn)單來說就是你會(huì)擁有一臺(tái)虛擬主機(jī),除了看不見機(jī)箱之外,你可以像操作一臺(tái)實(shí)體服務(wù)器那 樣操作它,獨(dú)立操作系統(tǒng)和硬盤空間、獨(dú)立內(nèi)存和CPU資源、獨(dú)立的執(zhí)行程序和系統(tǒng)配置等,可以自己安裝操作系統(tǒng)和軟件,獨(dú)立重啟等等。
在VPS的選擇上,我用的是Linode。Linode是一家來自于米帝的專注于提供 Linux VPS 的服務(wù)提供商, 虛擬化技術(shù)采用了Xen,Linode的含義是Linux Node。注意,這里的操作系統(tǒng)是Linux,我推薦所有個(gè)人建站都采用Linux,不解釋,如果你想采用Windows Server,后面的內(nèi)容就不用看了。
Linode在國(guó)內(nèi)外口碑都不錯(cuò),價(jià)格適中,質(zhì)量可靠,童叟無欺。Linode提供了各種Linux操作系統(tǒng)供選擇,比如Ubuntu、Redhat、Debian、CentOS等等,裝系統(tǒng)和重裝系統(tǒng)都非常簡(jiǎn)單。
好,我們下面簡(jiǎn)單說一下步驟,訪問https://manager.linode.com/session/signup
填寫郵箱、用戶名密碼,就算注冊(cè)成功了,Linode會(huì)給你發(fā)封郵件確認(rèn),打開那個(gè)確認(rèn)連接,大家就會(huì)看到下面這張圖的內(nèi)容:
Linode通過它的ticket system(一套支持系統(tǒng))提供7 x 24 x 365的支持服務(wù),看清楚,不是7 x 24 x 365的不停機(jī)服務(wù),我現(xiàn)在特別煩一些企業(yè)客戶,一談就說永不宕機(jī),特么除了上帝誰能保證永不宕機(jī)?時(shí)間長(zhǎng)了自個(gè)都得宕!另外Linode還提供了4小時(shí) 的免費(fèi)試用服務(wù),比較厚道,如果你試試覺得不爽還可以選擇不玩。
選擇繼續(xù),就可以選機(jī)房了,Linode目前提供了東京和歐美等地的機(jī)房選擇,我選了東京機(jī)房,據(jù)說是針對(duì)亞太地區(qū)用戶的需求新開辟的,速度很快。 然后選操作系統(tǒng),設(shè)置硬盤大小、root密碼等,點(diǎn)擊「Rebuild」,你就進(jìn)入了VPS的控制臺(tái),等Host Job Queue的所有任務(wù)都是綠色的Success,就可以點(diǎn)擊「Boot」,啟動(dòng)系統(tǒng)。然后找到Remote Access這個(gè)標(biāo)簽,點(diǎn)進(jìn)去就可以找到這臺(tái)服務(wù)器的訪問IP,打開終端,輸入ssh root@x.x.x.x,就可以登錄系統(tǒng)了,看到了吧,very simple!
試用之后,如果你覺得可以,點(diǎn)擊Acount標(biāo)簽,完善自己的信息,選擇服務(wù)器配置,支付信息,然后就可以完整支付流程了。
我選的是Linode 1024套餐(24 GB DISK, 2000 GB),按照年付費(fèi)的話230刀左右,大家這兩天贊助的碎銀子,差不過夠一年年費(fèi)了:)支付方式包括Visa,MasterCard,American Express,只有要信用卡還是很方便的。
另外需要注意的一點(diǎn)是,拿到了IP之后,一定要在不翻##墻的情況下測(cè)試一下是否可以正常訪問。我就遇到這個(gè)問題了,在國(guó)內(nèi)沒法訪問,但是掛了VPN的就可以,我估計(jì)是哪個(gè)倒霉孩子以前用過,被墻之后不用了。
不得已我發(fā)起了一個(gè)Ticket(支持問題),說我在中國(guó)大陸不能訪問這個(gè)IP,但通過VPN可以,那哥們響應(yīng)倒是挺快,但顯然不懂我朝行情,讓我 執(zhí)行mtr –r x.x.x.x,mtr可以結(jié)合ping、nslookup、tracert診斷網(wǎng)絡(luò)傳輸問題。我只得把數(shù)據(jù)返給他,結(jié)果人家還要其他數(shù)據(jù),我就不耐煩 了,用蹩腳的英文給丫解釋了一下什么是偉大的墻,基本意思就是少特么廢話,趕緊給我換個(gè)IP。那哥們看我氣勢(shì)挺盛,趕緊給我換了個(gè)IP,我一試沒問題了, 說了聲三克油,他說威爾卡姆,這事算結(jié)了。兩人共交手五個(gè)回合,用時(shí)2小時(shí),效率還可以。
好,服務(wù)器部分就介紹到這里。以下是我的linode推薦碼,如果大家要購(gòu)買Linode服務(wù),可以用這個(gè)鏈接。
http://www.linode.com/?r=6bd100da844d8d2c191680a4792610467ce9052
#p#
搭建環(huán)境
我選用的服務(wù)器是Ubuntu12.04,64位。以下內(nèi)容均基于該環(huán)境描述。
拿到了主機(jī)IP,你就算拿到了新房的鑰匙,但是離入住還遠(yuǎn)著呢,因?yàn)槟隳莻€(gè)主機(jī)現(xiàn)在就是個(gè)毛坯房,除了進(jìn)去看看,什么都不能干。好,下面我們做一下簡(jiǎn)裝修。
1、創(chuàng)建用戶
第一次登錄需要root用戶,什么是root?root就是整個(gè)Linux操作系統(tǒng)最牛逼的主,他想干嘛就干嘛,他想刪誰就刪誰,他是光他是電他是 唯一的神話,他就是我朝就是我D,所以非常危險(xiǎn),你們懂的。如果用root執(zhí)行一下rm -rf,那整個(gè)錫安就會(huì)被抹掉,尼奧也拯救不了,如果root愿意,他可以抹掉你曾經(jīng)存在過的所有痕跡。所以,我們不能沒事就用root進(jìn)去耍,為了解決 這個(gè)問題,我們必須要建立一個(gè)agent,平時(shí)是普通用戶,關(guān)鍵時(shí)刻充當(dāng)root的角色。
具體操作如下:
首先用root登錄系統(tǒng)
ssh root@x.x.x.x
創(chuàng)建一個(gè)新用戶,用戶名隨你喜歡,比如叫做mactalk
adduser mactalk
按照提示信息輸入密碼和相關(guān)信息,就可以完成操作。完成之后系統(tǒng)就會(huì)自動(dòng)建立/home/mactalk路徑。
然后是授權(quán),輸入
visudo
在編輯器中找到如下內(nèi)容:
root ALL=(ALL:ALL) ALL
在下面加一行
mactalk ALL=(ALL:ALL) ALL
通過ctrl+x保存退出即可。然后就可以退出root,用mactalk重新登錄(ssh mactalk@x.x.x.x),登錄進(jìn)來默認(rèn)目錄在/home/mactalk下,當(dāng)你想行使root權(quán)限時(shí),請(qǐng)?jiān)诿钪霸黾觭udo,按照系統(tǒng)提示輸入密碼即可執(zhí)行操作。
2、選擇shell
用戶建好了,下面我們?yōu)橛脩暨x擇一種shell,估計(jì)小白看到這個(gè)又毛了,啥是shell?
shell就是Linux的一個(gè)外殼,你理解成衣服也行。它負(fù)責(zé)外界與Linux內(nèi)核的交互,接收用戶或其他應(yīng)用程序的命令,然后把這些命令轉(zhuǎn)化成 內(nèi)核能理解的語言,傳給內(nèi)核,內(nèi)核是真正干活的,干完之后再把結(jié)果返回用戶或應(yīng)用程序。比如你對(duì)shell說,「你好」,shell就跑到內(nèi)核那說,「老 大,有人問候你呢」,內(nèi)核就不耐煩的說,「有事說事,我特么忙著呢」,shell就把這條信息反饋給你,大致就是這樣。以前講Mac技巧的時(shí)候,經(jīng)常跟大 家說在終端里輸入一些命令,那就是Mac的shell,都是一脈相承的。
Linux提供了很多種Shell,你要問我為什么要有這么多,我只能告訴你,你為毛同類型的衣服有那么多件?花色,質(zhì)地還不一樣。寫程序比買衣服 復(fù)雜多了,而且程序員是不憚?dòng)诎咽虑楦銖?fù)雜的,牛程序員看到不爽的shell,就會(huì)自己重新寫一套,慢慢形成了一些標(biāo)準(zhǔn),常用的shell有這么幾 種,sh、bash、csh、zsh等,想知道你的系統(tǒng)有幾種shell,可以通過以下命令查看:
cat /etc/shells
這些shell我就不解釋了,維基百科和百度百科都寫的很清楚,總之,坊間流傳,普通程序員用bash,文藝程序員用zsh,XX程序員直接用原生 的sh,我建議大家文藝一點(diǎn),用zsh好一些,功能也最強(qiáng)大。目前各個(gè)版本的Linux默認(rèn)的shell都是bash,如果你想用zsh,需要安裝一下, 如下:
sudo apt-get install zsh
具體的配置我就不介紹了,感興趣的讀者,可以參考
http://leeiio.me/bash-to-zsh-for-mac/
3、通用工具
介紹幾個(gè)簡(jiǎn)單的工具,建站必備。
- wget,命令行下載工具,安裝
sudo apt-get install wget
,使用方式后面會(huì)介紹。 - tmux,一個(gè)優(yōu)秀的終端復(fù)用軟件,類似GNU Screen,但來自于OpenBSD,采用BSD授權(quán)。使用它最直觀的好處就是,通過一個(gè)終端登錄遠(yuǎn)程主機(jī)并運(yùn)行tmux后,在其中可以開啟多個(gè)控制臺(tái) 而無需再「浪費(fèi)」多余的終端來連接這臺(tái)遠(yuǎn)程主機(jī)。好吧,這句話有點(diǎn)繞,簡(jiǎn)單說就是用tmux打開的會(huì)話可以一直駐留在服務(wù)器上,下次去看時(shí)還是上次來的樣 子。就像你是某個(gè)酒店的VIP客戶,住完之后不會(huì)人走茶涼,也不會(huì)斷電,下次去時(shí)茶還熱著,燈也亮著,就這樣。
- 安裝方式
sudo apt-get install tmux
,對(duì)使用方式感興趣的讀者去查一下吧,中文介紹很多,記住,熱鍵是ctrl+b。 - vim,在Linux上少不了編輯文件,我推薦Vim和Emacs,一個(gè)是編輯器之神,一個(gè)是神的編輯器(或者是偽裝成操作系統(tǒng)的編輯器),我是Vim黨,目前在學(xué)習(xí)Emacs。我之前寫過一個(gè)Vim系列,有興趣的可以去看:
http://www.cnblogs.com/chijianqiang/tag/vim/
從原理到配置、使用都有非常詳細(xì)的介紹,那也是個(gè)大坑,還沒寫完,但寫了MacTalk就變成顧此坑失彼坑了。
差不多就這幾個(gè),其他的工具隨用隨裝吧。
#p#
域名和DNS
服務(wù)器和環(huán)境構(gòu)建都寫完了,今天介紹一下域名和DNS的那點(diǎn)事兒,稍微復(fù)雜一點(diǎn)的軟件部分放在最后說。
域名是什么東西呢?就是一個(gè)網(wǎng)站的標(biāo)識(shí)和入口,由「.」分隔開的字符串構(gòu)成,洋名叫Domain Name,比如蘋果公司網(wǎng)站的域名就是apple.com,在瀏覽器地址欄輸入這個(gè)域名,就可以訪問蘋果的網(wǎng)站了。為什么要有域名呢,有了公網(wǎng)IP,不就可以訪問網(wǎng)站了么?
咳,這么說吧,如果有人說找個(gè)地方聚聚,你說,咱們經(jīng)度116.46、緯度39.92,不見不散!地方倒是對(duì),但是估計(jì)實(shí)名菜刀和無名臭鞋就飛過來 了。IP地址就是你的服務(wù)器在互聯(lián)網(wǎng)世界的經(jīng)緯度,域名就是對(duì)應(yīng)IP的門牌號(hào)碼,就像人們能記住門牌號(hào)記不住經(jīng)緯度一樣,在網(wǎng)絡(luò)世界里,大家都是記域名 的。與現(xiàn)實(shí)世界不同的是,門牌號(hào)和實(shí)際地址正常情況都是一對(duì)一的,而域名和IP地址是多對(duì)一的,也就是說,只要你有一個(gè)公網(wǎng)IP,就可以申請(qǐng)多個(gè)域名,對(duì) 應(yīng)多個(gè)應(yīng)用,非常方便。
現(xiàn)在你知道了吧,要建站,必須要有域名。能夠提供域名的廠商很多,國(guó)內(nèi)外都有。不過我強(qiáng)烈推薦大家購(gòu)買國(guó)外廠商的域名,免去提交材料和備案之苦,國(guó) 外動(dòng)動(dòng)鼠標(biāo)和小手分分鐘搞定的事情,國(guó)內(nèi)要提交各種材料、備案、定期監(jiān)管balabala……具體差異大家看看www.apple.com.cn和 www.apple.com兩個(gè)網(wǎng)站的底部知道了,蘋果中國(guó)的底部有「京公安網(wǎng)安備 11010500896|京ICP備10214630」,再看看米帝的網(wǎng)站,毛都沒有,都是自己的網(wǎng)站信息,我們只能說,米帝的監(jiān)管制度太不健全了,真為 他們捉雞!
國(guó)外的域名廠商推薦www.godaddy.com和www.name.com,都不錯(cuò)。我使用的是Godaddy。
Godaddy是全球最大的域名注冊(cè)服務(wù)商,全球市場(chǎng)占有率超過30%,一般情況下不會(huì)被我朝屏蔽。如果屏蔽了Godaddy,會(huì)導(dǎo)致在大陸無法訪 問全球近三分之一的網(wǎng)站,所以相對(duì)安全,相對(duì),你懂的。另外Godaddy開始支持支付寶了,對(duì)我朝臣民來說付費(fèi)變得方便無比。
在域名選擇上,最好滿足這幾點(diǎn)要求:有意義、好記、簡(jiǎn)短,另外盡可能使用com(通用頂級(jí)域名)。申請(qǐng)步驟也很簡(jiǎn)單,訪問 www.godaddy.com,在搜索框輸入你想要購(gòu)買的域名,點(diǎn)擊搜索,你會(huì)看到這個(gè)域名的具體信息,是否被使用,相關(guān)域名,價(jià)格等信息,域名后綴一 般有com、net、me、us、info等,建議選com,不建議選info,據(jù)說info結(jié)尾的網(wǎng)站大部分是垃圾網(wǎng)站,會(huì)被搜索引擎屏蔽。
選好域名后,點(diǎn)Add,加入購(gòu)物車,如果不需要其他服務(wù),一路Continue即可,最后設(shè)置支付信息,支付寶在最后一列,然后「Place Your Order」,根據(jù)提示注冊(cè)和支付即可。價(jià)格與域名信息相關(guān),一般幾美元到10幾美元不等。
購(gòu)買完成之后,進(jìn)入Godaddy的域名管理控制臺(tái),找到你購(gòu)買的域名,把域名和你的IP地址綁定起來,就可以通過域名訪問你的網(wǎng)站了。這里就涉及到DNS了。
DNS的洋名一般說成Domain Name System,就是給域名提供服務(wù)的。光有域名沒用,還得有相關(guān)的服務(wù)能夠把域名解析成IP地址才行,DNS就干這事。DNS的擴(kuò)展性非常好,不依靠單一 的巨型主機(jī)索引,而是通過分布式系統(tǒng)提供服務(wù),全球能夠提供DNS服務(wù)的服務(wù)器多如牛毛數(shù)不勝數(shù),但大哥級(jí)別的根服務(wù)只有13臺(tái),目前的分布是:主根服務(wù) 器美國(guó)1個(gè),設(shè)置在弗吉尼亞州的杜勒斯;輔根服務(wù)器美國(guó)9個(gè),瑞典、荷蘭、日本各1個(gè),旗下是各個(gè)級(jí)別的域名服務(wù)器。
DNS的工作方式挺復(fù)雜,有興趣的直接去Google吧,我簡(jiǎn)單描述一下,大致的場(chǎng)景是這樣的,比如小明是個(gè)DNS服務(wù)器,有一天你想訪問 macshuo.com,就問,「小明啊,我想去聽聽MacTalk,怎么走呢?」,作為忠誠(chéng)的DNS戰(zhàn)士,小明的服務(wù)態(tài)度是值得贊賞的,如果他知道的 話,就會(huì)立刻告訴你地址,比如從這個(gè)街區(qū)左轉(zhuǎn)左轉(zhuǎn)左轉(zhuǎn)再左轉(zhuǎn)balabala……如果丫不知道也沒關(guān)系,他會(huì)反饋給上級(jí)主管,說「最近有人新建了個(gè) MacTalk網(wǎng)站,我這還沒記錄地址,你曉得不?」,上級(jí)部門如果知道就會(huì)把地址發(fā)給小明,說「你丫長(zhǎng)點(diǎn)記性,把這地址記下來行不?別特么老問了,最近 自媒體網(wǎng)站可真多啊,哎……」,這樣小明就會(huì)把地址告訴你,并且用心的把這個(gè)地址記到自己的小本本上,下次有人再問,就直接告訴人家答案了。如果上級(jí)部門 也不知道,那就繼續(xù)問,直到反饋到根服務(wù)器為止,反正只要你注冊(cè)了,總能找到。差不多就這樣吧。
Godaddy默認(rèn)提供了DNS服務(wù),點(diǎn)擊DNS Manager,在彈出的設(shè)置面板中設(shè)置你的網(wǎng)站IP即可,具體的圖文教程網(wǎng)絡(luò)上很多,我就不費(fèi)那事了。但是我的使用結(jié)果是,Godaddy提供的DNS 在國(guó)內(nèi)訪問不太穩(wěn)定,時(shí)不時(shí)就不能訪問了,具體為啥我也不清楚。因?yàn)橘?gòu)買了Linode服務(wù),我最后采用了Linode的DNS,具體的做法是:
- 登錄linode.com,點(diǎn)擊DNS Manager標(biāo)簽,進(jìn)入管理控制臺(tái)
- 選擇Add a domain zone
- 填寫域名、郵件地址和IP
- 點(diǎn)擊Add a Mater Zone,就算完成了
最后一步就是在Godaddy的控制臺(tái)里設(shè)置一下Linode的DNS服務(wù)器,很簡(jiǎn)單就不描述了。
#p#
應(yīng)用程序和部署
經(jīng)過前面三篇系列文章的介紹之后,我們現(xiàn)在房子也有了,做了簡(jiǎn)裝修,還申請(qǐng)了地址和門牌號(hào),最后一步就是入住,也就是部署你的應(yīng)用程序。
針對(duì)網(wǎng)站提供的服務(wù)不同,需要不同的技術(shù)選型,我的需求就是做個(gè)風(fēng)格簡(jiǎn)約的博客,用來存放MacTalk的文章,同時(shí)有個(gè)地方能夠隨意發(fā)表一些個(gè)人 觀點(diǎn),就這么簡(jiǎn)單,所以針對(duì)這個(gè)需求進(jìn)行選擇即可。大家將來建站的時(shí)候也是一樣,明確自己的需求,不要為未來買單,盡量搞的輕量級(jí)一些,最忌諱給的是龍?zhí)?的錢,您自個(gè)卻按照男豬腳進(jìn)行角色扮演,不提倡。
搭建輕量級(jí)的博客不建議使用.Net或JavaEE的技術(shù),這些技術(shù)都比較重,必要性不大。Php、Python、Ruby相關(guān)的框架都是可選的技 術(shù)。因?yàn)槲覍?duì)Python相對(duì)熟悉一些,最初想找個(gè)開源的Python Blog框架,不過后來綜合對(duì)比了一下,發(fā)現(xiàn)在個(gè)人博客領(lǐng)域,WordPress基本上無出其右,技術(shù)成熟、安裝方便、性能穩(wěn)定、插件眾多,實(shí)在是居家建 站、個(gè)人扯淡之必備良藥,就是它了。
在確定了基本需求和工具之后,我們看看涉及到哪些技術(shù):
1、Nginx Nginx是一款高性能的HTTP服務(wù)器軟件,由俄羅斯的一位大牛Igor Sysoev開發(fā)的,源代碼以類BSD許可證的形式發(fā)布。Nginx的設(shè)計(jì)非常輕量級(jí),由內(nèi)核和模塊組成,內(nèi)核微小簡(jiǎn)潔,模塊功能強(qiáng)大,靜態(tài)編譯。 Nginx做的事情簡(jiǎn)單來說就是,接收客戶端(瀏覽器)的HTTP請(qǐng)求,然后通過映射機(jī)制把不同類型的請(qǐng)求交給不同的模塊去處理,比如html、圖片、 css等可以交給靜態(tài)資源模塊處理,還可以做壓縮、緩存等,php、python等類型的請(qǐng)求則交給FastCGI模塊去處理,完成業(yè)務(wù)邏輯。
什么是FastCGI呢?這玩意就等于是HTTP服務(wù)器和動(dòng)態(tài)腳本語言通信的接口,就像一個(gè)粘合劑一樣把HTTP請(qǐng)求和動(dòng)態(tài)腳本處理整合在一起,顧名思義,處理速度非常Fast!
Nginx可以說是HTTP服務(wù)器軟件市場(chǎng)的新貴,目前國(guó)內(nèi)很多大型網(wǎng)站都采用了Nginx作為默認(rèn)的web服務(wù)器,比如阿里、騰訊、新浪等等,國(guó) 外就更多了。當(dāng)然,在Nginx未涉足江湖之前,這個(gè)領(lǐng)域的大哥叫做Apache,那時(shí)候幾乎所有的HTTP Server都是清一色的Apache,一時(shí)之間風(fēng)頭無兩。但是這哥們大哥做久了就不思進(jìn)取,跟國(guó)內(nèi)很多大佬一個(gè)德性,沒競(jìng)爭(zhēng)對(duì)手時(shí)就特么不知道改進(jìn),直 到Nginx出來搶了丫半壁江山,現(xiàn)在知道努力了,當(dāng)初干嘛去了?
#p#
那么Nginx比Apache優(yōu)秀在哪呢?
- Nginx的所有模塊都是全靜態(tài)編譯的,啟動(dòng)Nginx后,Nginx的模塊被自動(dòng)加載,靜態(tài)庫(kù)執(zhí)行效率更高。
- Nginx支持epoll(Linux系列)和kqueue(BSD系列)I/O事件通知機(jī)制。完,又特么出現(xiàn)兩個(gè)名詞!這讓人情何以堪、文何以完 ?。亢?jiǎn)單說說epoll吧。epoll是Linux2.6正式引入的提高網(wǎng)絡(luò)I/O的處理方法,它的幾個(gè)優(yōu)點(diǎn)是:?jiǎn)我贿M(jìn)程打開的FD(文件描述符)數(shù)量?jī)H 受限于操作系統(tǒng),1GB內(nèi)存的機(jī)器上大約是10萬左右,這一點(diǎn)大大提升了處理海量請(qǐng)求的能力;采用共享內(nèi)存的模式避免內(nèi)存拷貝;隨著打開FD的數(shù)量增 加,I/O效率不會(huì)線性下降??傊?,大家知道epoll很牛逼就是了。
- Nginx支持多進(jìn)程的工作方式,Nginx啟動(dòng)后會(huì)有一個(gè)master進(jìn)程,多個(gè)worker進(jìn)程。worker進(jìn)程一般對(duì)應(yīng)服務(wù)器的CPU數(shù) 量,你有個(gè)8核的CPU,最好把worker設(shè)置為8。master負(fù)責(zé)接收外界信號(hào),并向worker發(fā)送信號(hào),監(jiān)控worker的運(yùn)行狀況,當(dāng) worker掛掉的時(shí)候,啟動(dòng)新的worker。寫到這我發(fā)現(xiàn),這特么活脫脫就是一個(gè)地主老財(cái)打壓長(zhǎng)工的模式?。?/li>
- 尤其是Nginx的不中斷重啟機(jī)制,當(dāng)系統(tǒng)配置變化需要重新啟動(dòng)Nginx時(shí),我們就給地主(master)發(fā)個(gè)消息,說這批長(zhǎng)工(worker)太老 了,都得換掉,你看著辦。地主收到消息后就開始偷偷雇傭新的長(zhǎng)工(worker),然后假惺惺的告訴老長(zhǎng)工,把手頭的活干完就行了,別太累了,啊。這時(shí)候 如果有新的請(qǐng)求,就會(huì)交給新長(zhǎng)工干,等所有的老長(zhǎng)工把活都干完了,就直接fire,絕不留情。這樣,整個(gè)服務(wù)無中斷重啟過程就完成了,就特么一個(gè)字,黑!
- 當(dāng)然長(zhǎng)工(worker)也不是省油的等,他們干活的過程非常復(fù)雜,會(huì)用到我們上文中提到的epoll機(jī)制,如果有人感興趣,以后再講吧,這么寫下去這個(gè)系列就沒完了。
Nginx功能非常強(qiáng)大,一本書也寫不完,我簡(jiǎn)單就說這么幾句。老話,有興趣的,用Google百度一下!
大概了解了Nginx的工作機(jī)制,下面安裝就比較簡(jiǎn)單了,Nginx可以編譯安裝,也可以在線安裝,對(duì)于普通用戶來說,使用apt-get在線安裝即可,省的自己去找依賴關(guān)系。
#安裝
sudo apt-get install nginx
#啟動(dòng)
sudo service nginx start
如果安裝和啟動(dòng)都沒有問題,我們?cè)僬{(diào)整幾個(gè)參數(shù)就可以了。
找到/etc/nginx/nginx.conf,做以下幾個(gè)改動(dòng):
- 把worker_processes設(shè)置為服務(wù)器的CPU核數(shù)
- 在event里增加use epoll
- 把worker_connections的值設(shè)置大一點(diǎn),如果是1G內(nèi)存,不要大于100000/worker_processes。
其他的采用默認(rèn)值即可,然后重新加載參數(shù):
sudo nginx -s reload
好,Nginx就算妥了,后續(xù)在安裝PHP和WordPress時(shí)還要做一些配置。
我有時(shí)候覺得,當(dāng)我們?cè)谟?jì)算機(jī)領(lǐng)域遇到問題的時(shí)候,總會(huì)出現(xiàn)一些技術(shù)神山上的神人,他們時(shí)不時(shí)會(huì)俯視一下凡人的IT世界,高興了就順手解決幾個(gè)bug,發(fā)明幾個(gè)新玩意,epoll和Nginx就是這些玩意,我們用好就已經(jīng)心滿意足裊。
2、MySQL
MySQL是應(yīng)用最為廣泛的開源數(shù)據(jù)庫(kù),這個(gè)沒什么可說的,非常成熟的技術(shù),直接安裝即可:
sudo apt-get install mysql-server
安裝過程中,MySQL會(huì)提示你設(shè)置root密碼(root的作用參考之前介紹的,把操作系統(tǒng)換成數(shù)據(jù)庫(kù)即可)。如果安裝時(shí)沒設(shè)置密碼,等MySQL起來后用mysqladmin改也行,用sql改也行,簡(jiǎn)單不啰嗦。
3、PHP
WordPresss是基于PHP開發(fā)的,所以我們得為WordPress準(zhǔn)備好環(huán)境,安裝PHP。
sudo apt-get install php5
sudo apt-get install php5-fpm
php5-fpm是PHP FastCGI的實(shí)現(xiàn)之一,能夠更好的管理PHP進(jìn)程,控制內(nèi)存使用,平滑重載等,現(xiàn)在我們都用它!
下面做一點(diǎn)簡(jiǎn)單配置,打開php.ini文件:
sudo vim /etc/php5/fpm/php.ini
找到cgi.fix_pathinfo=1這一行,把1改為0。 值為1時(shí),php的解釋器會(huì)盡可能的去解析客戶端請(qǐng)求的文件各種類型,這會(huì)引發(fā)一些安全漏洞,設(shè)置為0時(shí),解釋器只會(huì)去解析特定的文件類型,設(shè)置為0是一種相對(duì)安全的處理策略。
修改www.conf:
sudo vim /etc/php5/fpm/pool.d/www.conf
把 listen = 127.0.0.1:9000
修改為 listen = /var/run/php5-fpm.sock
,前者是走TCP socket,后者是Unix domain socket,如果服務(wù)都在同一臺(tái)機(jī)器上,建議使用后者,效率更好一些。
重新啟動(dòng)PHP,這部分的配置就算完成了:
sudo service php5-fpm restart
4、WordPress
好的,我們從后場(chǎng)斷球后左沖右突,盤過對(duì)方和我方的所有進(jìn)攻和防守隊(duì)員,來到球門前面,發(fā)現(xiàn)就差最后一關(guān):WordPress。下面我們看看如何安裝和配置WordPress。
首先下載WordPress的最新版本,我用了中文版,下載和解壓縮:
wget http://cn.wordpress.org/wordpress-3.5.1-zh_CN.tar.gz
tar -xzvf wordpress-3.5.1-zh_CN.tar.gz
在MySQL中為WordPress創(chuàng)建用戶和數(shù)據(jù)庫(kù),這部分很簡(jiǎn)單就不描述了,后續(xù)會(huì)在macshuo.com網(wǎng)站上補(bǔ)充。我們?cè)O(shè)定數(shù)據(jù)庫(kù)為wordpress,用戶名為mactalk,并且把數(shù)據(jù)庫(kù)編碼改為UTF-8。
在解壓好的wordpress文件夾下,執(zhí)行:
cp wp-config-sample.php wp-config.php
vim ~/wordpress/wp-config.php
按照文件內(nèi)容注釋填寫數(shù)據(jù)庫(kù)名稱、用戶名、密碼、數(shù)據(jù)庫(kù)編碼使用UTF-8,然后保存退出。
為wordpress創(chuàng)建www文件夾,并且把完整的wordpress目錄復(fù)制到www文件夾下,并設(shè)置相關(guān)權(quán)限:
sudo mkdir -p /var/www
sudo cp -r ~/wordpress/* /var/www
cd /var/www/
sudo chown www-data:www-data * -R
sudo usermod -a -G www-data username
安裝php的MySQL驅(qū)動(dòng)
sudo apt-get install php5-mysql
設(shè)置虛擬主機(jī):
在/etc/nginx/sites-available下創(chuàng)建文件wordpress
sudo vim wordpress
具體的文件內(nèi)容就不貼了,后續(xù)會(huì)整合到machuo.com網(wǎng)站上,這個(gè)文件的作用就是把Nginx和WordPress粘合在一起,接收客戶端的 請(qǐng)求并反饋響應(yīng)結(jié)果。有幾點(diǎn)要注意的是,root設(shè)置為/var/www/,index部分增加index.php,fastcgi_pass對(duì)應(yīng)之前設(shè) 置的unix socket:unix:/var/run/php5-fpm.sock。
為wordpress文件建立軟連接:
sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/wordpress
最后重新啟動(dòng)nginx和php5-fpm,就算大功告成了:
sudo service nginx restartsudo
service php5-fpm restart
如果一切正常的話,訪問你的域名或者公網(wǎng)IP,就可以看到wordpress的提示頁面,根據(jù)信息提示初始化數(shù)據(jù)庫(kù),創(chuàng)建管理員,基本框架就算建好了,之后就是完善和優(yōu)化,比如性能優(yōu)化、主題選擇、配置信息、插件選擇、擴(kuò)展開發(fā)等等,大家慢慢體會(huì)吧。
這個(gè)系列就算完結(jié)了,我發(fā)現(xiàn)寫這種文章想做到好玩好看、還能言之有物把事說清楚,挺難也挺累,好在結(jié)了。