從1搭建LNMP環(huán)境
「LNMP」即Linux,Nginx,MySQL,PHP。我個人的理解是:
Linux就是環(huán)境所在的操作系統(tǒng);
Nginx則是一個「高性能的HTTP和反向代理服務(wù)器」,官網(wǎng)地址:http://nginx.org/;
MySQL則是一個方便地對數(shù)據(jù)進(jìn)行增刪改查的數(shù)據(jù)庫管理系統(tǒng),官網(wǎng)地址:http://www.mysql.com/;
PHP則是用來處理具體請求的腳本語言,官網(wǎng)地址:http://www.php.net/。
運(yùn)用這4件工具,最簡單直接的一個用途就是搭建一個網(wǎng)站,例如現(xiàn)在我的個人網(wǎng)站就是在「LNMP」上面跑的,然后博客(我使用WordPress)、新聞等其它內(nèi)容也可以放到網(wǎng)站中。
其實(shí)在Nginx開始受到關(guān)注之前,「LAMP」是搭建網(wǎng)站比較流行的選擇,即Linux,Apache,MySQL,PHP。
本文的目的就是介紹一下如何從零開始搭建一個LNMP環(huán)境,然后初步讓一個網(wǎng)頁能夠通過瀏覽器走HTTP請求訪問。
這里我們使用的不是LNMP的一鍵安裝包,而是難度稍微高「一點(diǎn)」的逐個安裝,這樣做或許能讓你對這個環(huán)境的細(xì)節(jié)有更好的理解,而且對各部分的定制程度可以達(dá)到最高。
1 開始前的一些Tips
下面給出的操作步驟對于Linux來說是通用的,缺什么就安裝什么,只是不同的Linux所輸入的內(nèi)容可能有些不同而已。
我是直接在阿里云ECS上面操作的,Linux的版本是CentOS 6.3 64位,各位可以直接在阿里云的首頁點(diǎn)擊右上角的「免費(fèi)試用」,選擇CentOS 6.3 64位系統(tǒng),然后通過SSH直接登陸到主機(jī)進(jìn)行操作,這樣是最方便的。
另外一個選擇是自己安裝一個Linux然后在上面進(jìn)行操作,這種方法也可以?,F(xiàn)在我也下載了一個CentOS 6.5 64位把下面的步驟走一遍。在自己的系統(tǒng)上操作有個麻煩的地方:
如果你把系統(tǒng)搞壞了那么恢復(fù)起來可能要費(fèi)點(diǎn)事,直接重裝也需要一些時間,哪怕是在虛擬機(jī)上面操作,但是ECS上面直接點(diǎn)擊重置就可以了;
在下載一些系統(tǒng)的依賴包時(例如使用wget命令下載MySQL)如果你的網(wǎng)速比較慢那么下載會比較久,但是阿里云ECS下載這些資源的速度嗖嗖地,非??炀拖螺d完了。
有不少人會使用Ubuntu,我之前也使用過Ubuntu搭建LNMP,最終搭建成功了,只是安裝依賴時有一些些麻煩,下面會講到。
在文中我會在必要地方添加圖片,但是會以文字為主,因?yàn)閷?shí)在沒有太多圖片好添加。其實(shí)下面的所有內(nèi)容都是按照這個這幾個流程寫的:
要安裝什么程序?——PHP,NGINX,MYSQL;
安裝的這個程序,在編譯時需要哪些擴(kuò)展或者哪些庫?(例如PHP安裝OpenSSL,NGINX安裝openssl);
下載這些擴(kuò)展和庫,下載完壓縮包后解壓縮得到這些庫的代碼,或者進(jìn)一步地編譯這些庫并安裝到一個指定的路徑下;
編譯程序,將需要的庫、擴(kuò)展添加到編譯選項(xiàng)中,指定程序的安裝路徑;
安裝完成,測試。
因此下面的內(nèi)容就是上面這5步的循環(huán)。那么,開始吧。
2 安裝Linux
首先最基本的自然是你需要安裝了Linux的操作系統(tǒng),如果你只是嘗試一下,可以安裝在虛擬機(jī)里面,或者如果你已經(jīng)在使用阿里云ECS那么系統(tǒng)就已經(jīng)安裝好了。
為了重新走一次所有的步驟, 我下載并在虛擬機(jī)安裝了CentOS 6.5 64位的系統(tǒng)。當(dāng)然你也可以使用其它的Linux發(fā)行版例如Ubuntu等,在接下來要輸入命令的地方不同的Linux按需進(jìn)行修改即可。
在開始前,先安裝一些通常來說應(yīng)該已經(jīng)有的組件,不過以防沒有可以檢查并安裝一下。對于使用CentOS的用戶在root權(quán)限下輸入命令:
1 | yum -y install gcc automake autoconf libtool make gcc-c++ glibc |
對于使用Ubuntu的用戶,如果沒記錯則是將「yum -y install」替換為「sudo apt-get install」就可以了,原則就是把上面列出來的「gcc automake autoconf libtool make gcc-c++ glibc」這幾個東西安裝一下。
3 安裝PHP
為了開啟PHP的一些功能(例如對png格式的支持等),首先需要安裝一些庫,CentOS命令如下:
1 | yum -y install libmcrypt-devel mhash-devel libxslt-devel \ |
2 | libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel \ |
3 | zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2 -devel \ |
4 | ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel \ |
5 | krb5 krb5-devel libidn libidn-devel openssl openssl-devel |
Ubuntu 12.04(其它版本我沒有測試過)用戶在這里可以先不行動,因?yàn)槲以囘^即便在這里使用「sudo apt-get install …」,后面在編譯PHP的時候還是會提示找不到對應(yīng)的庫,原因可能是編譯時的默認(rèn)查找路徑不正確。解決辦法從理論上來說有2個:
找到PHP編譯時查找?guī)斓穆窂?,然后修改為「sudo apt-get install …」安裝后的路徑;
手動下載其中缺少的庫,然后你自己安裝到自己知道的一個目錄,在編譯PHP時手動指定這個庫的路徑(我當(dāng)時用的就是這種方法,累死不償命啊,建議能折騰的研究一下第一個方法,然后把解決方案共享出來)。
庫已經(jīng)安裝好了,要注意的是在編譯PHP時可能會說缺少其中的幾個庫,到時候請各位在百度(或者谷歌)搜一下這個庫的官網(wǎng),使用wget下載然后解壓然后安裝到你指定的一個目錄,最后在編譯PHP時指定這個庫安裝后的路徑即可。為了方便演示,接下來碰到這個問題時,我默認(rèn)使用以下的幾個路徑:
所有下載的壓縮包放在「/home/reetsee/download/」這個文件夾下;
所有的壓縮包解壓后的路徑也是「/home/reetsee/download/」,即如果壓縮包名字是「openssl-1.0.1e.tar.gz」,那么解壓后「/home/reetsee/download/」下會有一個名字為「openssl-1.0.1e」的文件夾;
所有的庫安裝路徑都是「/home/reetsee/environment/lib/」,指定安裝路徑的方法下面會有。
要注意的是:如果你也使用「/home/xxx/…」這樣的格式,最好保證這個「xxx」不是用戶名,或者說「/home/xxx」不是用戶目錄。比較好的做法是你在/home下創(chuàng)建一個目錄并使用這個目錄,例如在/home下使用mkdir xxx。具體原因會在Nginx的安裝部分會提到403 Forbidden的時候講解。
現(xiàn)在可以開始嘗試安裝PHP了,首先我下載了PHP 5.4.29,不下載最新版的原因是我擔(dān)心它和某些庫會有兼容性問題(但我沒有查證過這種問題是否存在)。在命令行下我先把當(dāng)前目錄切換到「/home/reetsee/download/」,然后輸入下面的命令進(jìn)行下載:
1 | wget http: //cn2 .php.net /get/php-5 .4.29. tar .gz /from/this/mirror |
下載的場面大概是這樣的:
下載后執(zhí)行解壓操作,并切換到PHP的代碼目錄:
1 | tar zxvf php-5.4.29. tar .gz |
2 | cd php-5.4.29 |
執(zhí)行以下命令對PHP的安裝進(jìn)行設(shè)置:
1 | . /configure --prefix= /home/reetsee/environment/php -- enable -fpm --with-mcrypt \ |
2 | -- enable -mbstring --disable-pdo --with-curl --disable-debug --disable-rpath \ |
3 | -- enable -inline-optimization --with-bz2 --with-zlib -- enable -sockets \ |
4 | -- enable -sysvsem -- enable -sysvshm -- enable -pcntl -- enable -mbregex \ |
5 | --with-mhash -- enable -zip --with-pcre-regex --with-mysql --with-mysqli \ |
6 | --with-gd --with-jpeg- dir --with-openssl |
對上面的命令作一下簡單的說明:
從總體來看就是設(shè)置安裝的PHP需要或不需要哪些功能,安裝目錄是什么, 需要哪些庫
–prefix=/home/reetsee/environment/php :把PHP安裝在「/home/reetsee/environment/php」目錄下
–enable-fpm :為了讓Nginx和PHP能夠互相「交談」,需要一個叫做FastCGI的工具,因此PHP需要使用PHP-FPM來管理FastCGI。
–with-openssl :安裝OpenSSL庫
其它的「–with-xxx」即需要xxx庫,「–enable-yyy」即開啟yyy的支持,「–disable-zzz」即禁用zzz。
在這一步,Ubuntu或者CentOS的用戶十有八九會出現(xiàn)類似 「configure: error: mcrypt.h not found. Please reinstall libmcrypt.」的問題,這是因?yàn)槿鄙倭薽crypt這個庫(對于Ubuntu用戶缺少的可能是其它庫),那么接下來就把它下載并安裝。
下載并安裝缺失的庫——以mcrypt為例:
在搜索引擎得知mcrypt的官網(wǎng),進(jìn)入源碼下載的頁面,復(fù)制「libmcrypt-2.5.7.tar.gz」的下載地址,切換到目錄「/home/reetsee/download/」執(zhí)行下載并安裝的操作:
1 | wget ftp : //mcrypt .hellug.gr /pub/crypto/mcrypt/libmcrypt/libmcrypt-2 .5.7. tar .gz |
2 | tar zxvf libmcrypt-2.5.7. tar .gz |
3 | cd libmcrypt-2.5.7 |
4 | . /configure --prefix= /home/reetsee/environment/lib/mcrypt |
5 | make && make install |
這樣就把mcrypt安裝到「/home/reetsee/environment/lib/mcrypt」下了。
在PHP的源碼目錄進(jìn)行「./configure …」時,將原本的「–with-mcrypt」更改為「–with-mcrypt=/home/reetsee/environment/lib/mcrypt」,粗體部分就是你安裝mcrypt的目錄。
———— mcrypt安裝結(jié)束 ————
回到PHP源碼的目錄重新configure,這次輸入的命令要將mcrypt的安裝路徑添加進(jìn)去,具體命令變?yōu)椋?/p>
1 | . /configure --prefix= /home/reetsee/environment/php -- enable -fpm --with-mcrypt= /home/reetsee/environment/lib/mcrypt \ |
2 | -- enable -mbstring --disable-pdo --with-curl --disable-debug --disable-rpath \ |
3 | -- enable -inline-optimization --with-bz2 --with-zlib -- enable -sockets \ |
4 | -- enable -sysvsem -- enable -sysvshm -- enable -pcntl -- enable -mbregex \ |
5 | --with-mhash -- enable -zip --with-pcre-regex --with-mysql --with-mysqli \ |
6 | --with-gd --with-jpeg- dir --with-openssl |
最后配置成功會出現(xiàn)「Thank you for using PHP.」,如下圖: