LNMP環境安裝教程
「LNMP」即Linux,Nginx,MySQL,PHP。我個人的理解是:
- Linux就是環境所在的作業系統;
- Nginx則是一個「高效能的HTTP和反向代理伺服器」,官網地址:http://nginx.org/;
- MySQL則是一個方便地對資料進行增刪改查的資料庫管理系統,官網地址:http://www.mysql.com/;
運用這4件工具,最簡單直接的一個用途就是搭建一個網站,例如現在我的個人網站就是在「LNMP」上面跑的,然後部落格(我使用WordPress)、新聞等其它內容也可以放到網站中。
其實在Nginx開始受到關注之前,「LAMP」是搭建網站比較流行的選擇,即Linux,Apache,MySQL
本文的目的就是介紹一下如何從零開始搭建一個LNMP環境,然後初步讓一個網頁能夠通過瀏覽器走HTTP請求訪問。
這裡我們使用的不是LNMP的一鍵安裝包,而是難度稍微高「一點」的逐個安裝,這樣做或許能讓你對這個環境的細節有更好的理解,而且對各部分的定製程度可以達到最高。
1 開始前的一些Tips
下面給出的操作步驟對於Linux來說是通用的,缺什麼就安裝什麼,只是不同的Linux所輸入的內容可能有些不同而已。
我是直接在阿里雲ECS上面操作的,Linux的版本是CentOS 6.3 64位,各位可以直接在阿里雲的首頁點選右上角的「免費試用」,選擇CentOS 6.3 64位系統,然後通過SSH直接登陸到主機進行操作,這樣是最方便的。
另外一個選擇是自己安裝一個Linux然後在上面進行操作,這種方法也可以。現在我也下載了一個CentOS 6.5 64位把下面的步驟走一遍。在自己的系統上操作有個麻煩的地方:
- 如果你把系統搞壞了那麼恢復起來可能要費點事,直接重灌也需要一些時間,哪怕是在虛擬機器上面操作,但是ECS上面直接點選重置就可以了;
- 在下載一些系統的依賴包時(例如使用wget命令下載MySQL)如果你的網速比較慢那麼下載會比較久,但是阿里雲ECS下載這些資源的速度嗖嗖地,非常快就下載完了。
有不少人會使用Ubuntu,我之前也使用過Ubuntu搭建LNMP,最終搭建成功了,只是安裝依賴時有一些些麻煩,下面會講到。
在文中我會在必要地方新增圖片,但是會以文字為主,因為實在沒有太多圖片好新增。其實下面的所有內容都是按照這個這幾個流程寫的:
- 要安裝什麼程式?——PHP,NGINX,MYSQL;
- 安裝的這個程式,在編譯時需要哪些擴充套件或者哪些庫?(例如PHP安裝OpenSSL,NGINX安裝openssl);
- 下載這些擴充套件和庫,下載完壓縮包後解壓縮得到這些庫的程式碼,或者進一步地編譯這些庫並安裝到一個指定的路徑下;
- 編譯程式,將需要的庫、擴充套件新增到編譯選項中,指定程式的安裝路徑;
- 安裝完成,測試。
因此下面的內容就是上面這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的程式碼目錄:
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.」,如下圖:
配置完就輸入以下命令進行安裝:
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」,即如下圖所示:
儲存後需要保證名為「www-data」的使用者以及組存在,因此在命令列執行下列語句:
1 |
groupadd www-data |
2 |
useradd
-g www-data www-data |
這樣PHP的安裝配置工作就大體完成了