- Linux就是環境所在的操作系統;
- Nginx則是一個「高性能的HTTP和反向代理服務器」,官網地址:http://nginx.org/;
- MySQL則是一個方便地對數據進行增刪改查的數據庫管理系統,官網地址:http://www.mysql.com/;
- PHP則是用來處理具體請求的腳本語言,官網地址:http://www.php.net/
運用這4件工具,最簡單直接的一個用途就是搭建一個網站,例如現在我的個人網站就是在「LNMP」上面跑的
其實在Nginx開始受到關注之前,「LAMP」是搭建網站比較流行的選擇,即Linux,Apache,MySQL,PHP。
這里我們使用的不是LNMP的一鍵安裝包,而是難度稍微高「一點」的逐個安裝,這樣做或許能讓你對這個環境的細節有更好的理解,而且對各部分的定制程度可以達到最高。
- 要安裝什么程序?——PHP,NGINX,MYSQL;
- 安裝的這個程序,在編譯時需要哪些擴展或者哪些庫?(例如PHP安裝OpenSSL,NGINX安裝openssl);
- 下載這些擴展和庫,下載完壓縮包后解壓縮得到這些庫的代碼,或者進一步地編譯這些庫並安裝到一個指定的路徑下;
- 編譯程序,將需要的庫、擴展添加到編譯選項中,指定程序的安裝路徑;
- 安裝完成,測試。
因此下面的內容就是上面這5步的循環。那么,開始吧。
在開始前,先安裝一些通常來說應該已經有的組件,不過以防沒有可以檢查並安裝一下。對於使用CentOS的用戶在root權限下輸入命令:
yum -y install gcc automake autoconf libtool make gcc-c++ glibc
安裝PHP
為了開啟PHP的一些功能(例如對png格式的支持等),首先需要安裝一些庫,CentOS命令如下:
yum -y install libmcrypt-devel mhash-devel libxslt-devel \ libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel \ zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel \ ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel \ krb5 krb5-devel libidn libidn-devel openssl openssl-devel
#錯誤:
yum [Errno 256] No more mirrors to try 解決方法
- 輸入下面的命令即可解決問題:
- yum clean all
庫已經安裝好了,要注意的是在編譯PHP時可能會說缺少其中的幾個庫,到時候請各位在百度(或者谷歌)搜一下這個庫的官網,使用wget下載然后解壓然后安裝到你指定的一個目錄,最后在編譯PHP時指定這個庫安裝后的路徑即可。為了方便演示,接下來碰到這個問題時,我默認使用以下的幾個路徑:
所有下載的壓縮包放在「/home/download/」這個文件夾下;
所有的壓縮包解壓后的路徑也是「/home/download/」,即如果壓縮包名字是「openssl-1.0.1e.tar.gz」,那么解壓后「/home/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/download/」,然后輸入下面的命令進行下載:
wget http://cn2.php.net/get/php-5.4.29.tar.gz/from/this/mirror
下載后執行解壓操作,並切換到PHP的代碼目錄:
tar zxvf mirror
cd php-5.4.29
執行以下命令對PHP的安裝進行設置:
./configure --prefix=/home/reetsee/environment/php --enable-fpm --with-mcrypt \ --enable-mbstring --disable-pdo --with-curl --disable-debug --disable-rpath \ --enable-inline-optimization --with-bz2 --with-zlib --enable-sockets \ --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex \ --with-mhash --enable-zip --with-pcre-regex --with-mysql --with-mysqli \ --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/」執行下載並安裝的操作:
wget ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/libmcrypt/libmcrypt-2.5.7.tar.gz tar zxvf libmcrypt-2.5.7.tar.gz cd libmcrypt-2.5.7 ./configure --prefix=/home/reetsee/environment/lib/mcrypt 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的安裝路徑添加進去,具體命令變為:
./configure --prefix=/home/reetsee/environment/php --enable-fpm --with-mcrypt=/home/reetsee/environment/lib/mcrypt \ --enable-mbstring --disable-pdo --with-curl --disable-debug --disable-rpath \ --enable-inline-optimization --with-bz2 --with-zlib --enable-sockets \ --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex \ --with-mhash --enable-zip --with-pcre-regex --with-mysql --with-mysqli \ --with-gd --with-jpeg-dir --with-openssl
最后配置成功會出現「Thank you for using PHP.」
+--------------------------------------------------------------------+ | License: | | This software is subject to the PHP License, available in this | | distribution in the file LICENSE. By continuing this installation | | process, you are bound by the terms of this license agreement. | | If you do not agree with the terms of this license, you must abort | | the installation process at this point. | +--------------------------------------------------------------------+ Thank you for using PHP. config.status: creating php5.spec config.status: creating main/build-defs.h config.status: creating scripts/phpize config.status: creating scripts/man1/phpize.1 config.status: creating scripts/php-config config.status: creating scripts/man1/php-config.1 config.status: creating sapi/cli/php.1 config.status: creating sapi/fpm/php-fpm.conf config.status: creating sapi/fpm/init.d.php-fpm config.status: creating sapi/fpm/php-fpm.service config.status: creating sapi/fpm/php-fpm.8 config.status: creating sapi/fpm/status.html config.status: creating sapi/cgi/php-cgi.1 config.status: creating ext/phar/phar.1 config.status: creating ext/phar/phar.phar.1 config.status: creating main/php_config.h config.status: executing default commands
如果你是用Ubuntu,會遇到很多編譯依賴問題,例如上面的mcrypt的缺失,可以參考這篇博客:http://www.cnblogs.com/alexqdh/archive/2012/11/20/2776017.html
配置完就輸入以下命令進行安裝:
make && make install
安裝需要一段時間,可以喝杯茶~
安裝完后還有一點收尾工作,首先是配置php-fpm,首先是切換到php的安裝目錄下的etc文件夾:
cd /home/reetsee/environment/php/etc/
然后執行下面的命令:
cp php-fpm.conf.default php-fpm.conf
再對php-fpm.conf的內容進行修改,將「user = nobody」,「group = nobody」分別改為「user = www-data」,「group = www-data」,即如下圖所示:
保存后需要保證名為「www-data」的用戶以及組存在,因此在命令行執行下列語句:
groupadd www-data
useradd -g www-data www-data
這樣PHP的安裝配置工作就大體完成了
。
不放心的可以編寫一個簡單的php腳本來測試一下有沒有輸出:
<?php /** /home/reetsee/tmp/phpinfo.php **/ echo phpinfo(); ?>
然后執行:
/home/reetsee/environment/php/bin/php phpinfo.php
如果看到PHP有關的信息,起碼說明PHP本身的安裝成功了。
但是還有一些手尾要做:
- 創建php.ini文件,這個文件是對php一些運行選項進行配置的文件,非常重要,以后肯定會用到。官方文檔在這里:http://www.php.net/manual/zh/ini.php。方法是將PHP源碼目錄下的「php.ini-production」文件復制到PHP安裝目錄下的「lib/」文件夾,並且重命名為「php.ini」。在我的機器上,輸入命令「cp /home/download/php-5.4.29/php.ini-production /home/reetsee/environment/php/lib/php.ini」即可完成。
- 設置php-fpm.pid的路徑,這個文件記錄了php-fpm的進程id,以后你要重啟php-fpm時可以通過命令(假設你在PHP的安裝目錄下)「kill -USR2 `cat var/run/php-fpm.pid`」。注意那兩個引號是反引號「`」,不是單引號或者雙引號。具體的做法是編輯PHP安裝目錄下的「etc/php-fpm.conf」文件,找到「pid = 」這一行,將前面的分號「;」去掉。如下圖所示:
[global] ; Pid file ; Note: the default prefix is /home/reetsee/environment/php/var ; Default Value: none ;pid = run/php-fpm.pid
編輯后:
[global] ; Pid file ; Note: the default prefix is /home/reetsee/environment/php/var ; Default Value: none pid = run/php-fpm.pid
至此就大功告成了。在下面安裝完Nginx后,會啟動php-fpm,到時候在PHP安裝目錄下就能看到 「var/run/php-fpm.pid」文件了。
安裝Nginx
安裝Nginx前也有一些庫需要下載,分別是pcre,zlib以及openssl 。這里要說明的是下載這3個庫的壓縮包后,對其進行解壓縮即可,無需安裝。openssl要下載是因為Nginx在安裝時需要的是openssl的源碼(與PHP的安裝不同)。
下載並解壓pcre:
- http://download.csdn.net/download/cyuyan112233/7422611
tarzxvf pcre-8.34.tar.gz
下載並解壓zlib:
wget http://zlib.net/zlib-1.2.8.tar.gz
tar zxvf zlib-1.2.8.tar.gz
下載並解壓openssl:
wget http://www.openssl.org/source/openssl-1.0.1g.tar.gz
tar zxvf openssl-1.0.1g.tar.gz
好了,必要的庫已經下載好,現在就正式開始下載Nginx並安裝。首先下載Nginx並解壓縮:
wget http://nginx.org/download/nginx-1.4.2.tar.gz
tar zxvf nginx-1.4.2.tar.gz
切換到Nginx的源碼目錄 「/home/reetsee/download/nginx-1.4.2」進行安裝前的配置,根據你pcre、zlib、openssl所在的源碼目錄以及Nginx的最終安裝路徑,輸入配置命令,我的配置命令如下:
1 ./configure --prefix=/home/reetsee/environment/nginx \ 2 --with-http_ssl_module \ 3 --with-pcre=/home/download/pcre-8.34 \ 4 --with-zlib=/home/download/zlib-1.2.8 \ 5 --with-openssl=/home/download/openssl-1.0.1g
這里附上一個配置說明列表(參考自http://www.nginx.cn/install):
1 –prefix=path 定義一個目錄,存放服務器上的文件 ,也就是nginx的安裝目錄。默認使用 /usr/local/nginx。 2 –sbin-path=path 設置nginx的可執行文件的路徑,默認為 prefix/sbin/nginx. 3 –conf-path=path 設置在nginx.conf配置文件的路徑。nginx允許使用不同的配置文件啟動,通過命令行中的-c選項。默認為prefix/conf/nginx.conf. 4 –pid-path=path 設置nginx.pid文件,將存儲的主進程的進程號。安裝完成后,可以隨時改變的文件名 , 在nginx.conf配置文件中使用 PID指令。默認情況下,文件名 為prefix/logs/nginx.pid. 5 –error-log-path=path 設置主錯誤,警告,和診斷文件的名稱。安裝完成后,可以隨時改變的文件名 ,在nginx.conf配置文件中 使用 的error_log指令。默認情況下,文件名 為prefix/logs/error.log. 6 –http-log-path=path 設置主請求的HTTP服務器的日志文件的名稱。安裝完成后,可以隨時改變的文件名 ,在nginx.conf配置文件中 使用 的access_log指令。默認情況下,文件名 為prefix/logs/access.log. 7 –user=name 設置nginx工作進程的用戶。安裝完成后,可以隨時更改的名稱在nginx.conf配置文件中 使用的 user指令。默認的用戶名是nobody。 8 –group=name 設置nginx工作進程的用戶組。安裝完成后,可以隨時更改的名稱在nginx.conf配置文件中 使用的 user指令。默認的為非特權用戶。 9 –with-select_module –without-select_module 啟用或禁用構建一個模塊來允許服務器使用select()方法。該模塊將自動建立,如果平台不支持的kqueue,epoll,rtsig或/dev/poll。 10 –with-poll_module –without-poll_module 啟用或禁用構建一個模塊來允許服務器使用poll()方法。該模塊將自動建立,如果平台不支持的kqueue,epoll,rtsig或/dev/poll。 11 –without-http_gzip_module — 不編譯壓縮的HTTP服務器的響應模塊。編譯並運行此模塊需要zlib庫。 12 –without-http_rewrite_module 不編譯重寫模塊。編譯並運行此模塊需要PCRE庫支持。 13 –without-http_proxy_module — 不編譯http_proxy模塊。 14 –with-http_ssl_module — 使用https協議模塊。默認情況下,該模塊沒有被構建。建立並運行此模塊的OpenSSL庫是必需的。 15 –with-pcre=path — 設置PCRE庫的源碼路徑。PCRE庫的源碼(版本4.4 – 8.30)需要從PCRE網站下載並解壓。其余的工作是Nginx的./ configure和make來完成。正則表達式使用在location指令和 ngx_http_rewrite_module 模塊中。 16 –with-pcre-jit —編譯PCRE包含“just-in-time compilation”(1.1.12中, pcre_jit指令)。 17 –with-zlib=path —設置的zlib庫的源碼路徑。要下載從 zlib(版本1.1.3 – 1.2.5)的並解壓。其余的工作是Nginx的./ configure和make完成。ngx_http_gzip_module模塊需要使用zlib 。 18 –with-cc-opt=parameters — 設置額外的參數將被添加到CFLAGS變量。例如,當你在FreeBSD上使用PCRE庫時需要使用:–with-cc-opt=”-I /usr/local/include。.如需要需要增加 select()支持的文件數量:–with-cc-opt=”-D FD_SETSIZE=2048″. 19 –with-ld-opt=parameters —設置附加的參數,將用於在鏈接期間。例如,當在FreeBSD下使用該系統的PCRE庫,應指定:–with-ld-opt=”-L /usr/local/lib”.
執行configure成功后進行安裝:
make && make install
要驗證Nginx是否安裝成功了,可以切換到Nginx的安裝目錄(我的是「/home/reetsee/environment/nginx」),然后啟動Nginx:
./sbin/nginx
然后你在瀏覽器中訪問你的機器的IP地址(有公網IP的可以訪問公網IP,沒有的可以打開CentOS的瀏覽器然后訪問「127.0.0.1」),是不是就看到很漂亮的「Welcome to nginx!」了?如果你訪問時出現「403 Forbidden」,那么極其有可能你的nginx下的html所在的絕對路徑中的某些文件夾的權限沒有r或者x,你是否將Nginx安裝到你的個人文件夾下了?例如你的用戶名叫「abc」,然后你安裝到了「/home/abc」下的子目錄中?如果是的話,那就是權限不夠了,因為Nginx的worker進程默認用戶為「nobody」。
解決方法有3個:
- 一個是把Nginx安裝到其它目錄,可以查看到效果(安裝到其它目錄后,記得先把原本運行的Nginx給kill掉);
- 第二個是將沒有權限的目錄加上r和x權限;
- 第三個是在nginx安裝目錄下編輯「conf/nginx.conf」,將「#user nobody」改為「user root」
- 但是極其不建議使用第2種以及第3種方法,因為這樣會有安全風險,如果你正在使用虛擬機測試或者僅僅是試用一下機器驗證一下效果,那么就可以使用上面任何3種方法。
- 下面就讓Nginx通過PHP的FastCGI處理請求,首先到nginx的安裝目錄下,修改「conf/nginx.conf」文件,找到如下內容:
1 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 2 # 3 #location ~ \.php$ { 4 # root html; 5 # fastcgi_pass 127.0.0.1:9000; 6 # fastcgi_index index.php; 7 # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; 8 # include fastcgi_params; 9 #}
將第3~第7個「#」去掉,就是取消注釋,同時將「/scripts$fastcgi_script_name」改為「$document_root$fastcgi_script_name」,即變為下面這樣:
1 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 2 # 3 location ~ \.php$ { 4 root html; 5 fastcgi_pass 127.0.0.1:9000; 6 fastcgi_index index.php; 7 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 8 include fastcgi_params; 9 }
使用vim的列操作可以很快去掉它們。
在nginx的安裝目錄下,新增一個PHP文件「html/index.php」,文件內容如下:
<?php
echo phpinfo();
?>
接下來就啟動php-fpm以及重啟nginx:
/home/reetsee/environment/php/sbin/php-fpm #啟動php-fpm /home/reetsee/environment/nginx/sbin/nginx -s reload #重啟nginx
然后打開瀏覽器,訪問一下「機器ip/index.php」,例如「127.0.0.1/index.php」,如果你看到PHP的輸出信息了~恭喜就成功啦~那么Nginx的安裝完成了。效果圖如下:

圖中的藍色框內如果出現了php.ini,就證明加載php.ini配置文件成功了。
如果你失敗了歡迎留言。
另外是關於nginx.conf中的「127.0.0.1:9000」,這個其實是php-fpm的監聽端口,是可以在php-fpm.conf中設置的。沒有特殊需要使用默認即可。
安裝MySQL
現在到最麻煩的一步了——安裝MySQL。
說它麻煩是第一個是因為自從Orcale把MySQL收過來后到它的官網上下載一個MySQL就費力了不少,要找很久才能找到想要的下載連接,而且現在你上官網,不翻牆很有可能找不到下載連接! 我就是這樣被坑了很久,我以為是官網網頁出BUG了,當選擇MySQL的版本時,對應的下載列表並沒有更新,后來查看了一些網頁的源碼發現網頁中使用了部 分來自Google域名下的js,而最近Google在中國被全面封殺,開了GoAgent重新連接才把列表正常刷出來了(說句題外話最近GoAgent 也有點不好使了)。
第二個是因為MySQL安裝后要設置的東西蠻多的,當時我也摸索了比較久。強烈建議大家也摸索一下MySQL的安裝以及初始配置,在官方文檔中有非常詳細的介紹。我選擇MySQL5.5就是因為官網明確了這個版本是肯定在CentOS 6.x運行的
1 #!/bin/bash 2 3 echo_red(){ 4 echo -e "\033[31m [ $1 ] \033[0m" 5 } 6 yum install yum-utils 7 yum-complete-transaction --cleanup-only 8 package-cleanup --dupes 9 package-cleanup --problems 10 yum -y update 11 12 MYSQL_DIR=/usr/local/mysql 13 MYSQL_SRC=/usr/local/src 14 DATA_DIR=/data/mysql 15 16 #check development tools requried by mysql 17 #echo -e "\033[31m [ Checking for gcc...... ] \033[0m" 18 echo_red "Checking for gcc......" 19 #rpm -qa|grep gcc-[0-9] || yum install gcc && echo -e "\033[32m GCC installed \033[0m" 20 rpm -qa|grep gcc-[0-9] || yum install gcc && echo_red "Gcc install" 21 #echo -e "\033[31m [ Checking for gcc-c++......] \033[0m" 22 echo_read "Checking for gcc-c++......" 23 #rpm -qa|grep gcc-c++ || yum install gcc-c++ && echo -e "\033[32m GCC-C++ installed \033[0m" 24 rpm -qa|grep gcc-c++ || yum install gcc-c++ && echo_red "GCC-C++ installed" 25 26 #echo -e "\033[31m [ Checking for bison...... ] \033[0m" 27 echo_red "Checking for bison..." 28 #rpm -qa|greo bison || yum install bison && echo -e "\033[32m BISON installed \033[0m" 29 rpm -qa|greo bison || yum install bison && echo_red "BISON installed" 30 31 #echo -e "\033[31m [ Checking for ncurses...... ] \033[0m" 32 echo_red "Chking for ncurses..." 33 #rpm -qa|grep ncurses || yum install ncurses && echo -e "\033[32m NCURSES installed \033[0m" 34 rpm -qa|grep ncurses || yum install ncurses && echo_red "NCURSES installed" 35 36 #echo -e "\033[31m [ Checking for ncurses-devel...... ] \033[0m" 37 read_red "Checking for ncurses-devel..." 38 #rpm -qa|grep ncurses-devel || yum install ncurses-devel && echo -e "\033[32m NCURSES-DEVEL installed \033[0m" 39 rpm -qa|grep ncurses-devel || yum install ncurses-devel && echo_red "NCURSES-DEVEL installed" 40 41 #echo -e "\033[31m [ Checking for wget...... ] \033[0m" 42 echo_red "Checking for wget..." 43 #rpm -qa|grep wget||yum -y install wget && echo -e "\033[32m wget installed \033[0m" 44 rpm -qa|grep wget||yum -y install wget && echo_red "wget installed" 45 46 # check if already installed mysql, if exists ,remove it 47 rpm -qa|grep mysql 48 if [ $? -eq 0 ];then 49 yum remove mysql mysql-server -y 50 echo "" 51 #echo "\033[32m Mysql already removed \033[0m" 52 echo_red "Mysql already removed..." 53 echo "" 54 else 55 #echo "\033[32m Mysql does not exist \033[0m" 56 echo_red "Mysql does not exist" 57 fi 58 #check user mysql exists or not 59 id mysql > /dev/null 2>&1 60 if [ $? -eq 0 ];then 61 echo "" 62 #echo -e "\033[31m User mysql exists,now remove it;and add a new acount \033[0m" 63 echo_red "User mysql exists,now remove it;and add a new acount" 64 /usr/sbin/userdel -r mysql 65 /usr/sbin/groupadd -g 3306 mysql 66 /usr/sbin/useradd -u 3306 -g mysql -M -s /sbin/nologin mysql 67 #echo -e "\033[32m User mysql created \033[0m" 68 echo_red "User mysql created" 69 else 70 echo "" 71 #echo -e "\033[31m User mysql does not exists ,now we will create it \033[0m" 72 echo_red "User mysql dose not exists,now we will create it" 73 /usr/sbin/groupadd -g 3306 mysql 74 /usr/sbin/useradd -u 3306 -g mysql -M -s /sbin/nologin mysql 75 #echo -e "\033[32m User mysql created \033[0m" 76 echo_red "User mysql created" 77 fi 78 79 #yum remove mysql 2>/mnt/error.log 80 #yum install gcc* gcc-c++ ncurses-devel* bison wget 81 82 #Download and install cmake for mysql 5.5 or newer distribution 83 cd $MYSQL_SRC 84 #echo -e "\003[32m Beginning download...... \033[0m" 85 echo_red "Beginning download..." 86 wget http://www.cmake.org/files/v2.8/cmake-2.8.5.tar.gz 87 #echo -e "\033[31m Download Ended \033[0m" 88 echo_red "Download Ended" 89 echo "" 90 #echo -e "\033[32m Beginning uncompress and install......\033[0m" 91 echo_red "Beginning uncompress and install..." 92 tar -xzvf cmake-2.8.5.tar.gz 93 cd cmake-2.8.5 94 ./configure 95 make && make install 96 #echo -e "\033[31m Install Ended \033[0m" 97 echo_red "Install Ended" 98 99 100 #Download and install mysql tarball 101 cd $MYSQL_SRC 102 #echo -e "\033[32m Beginning download...... \033[0m" 103 echo_red "Beginning download..." 104 wget http://dev.mysql.com/Downloads/MySQL-5.5/mysql-5.5.27.tar.gz 105 #echo -e "\033[31m DownloadE Ended \033[0m" 106 echo_red "Download Ended" 107 echo "" 108 #echo -e "\033[32m Beginning uncompress and install...... \033[0m" 109 echo_red "Beginning uncompress and install..." 110 tar -zxf mysql-5.5.27.tar.gz 111 cd mysql-5.5.27 112 cmake -DCMAKE_INSTALL_PREFIX=$MYSQL_DIR -DMYSQL_DATADIR=$DATA_DIR/data -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWTIH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DENABLED_LOCAL_INFILE=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DMYSQL_TCP_PORT=3306 113 make && make install 114 #echo -e "\033[31m Install Ended \033[0m" 115 echo_red "Install Ended" 116 117 # now configure you installation 118 mkdir -p $DATA_DIR/data 119 mkdir -p $DATA_DIR/log 120 chown -R mysql:mysql $DATA_DIR 121 chmod -R 755 $DATA_DIR 122 123 # use my-medium.cnf as my.cnf 124 cp support-files/my-medium.cnf /etc/my.cnf 125 126 #initialized database 127 $MYSQL_DIR/scripts/mysql_install_db --user=mysql --basedir=$MYSQL_DIR --datadir=$DATA_DIR/data 128 129 # use mysql.server as mysqld 130 cp support-files/mysql.server /etc/init.d/mysqld 131 chmod +x /etc/init.d/mysqld 132 133 # set mysql as system service and start when system boot 134 /sbin/chkconfig --add mysqld 135 /sbin/chkconfig mysqld on 136 137 138 # create soft links 139 cd /usr/local/bin 140 ln -s /usr/local/mysql/bin/mysql mysql && 141 ln -s /usr/local/mysql/bin/mysqldump mysqldump && 142 ln -s /usr/local/mysql/bin/mysqladmin mysqladmin 143 144 #echo "Start the mysql service" 145 echo_red "Start the mysql service" 146 service mysqld start 147 148 #echo -e "\033[31m You have installed mysql successfull " 149 echo_red "You have installed mysql successfull" 150 #echo -e "\033[32m END END END END \033[0M" 151 echo_red "END..........................................................................................................."
最后就是給MySQL數據庫里的「root」賬號一個密碼:
./bin/mysqladmin -u root password '123abc'
里面的「123abc」替換成你自己想要設置的密碼即可。要注意的是這個MySQL的root不是指操作系統的root,而是指這個數據庫管理系統的root,以后我們就可以使用這個賬號對數據庫進行添加用戶、賦予權限等操作,所以一定要設置一個密碼。
至此,繁瑣的MySQL安裝就所剩無幾了!Congratulations!
最后還有幾件事要做:
- 使用「root」賬戶進入MySQL管理系統中;
- 在MySQL內創建一個叫做「hello」的賬號,為它設置密碼;
- 在MySQL內建立一個名為「hello_db」的數據庫,然后讓「hello」賬號擁有對「hello_db」數據庫的完全操作權限;
- 退出MySQL管理系統,使用「hello」賬戶進入MySQL管理系統中;
- 在「hello_db」數據庫中創建一張名為「hello_table」的表,在里面插入一條數據;
- 編寫一個簡單的PHP文件,通過瀏覽器的訪問將上面一步中插入的數據顯示在網頁上。
當我們完成最后的這幾件事,就真正宣告LNMP搭建成功,所有東西都能串起來了!
MySQL與用戶創建、權限賦予的相關操作,請參見官方文檔的賬戶管理部分。下面主要使用的MySQL指令是「CREATE USER」以及「GRANT」。
使用「root」賬戶進入MySQL管理系統中:
./bin/mysql -u root -p
在MySQL內創建一個叫做「hello」的賬號,為它設置密碼:
在mysql中輸入以下語句:
1 CREATE USER 'hello'@'localhost' IDENTIFIED BY '123456';
在使用MySQL語句時,有個好習慣是對於命令的保留字使用全大寫的形式,這樣語句會更好的易讀性。上面的「123456」是密碼,替換成你自己的密碼即可。
在上面的「@localhost」是有經過一些考慮,目前對於我們來說,我們的MySQL和PHP部署的機器是一樣的,因此PHP通過 localhost就可以訪問數據庫。因此我們希望只有本地的連接可以訪問數據庫,來自其它IP或者域名的連接不能訪問數據庫,這樣做的好處是即便你的密 碼泄露了,入侵者也無法直接通過網絡來操作數據庫,除非你的機器登陸密碼被入侵者知道了,他才能夠直接登陸到你的機器,然后通過localhost訪問數 據庫。
如果你將「@localhost」替換成「@127.0.0.1」,那么只有IP為127.0.0.1的連接才能夠訪問數據庫。如果你不想對連接進行過濾,所有連接都能夠訪問到數據庫,那么你上網查資料應該替換成什么吧,我不會告訴你的:)
在MySQL內建立一個名為「hello_db」的數據庫,然后讓「hello」賬號擁有對「hello_db」數據庫的完全操作權限:
首先是創建數據庫「hello_db」:
CREATE DATABASE hello_db;
然后是讓「hello」賬號擁有對「hello_db」數據庫的完全操作權限:
GRANT ALL ON hello_db.* TO 'hello'@'localhost';
上面的「ALL」即所有權限,「hello_db.*」即權限是針對hello_db下的所有表,「‘hello’@‘localhost’」即來自localhost的名為「hello」的用戶。
退出MySQL管理系統,使用「hello」賬戶進入MySQL管理系統中:
先退出:
exit;
然后以「hello」賬號進入MySQL:
./bin/mysql -u hello -p
輸入密碼后即可。
在「hello_db」數據庫中創建一張名為「hello_table」的表,在里面插入一條數據:
使用「hello_db」數據庫:
USE hello_db;
建一張名為「hello_table」的表(下面普通的換行不會執行語句,MySQL在換行時檢測到分號「;」才會執行語句):
CREATE TABLE `hello_table`( `id` INT(10) PRIMARY KEY NOT NULL AUTO_INCREMENT, `content` VARCHAR(256) DEFAULT 'Hello LNMP!' );
注意!上面對於表名如「hello_table」,列名如「id」和「content」,它們使用的引號是反引號「`」,不是單引號。
這樣一張表就建立好了,通過命令「SHOW TABLES」就可以看到。然后就是往里面插入一條數據:
INSERT INTO `hello_table` (`id`, `content`) VALUES(1, 'Hello World! Hello LNMP!');
出現 「Query OK, 1 row affected」就證明成功了!
編寫一個簡單的PHP文件,通過瀏覽器的訪問將上面一步中插入的數據顯示在網頁上:
切換到Nginx安裝目錄下的「html」文件夾:
cd /home/reetsee/environment/nginx/html/
新建一個名為「lnmp.php」的文件,內容如下:
1 <?php 2 $con = mysqli_connect('localhost:3306', 'hello', '123456', 'hello_db'); 3 4 //檢查連接是否出錯 5 if (mysqli_connect_errno($con)) { 6 echo 'Failed to connect to MySQL: ' . mysqli_connect_error() . "\n"; 7 die("Connect to database failed.\n"); 8 } 9 10 //執行讀取數據的語句 11 $query = 'SELECT `id`, `content` FROM `hello_table` WHERE `id`=1;'; 12 $result = mysqli_query($con, $query); 13 $row = mysqli_fetch_array($result, MYSQLI_ASSOC); 14 15 //輸出結果 16 echo $row['content']; 17 18 //關閉連接 19 mysqli_close($con); 20 ?>
里面的用戶名、密碼等替換成自己的。沒用過PHP的同學要留意PHP中雙引號和單引號的含義是不同的。注意上面在初始化連接時的端口號「3306」不能少呀。
保存后將這個文件的權限設置為755,即執行命令「chmod 755 lnmp.php」。
接下來就打開瀏覽器,訪問一下「127.0.0.1/lnmp.php」,是不是就看到了萬眾期待的「Hello World! Hello LNMP!」?效果如下:
安裝Nginx的過程中,nginx.conf中有一行fastcgi_pass,里面指定通過TCP/IP協議進行通信的,如果你的Nginx與PHP 是部署在同一台機器(即非分布式部署,就像這篇博文所說的那樣部署),可以使用Unix域套接字進行通信,據說性能會有一點點提高。
把LNMP環境搭建起來后,可玩性就很強了,例如在上面放一個WordPress(安裝快到沒朋友),或者在上面搭建其它你喜歡的應用和服務
