1. 程式人生 > >LNMP環境安裝教程

LNMP環境安裝教程

「LNMP」即Linux,Nginx,MySQL,PHP。我個人的理解是:

  • Linux就是環境所在的作業系統;
  • Nginx則是一個「高效能的HTTP和反向代理伺服器」,官網地址:http://nginx.org/
  • MySQL則是一個方便地對資料進行增刪改查的資料庫管理系統,官網地址:http://www.mysql.com/

運用這4件工具,最簡單直接的一個用途就是搭建一個網站,例如現在我的個人網站就是在「LNMP」上面跑的,然後部落格(我使用WordPress)、新聞等其它內容也可以放到網站中。

其實在Nginx開始受到關注之前,「LAMP」是搭建網站比較流行的選擇,即LinuxApacheMySQL

PHP

本文的目的就是介紹一下如何從零開始搭建一個LNMP環境,然後初步讓一個網頁能夠通過瀏覽器走HTTP請求訪問。

這裡我們使用的不是LNMP的一鍵安裝包,而是難度稍微高「一點」的逐個安裝,這樣做或許能讓你對這個環境的細節有更好的理解,而且對各部分的定製程度可以達到最高。

1 開始前的一些Tips

下面給出的操作步驟對於Linux來說是通用的,缺什麼就安裝什麼,只是不同的Linux所輸入的內容可能有些不同而已。

我是直接在阿里雲ECS上面操作的,Linux的版本是CentOS 6.3 64位,各位可以直接在阿里雲的首頁點選右上角的「免費試用」,選擇CentOS 6.3 64位系統,然後通過SSH直接登陸到主機進行操作,這樣是最方便的。

另外一個選擇是自己安裝一個Linux然後在上面進行操作,這種方法也可以。現在我也下載了一個CentOS 6.5 64位把下面的步驟走一遍。在自己的系統上操作有個麻煩的地方:

  1. 如果你把系統搞壞了那麼恢復起來可能要費點事,直接重灌也需要一些時間,哪怕是在虛擬機器上面操作,但是ECS上面直接點選重置就可以了;
  2. 在下載一些系統的依賴包時(例如使用wget命令下載MySQL)如果你的網速比較慢那麼下載會比較久,但是阿里雲ECS下載這些資源的速度嗖嗖地,非常快就下載完了。

有不少人會使用Ubuntu,我之前也使用過Ubuntu搭建LNMP,最終搭建成功了,只是安裝依賴時有一些些麻煩,下面會講到。

在文中我會在必要地方新增圖片,但是會以文字為主,因為實在沒有太多圖片好新增。其實下面的所有內容都是按照這個這幾個流程寫的:

  1. 要安裝什麼程式?——PHP,NGINX,MYSQL;
  2. 安裝的這個程式,在編譯時需要哪些擴充套件或者哪些庫?(例如PHP安裝OpenSSL,NGINX安裝openssl);
  3. 下載這些擴充套件和庫,下載完壓縮包後解壓縮得到這些庫的程式碼,或者進一步地編譯這些庫並安裝到一個指定的路徑下;
  4. 編譯程式,將需要的庫、擴充套件新增到編譯選項中,指定程式的安裝路徑;
  5. 安裝完成,測試。

因此下面的內容就是上面這5步的迴圈。那麼,開始吧。

2 安裝Linux

首先最基本的自然是你需要安裝了Linux的作業系統,如果你只是嘗試一下,可以安裝在虛擬機器裡面,或者如果你已經在使用阿里雲ECS那麼系統就已經安裝好了。

為了重新走一次所有的步驟, 我下載並在虛擬機器安裝了CentOS 6.5 64位的系統。當然你也可以使用其它的Linux發行版例如Ubuntu等,在接下來要輸入命令的地方不同的Linux按需進行修改即可。

在開始前,先安裝一些通常來說應該已經有的元件,不過以防沒有可以檢查並安裝一下。對於使用CentOS的使用者在root許可權下輸入命令:

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(其它版本我沒有測試過)使用者在這裡可以先不行動,因為我試過即便在這裡使用「sudo apt-get install …」,後面在編譯PHP的時候還是會提示找不到對應的庫,原因可能是編譯時的預設查詢路徑不正確。解決辦法從理論上來說有2個:

  • 找到PHP編譯時查詢庫的路徑,然後修改為「sudo apt-get install …」安裝後的路徑;
  • 手動下載其中缺少的庫,然後你自己安裝到自己知道的一個目錄,在編譯PHP時手動指定這個庫的路徑(我當時用的就是這種方法,累死不償命啊,建議能折騰的研究一下第一個方法,然後把解決方案共享出來)。

庫已經安裝好了,要注意的是在編譯PHP時可能會說缺少其中的幾個庫,到時候請各位在百度(或者谷歌)搜一下這個庫的官網,使用wget下載然後解壓然後安裝到你指定的一個目錄,最後在編譯PHP時指定這個庫安裝後的路徑即可。為了方便演示,接下來碰到這個問題時,我預設使用以下的幾個路徑:

  • 所有下載的壓縮包放在「/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下建立一個目錄並使用這個目錄,例如在/home下使用mkdir xxx。具體原因會在Nginx的安裝部分會提到403 Forbidden的時候講解。

現在可以開始嘗試安裝PHP了,首先我下載了PHP 5.4.29,不下載最新版的原因是我擔心它和某些庫會有相容性問題(但我沒有查證過這種問題是否存在)。在命令列下我先把當前目錄切換到「/home/reetsee/download/」,然後輸入下面的命令進行下載:

1 wget http://cn2.php.net/get/php-5.4.29.tar.gz/from/this/mirror

下載的場面大概是這樣的:

下載PHP

下載後執行解壓操作,並切換到PHP的程式碼目錄:

1 tar zxvf php-5.4.29.tar.gz
2 cd php-5.4.29

執行以下命令對PHP的安裝進行設定:

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

對上面的命令作一下簡單的說明:

從總體來看就是設定安裝的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的使用者十有八九會出現類似 「configure: error: mcrypt.h not found. Please reinstall libmcrypt.」的問題,這是因為缺少了mcrypt這個庫(對於Ubuntu使用者缺少的可能是其它庫),那麼接下來就把它下載並安裝。

下載並安裝缺失的庫——以mcrypt為例:

在搜尋引擎得知mcrypt的官網,進入原始碼下載的頁面,複製「libmcrypt-2.5.7.tar.gz」的下載地址,切換到目錄「/home/reetsee/download/」執行下載並安裝的操作:

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的原始碼目錄進行「./configure …」時,將原本的「–with-mcrypt」更改為「–with-mcrypt=/home/reetsee/environment/lib/mcrypt」,粗體部分就是你安裝mcrypt的目錄。

———— mcrypt安裝結束 ————

回到PHP原始碼的目錄重新configure,這次輸入的命令要將mcrypt的安裝路徑新增進去,具體命令變為:

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

最後配置成功會出現「Thank you for using PHP.」,如下圖:

configure_php

配置完就輸入以下命令進行安裝:

1 make && make install

 安裝需要一段時間,可以喝杯茶~

安裝完後還有一點收尾工作,首先是配置php-fpm,首先是切換到php的安裝目錄下的etc資料夾:

1 cd /home/reetsee/environment/php/etc/

然後執行下面的命令:

1 cp php-fpm.conf.default php-fpm.conf

再對php-fpm.conf的內容進行修改,將「user = nobody」,「group = nobody」分別改為「user = www-data」,「group = www-data」,即如下圖所示:

php-fpm-conf

儲存後需要保證名為「www-data」的使用者以及組存在,因此在命令列執行下列語句:

1 groupadd www-data
2 useradd -g www-data www-data

這樣PHP的安裝配置工作就大體完成了 </div></body></html>