LNMP一體式部署
常見的Web框架結構比如:LNMP和LAMP
L=Linux N=nginx A=apache M= MySQL P=php T=Tomcat
Nginx和Apache都是Web應用伺服器,Nginx處理靜態資料快,Apache處理動態快;Nginx對系統資源佔用小,Apache對系統資源佔用高;Nginx用的是epoll模型,Apache用的是select模型
LNMP組合的工作流程:
在LNMP組合工作時,首先是使用者通過瀏覽器輸入域名請求 Nginx Web服務,(使用者通過瀏覽器發過來的請求資料包是http格式的資料包,特點是格式很鬆散,因此解析的速度慢,但是資料包比fastcgi格式資料包小,省頻寬
如果請求是靜態資源(location /{ 過濾),worker程序,去網頁目錄根據URL的uri部分去拿網頁(即磁碟I/O讀寫)讀取到記憶體裡,則由Nginx解析返回給使用者;
注:使用者的請求一定是遵循HTTP協議的,因為是通過瀏覽器過來的(80埠)
Nginx和Apache其實一樣,如果沒有PHP支援,那麼都處理不了所謂的動態請求。他們自身其實都只能處理靜態(圖片、視訊、html網頁)。只是Apache轉發動態資料包的速度快,但是隻是單個包的速度,Apache併發低
網頁位置可以寫在location外,也就是server裡,對全部的location生效
如果是動態請求(.php結尾),那麼Nginx客戶端就會把它通過FastCGI介面將請求由FastCGI的客戶端Nginx推送到FastCGI的服務端PHP-fpm(監聽9000埠)(介面規則=快速介面,fastcgi資料包這種規則的資料包 格式非常嚴謹,因此,PHP解析的速度非常快,但是越嚴謹的資料包越大,所以fastcgi資料包大小要絕對大於http資料包)(生產常用方法)傳送給PHP引擎服務(FastCGI程序php-fpm)解析器(php.ini)進行解析。在這個階段進行了資料包的格式轉換,不再是和http請求了,而是轉換成fastcgi格式的資料包,為了加快PHP的解析速度
先把動態網頁讀到記憶體裡,用PHP(php.ini)解析器執行這段程式碼,也就是執行sql語句將程式碼轉換為想要的資料,資料將這部分程式碼覆蓋,動態網頁變成靜態網頁。開發的程式碼實現的遠端去找mysql,和運維是沒關係的
具體實施:
location ~* \.(php|php5)${
index index.php index.htmp index.htmpl;
{
fastcgi_pass 127.0.0.1:9000(如果是本地部署的話)
修改配置檔案,將監聽本地的改成監聽IP的(如果是監聽遠端的)
注:作為客戶端client的fastcgi_pass(Nginx安裝包包含)和作為server端的PHP-fpm (PHP安裝包包含)服務端為socket程序,監聽9000埠,因為經常用所以fastcgi_pass和Nginx合併而且PHP-fpm和PHP功能合併了。
監聽IP允許遠端訪問,監聽127是與允許本地訪問
PHP不用修改配置,找的網頁和Nginx一樣的
分散式部署兩邊各有一個網頁,不會出現衝突;但是部署在一臺,最好程式使用者設定成同一個使用者,不然會造成資源分配的問題等。
Nginx和PHP各有其各自的資源空間,優化包括安全優化和效能優化,效能優化往往是記憶體
如果這個動態請求要讀取資料庫資料,那麼PHP就會繼續向後請求MySQL資料庫,以讀取需要的資料,並最終通過Nginx服務把獲取的資料返回給使用者,這就是LNMP環境的基本請求順序流程。這個請求流程是企業使用LNMP環境的常用流程。
注:靜態網頁是檔案實體
動態網頁也是檔案實體的,只是他的實體是程式碼(JS語言,前臺語言;PHP程式碼,後臺語言)動態網頁由實體檔案index.php(放在記憶體中),通過JS語言到資料庫取得資料,並寫回index.php檔案,再打包給使用者(程式碼不放在儲存中)
程式碼是不往儲存裡放的,不做備份,NFS保證安全的合適圖片和視訊,所以單獨掛;像網頁的檔案等都是直接在web伺服器本地的。PHP需不需要掛儲存?如果是讀網頁,是不需要掛儲存的,但是如果是使用者上傳的話是需要掛儲存的
分離式部署中,NGINX伺服器和PHP伺服器上網頁、程式碼必須兩者都有,否則會觸發404
LNMP的部署方式分為兩種:
全部部署在一臺上 |
LNMP |
全部不在一臺上 |
N+P+M |
只分離MySQL |
NP+M |
一、部署LNMP(將Nginx和PHP的程式使用者設為同一個)
1 安裝Nginx
[[email protected] ~]# tar xf nginx-1.10.2.tar.gz -C /usr/src/
[[email protected] ~]# cd /usr/src/nginx-1.10.2/
[[email protected] ~]# mount /dev/sr0 /media/cdrom
[[email protected] nginx-1.10.2]# yum -y install pcre-devel openssl-devel
[[email protected] nginx-1.10.2]# useradd -s /sbin/nologin -M www //建立程式使用者
[[email protected] nginx-1.10.2]# ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
[[email protected] nginx-1.10.2]# make && make install
[[email protected] nginx-1.10.2]# ln -s /usr/local/nginx/sbin/* /usr/local/sbin/
[[email protected] conf]# cd /usr/local/nginx/conf/
[[email protected] conf]# egrep -v "#|^$" nginx.conf.default > nginx.conf
[[email protected] conf]# vim nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name www.yunjisuan.com;
location / {
root html/www;
index index.html index.htm;
}
}
}
!Nginx編譯安裝完畢
2 安裝MySQL(PHP需要MySQL的支援環境)
# 建立mysql使用者的賬號
[[email protected] ~]# groupadd mysql
[[email protected] ~]# useradd -s /sbin/nologin -g mysql -M mysql
[[email protected] ~]# tail -1 /etc/passwd
mysql:x:501:501::/home/mysql:/sbin/nologin
[[email protected] ~]# id mysql
uid=501(mysql) gid=501(mysql) groups=501(mysql)
# 採用二進位制方式安裝MySQL
[[email protected] ~]# tar xf mysql-5.5.32-linux2.6-x86_64.tar.gz -C /usr/local/
[[email protected] ~]# cd /usr/local/
[[email protected] local]# mv mysql-5.5.32-linux2.6-x86_64 mysql-5.5.32
[[email protected] local]# ln -s mysql-5.5.32 mysql
[[email protected] local]# ls
bin games lib libexec mysql-5.5.32 sbin src
etc include lib64 mysql nginx share
[[email protected] local]# cd /usr/local/mysql
[[email protected] mysql]# ls
bin data include lib mysql-test scripts sql-bench
COPYING docs INSTALL-BINARY man README share support-files
#提示:
二進位制安裝包,僅需要解壓就可以了,不需要執行cmake/configure,make,make install等過程
注意:
- #當安裝LNMP一體化環境時,MySQL資料庫要裝在Nginx所在的機器上。如果MySQL和Nginx不在一臺機器上,那麼,Nginx伺服器上的MySQL資料庫軟體包只要解壓移動到/usr/local/目錄,改名為mysql就可以了,不需要進行後面的初始化配置。
- #在非一體的LNMP環境(Nginx和MySQL不在一臺機器上),編譯PHP環境時,也是需要MySQL資料庫環境的,但是高版本的PHP,例如5.3版本以上,內建了PHP需要的MySQL程式,因此,對於此類版本就不需要在Nginx伺服器上安裝MySQL軟體了,只需要在編譯PHP時指定相關引數即可。這個PHP的編譯引數為--with-mysql=mysqld,表示PHP程式在編譯時會呼叫內建的MySQL的庫。
#初始化 MySQL配置檔案my.cnf
[[email protected] mysql]# cd /usr/local/mysql
[[email protected] mysql]# ls -l support-files/*.cnf
-rw-r--r-- 1 7161 wheel 4691 Jun 19 2013 support-files/my-huge.cnf
-rw-r--r-- 1 7161 wheel 19759 Jun 19 2013 support-files/my-innodb-heavy-4G.cnf
-rw-r--r-- 1 7161 wheel 4665 Jun 19 2013 support-files/my-large.cnf
-rw-r--r-- 1 7161 wheel 4676 Jun 19 2013 support-files/my-medium.cnf
-rw-r--r-- 1 7161 wheel 2840 Jun 19 2013 support-files/my-small.cnf
[[email protected] mysql]# /bin/cp support-files/my-small.cnf /etc/my.cnf
提示:
- support-files下有my.cnf的各種配置樣例。
- 使用cp全路徑/bin/cp,可實現拷貝而不出現替換提示,即如果有重名檔案會直接覆蓋
- 本例為測試安裝環境,因此選擇引數配置小的my-small.cnf配置模版,如果是生產環境可以根據硬體選擇更高階的配置檔案,上述配置檔案模版對硬體的要求從低到高依次為:
1. my-medium.cnf (最低)
2. my-small.cnf
3. my-large.cnf
4. my-huge.cnf
5. my-innodb-heavy-4G.cnf(最高)
# 初始化MySQL資料庫檔案
[[email protected] ~]# mkdir -p /usr/local/mysql/data //建立MySQL資料檔案目錄
[[email protected] ~]# chown -R mysql.mysql /usr/local/mysql //授權mysql使用者管理MySQL的安裝目錄
[[email protected] ~]# yum -y install libaio //光碟源安裝依賴包,否則下一步的編譯會報錯
[[email protected] ~]# /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
#初始化MySQL資料庫檔案,會有很多資訊提示,如果沒有ERROR級別的錯誤,會有兩個OK的字樣,表示初始化成功,否則就要解決初始化的問題
以上命令的主要作用是在/usr/local/mysql/data/目錄下生成MySQL正確執行所必需的基本資料庫檔案,其功能是對MySQL許可權,狀態等進行管理。
# 初始化故障排錯集錦
錯誤示例1:
usr/local/mysql/bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared ob
#錯誤原因是沒有libaio函式庫的支援。需要
yum -y install libaio
錯誤示例2:
WARNING:The host'mysql'could not be looked up with resolveip
#需要修改主機名解析,使其和uname -n一樣,修改後的結果如下:
[[email protected] ~] # grep `uname -n` /etc/hosts
錯誤示例3
ERROR:1004Can't create file '/tmp/#sql300e_1_o.frm'(errno:13)
#原因是/tmp目錄的許可權有問題。
解決辦法為處理/tmp目錄,如下:
[[email protected] ~]# ls -ld /tmp
drwxrwxrwt. 3 root root 4096 Jul 14 07:56 /tmp
[[email protected] ~]# chmod -R 1777 /tmp/
```
此故障必須解除,否則,後面會出現登陸不了資料庫等問題。
#配置並啟動MySQL資料庫(PHP安裝需要先有mysql環境,不然php會報錯)
(1) 設定MySQL啟動指令碼
[[email protected] mysql]# /bin/cp support-files/mysql.server /etc/init.d/mysqld //拷貝MySQL啟動指令碼到MySQL的命令路徑
[[email protected] mysql]# chmod +x /etc/init.d/mysqld //使指令碼可執行
(2)MySQL二進位制預設安裝路徑是/usr/local/mysql,啟動腳本里是/usr/local/mysql。如果安裝路徑不同,那麼腳本里路徑等都需要替換
(3)啟動MySQL資料庫,命令如下:
[[email protected] mysql]# /etc/init.d/mysqld start
Starting MySQL........ SUCCESS!
以上是啟動資料庫的規範方法之一,但還可以用如下方式啟動,
/usr/local/mysql/bin/mysqld_safe --user=mysql &
這個命令結尾的“&”符號,作用是在後臺執行MySQL服務,命令執行完還需要按下回車才能進入命令列狀態。
(4)檢查MySQL資料庫是否啟動,命令如下:
[[email protected] mysql]# netstat -antup | grep mysql
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 4037/mysqld
如果發現3306埠沒起來,請tail -100 /usr/local/mysql/data/主機名.err檢視日誌資訊,看是否有報錯資訊,然後根據相關錯誤提示進行除錯。經常檢視服務執行日誌是個很好的習慣,也是高手的習慣。
(5)檢視MySQL資料庫啟動結果日誌,命令如下:
[[email protected] mysql]# tail -10 /usr/local/mysql/data/zhangminagjuan.err InnoDB: Creating foreign key constraint system tables
InnoDB: Foreign key constraint system tables created
181127 19:08:47 InnoDB: Waiting for the background threads to start
181127 19:08:48 InnoDB: 5.5.32 started; log sequence number 0
181127 19:08:48 [Note] Server hostname (bind-address): '0.0.0.0'; port: 3306
181127 19:08:48 [Note] - '0.0.0.0' resolves to '0.0.0.0';
181127 19:08:48 [Note] Server socket created on IP: '0.0.0.0'.
181127 19:08:48 [Note] Event Scheduler: Loaded 0 events
181127 19:08:48 [Note] /usr/local/mysql/bin/mysqld: ready for connections.
Version: '5.5.32' socket: '/tmp/mysql.sock' port: 3306 MySQL Community Server (GPL)
(6)設定MySQL開機自啟動,命令如下:
[[email protected] mysql]# chkconfig --add mysqld
[[email protected] mysql]# chkconfig mysqld on
[[email protected] mysql]# chkconfig --list mysqld
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
提示:也可以將啟動命令/etc/init.d/mysqld start 放到/etc/rc.local裡面
(7)配置mysql命令的全域性使用路徑,命令如下:
[[email protected] mysql]# ln -s /usr/local/mysql/bin/* /usr/local/bin/
[[email protected] mysql]# which mysqladmin
/usr/local/bin/mysqladmin
#MySQL安全配置
為MySQL的root使用者設定密碼,命令如下:
[[email protected] mysql]# mysqladmin -u root password '666666'
[[email protected] mysql]# mysql -uroot -p666666
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.32 MySQL Community Server (GPL)
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
3 LNMP之PHP(FastCGI方式)服務的安裝和準備
# 檢查Nginx及MySQL的安裝情況
[[email protected] ~]# ls -ld /usr/local/nginx //檢查確認Nginx及MySQL的安裝路徑
drwxr-xr-x 6 root root 4096 Nov 27 16:47 /usr/local/nginx
[[email protected] ~]# ls -ld /usr/local/mysql
lrwxrwxrwx 1 mysql mysql 12 Nov 27 18:48 /usr/local/mysql -> mysql-5.5.32
[[email protected] ~]# netstat -antup | grep -E "80|3306" //檢查埠及啟動情況
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 4037/mysqld
測試訪問Nginx及mysql是否OK,
是不是能curl通
能不能登入mysql
#檢查安裝PHP所需的lib庫
[[email protected] ~]# rpm -qa zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel
zlib-devel-1.2.3-29.el6.x86_64
[[email protected] ~]# rpm -qa freetype-devel libpng-devel gd libcurl-devel libxslt-devel
- 注:每個lib一般都會存在對應的以“*-devel”命名的包,安裝lib對應的-devel包後,對應的lib包就會自動安裝好,例如安裝gd-devel時就會安裝gd。
- 這些lib庫不是必須安裝的,但是目前的企業環境下一般都需要安裝。否則,PHP程式執行時會出現問題,例如驗證碼無法顯示等。
執行下面命令安裝相關的lib軟體包
[[email protected] ~]# yum -y install zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel
[[email protected] ~]# yum -y install freetype-devel libpng-devel gd libcurl-devel libxslt-devel
安裝後的結果如下:
[[email protected] ~]# rpm -qa zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel
libjpeg-turbo-devel-1.2.1-1.el6.x86_64
zlib-devel-1.2.3-29.el6.x86_64
libxml2-devel-2.7.6-14.el6.x86_64
1. #這裡僅缺少libiconv-devel包 因為預設的yum源沒有此包,後面會編譯安裝。
[[email protected] ~]# rpm -qa freetype-devel libpng-devel gd libcurl-devel libxslt-devel
libxslt-devel-1.1.26-2.el6_3.1.x86_64
gd-2.0.35-11.el6.x86_64
libpng-devel-1.2.49-1.el6_2.x86_64
libcurl-devel-7.19.7-37.el6_4.x86_64
freetype-devel-2.3.11-14.el6_3.1.x86_64
#安裝yum無法安裝的libiconv庫
[[email protected] libiconv-1.14]# tar xf libiconv-1.14.tar.gz -C /usr/src/
[[email protected] libiconv-1.14]# cd /usr/src/libiconv-1.14/
[[email protected] libiconv-1.14]# ./configure --prefix=/usr/local/libiconv && make && make install
安裝libmcrypt庫
推薦使用簡單的線上yum的方式安裝:wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
編譯安裝過程略
[[email protected] yum.repos.d]# yum -y install libmcrypt-devel
#開始安裝PHP(FastCGI方式)服務
1. [[email protected] ~]# tar xf php-5.3.28.tar.gz -C /usr/src/
2. [[email protected] ~]# cd /usr/src/php-5.3.28/
3. [[email protected] php-5.3.28]# ./configure \
4. > --prefix=/usr/local/php5.3.28 \ #表示指定PHP的安裝路徑為/usr/local/php5.3.28
5. > --with-mysql=/usr/local/mysql \ #表示需要指定MySQL的安裝路徑,安裝PHP需要的MySQL相關內容。當然,如果沒有MySQL軟體包,也可以不單獨安裝,這樣的情況可使用--with-mysql=mysqlnd替代--with- mysql=/usr/local/mysql,因為PHP軟體裡已經自帶了連線MySQL的客戶端工具。
6. > --with-iconv-dir=/usr/local/libiconv \
7. > --with-freetype-dir \
8. > --with-jpeg-dir \
9. > --with-png-dir \
10. > --with-zlib \
11. > --with-libxml-dir=/usr \
12. > --enable-xml \
13. > --disable-rpath \
14. > --enable-safe-mode \
15. > --enable-bcmath \
16. > --enable-shmop \
17. > --enable-sysvsem \
18. > --enable-inline-optimization \
19. > --with-curl \
20. > --with-curlwrappers \
21. > --enable-mbregex \
22. > --enable-fpm \
23. > --enable-mbstring \
24. > --with-mcrypt \
25. > --with-gd \
26. > --enable-gd-native-ttf \
27. > --with-openssl \
28. > --with-mhash \
29. > --enable-pcntl \
30. > --enable-sockets \
31. > --with-xmlrpc \
32. > --enable-zip \
33. > --enable-soap \
34. > --enable-short-tags \
35. > --enable-zend-multibyte \
36. > --enable-static \
37. > --with-xsl \
38. > --with-fpm-user=www \ #nginx表示指定PHP-FPM程序管理的使用者為www,此處最好和Nginx服務使用者統一
39. > --with-fpm-group=www \ #表示指定PHP-FPM程序管理的組為www,此處最好與Nginx服務使用者組統一。
40. > --enable-ftp #表示啟用PHP-FPM方式服務,即以FastCGIF方式執行PHP服務。
1. #特別強調:上述每行結尾的換行符反斜線(\)之後不能再有任何字元包括空格
編譯PHP
[[email protected] php-5.3.28]# ln -s /usr/local/mysql/lib/libmysqlclient.so.18
[[email protected] php-5.3.28]# ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib64/
[[email protected] php-5.3.28]# touch ext/phar/phar.phar
[[email protected] php-5.3.28]# make
#make最後的正確提示
Build complete.
Don't forget to run 'make test'.
[[email protected] php-5.3.28]# make install //安裝PHP生成檔案到系統
配置PHP引擎配置檔案php.ini
[[email protected] ~]# ln -s /usr/local/php5.3.28/ /usr/local/php //設定軟連線以方便訪問
[[email protected] ~]# ls -l /usr/local/php
lrwxrwxrwx 1 root root 21 Nov 27 22:24 /usr/local/php -> /usr/local/php5.3.28/
[[email protected] ~]# cd /usr/src/php-5.3.28/ //檢視PHP配置預設模板檔案
[[email protected] php-5.3.28]# ls php.ini*
php.ini-development php.ini-production
[[email protected] php-5.3.28]# cp php.ini-production /usr/local/php/lib/php.ini //拷貝PHP配置檔案到PHP預設目錄,並更改檔名為php.ini
[[email protected] php-5.3.28]# ls -l /usr/local/php/lib/php.ini
-rw-r--r-- 1 root root 69627 Nov 27 22:29 /usr/local/php/lib/php.ini
配置PHP(FastCGI方式)的配置檔案php-fpm.conf
[[email protected] php-5.3.28]# /bin/cp php.ini-production /usr/local/php/lib/php.ini
[[email protected] php-5.3.28]# ls -l /usr/local/php/lib/php.ini
-rw-r--r-- 1 root root 69627 Nov 27 22:33 /usr/local/php/lib/php.ini
[[email protected] php-5.3.28]# cd /usr/local/php/etc/
[[email protected] etc]# ls
pear.conf php-fpm.conf.default
[[email protected] etc]# /bin/cp php-fpm.conf.default php-fpm.conf
關於php-fpm.conf,暫時可用預設的配置,先把服務搭好,以後再進行優化。
啟動PHP服務(FastCGI方式)
[[email protected] etc]# /usr/local/php/sbin/php-fpm //啟動PHP服務php-fpm
[[email protected] etc]# ps -ef | grep php-fpm //檢查PHP服務php-fpm的程序及啟動埠的情況
root 4961 1 0 22:35 ? 00:00:00 php-fpm: master process (/usr/local/php5.3.28/etc/php-fpm.conf)
www 4962 4961 0 22:35 ? 00:00:00 php-fpm: pool www
www 4963 4961 0 22:35 ? 00:00:00 php-fpm: pool www
root 4965 117449 8 22:35 pts/1 00:00:00 grep php-fpm
[[email protected] yum.repos.d]# lsof -i:9000 //預設9000埠提供服務
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
php-fpm 4961 root 7u IPv4 123027 0t0 TCP localhost:cslistener (LISTEN)
php-fpm 4962 www 0u IPv4 123027 0t0 TCP localhost:cslistener (LISTEN)
php-fpm 4963 www 0u IPv4 123027 0t0 TCP localhost:cslistener (LISTEN)
#配置Nginx支援PHP程式請求訪問
修改配置檔案
[[email protected] etc]# cd /usr/local/nginx/conf/
[[email protected] conf]# cp nginx.conf nginx.conf.02
[[email protected] conf]# vim nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name blog.yunjisuan.com;
location / {
root html/blog;
index index.html index.htm;
}
location ~ .*\.(php|php5)?$ {
root html/blog;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
}
}
檢查並啟動Nginx
[[email protected] conf]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[[email protected] conf]# /usr/local/nginx/sbin/nginx -s reload
##此步在生產環境很關鍵,如不提前檢查語法,重啟後發現語法錯誤會導致Nginx無法提供服務,,給使用者訪問體驗帶來不好的影響。
測試LNMP環境生效情況
測試PHP解析的請求是否OK
[[email protected] conf]# cd /usr/local/nginx/html/
[[email protected] html]# mkdir blog
[[email protected] html]# cd blog/ //進入指定的預設站點目錄後,編輯index.php
[[email protected] blog]# echo "<?php phpinfo(); ?>" >yunjisuan.php
調整Windows下的host解析:本地IP 域名blog.yunjisuan.com
開啟瀏覽器,輸入http://blog.yunjisuan.com/test_info.php 即可開啟如下圖所示介面:
表明: 出現上述介面,表示Nginx配合PHP解析已經正常。
針對Nginx請求訪問PHP,然後對PHP連線mysql的情況進行測試
[[email protected] php-5.3.28]# cd /usr/local/nginx/html/
[[email protected] html]# cd blog/
[[email protected] blog]# vim test_info.php //編輯test_mysql.php
<?php
$link_id=mysql_connect('localhost','root','666666');
if($link_id){
echo "mysql successful by juAnne !";
}else{
echo mysql_error();
}
?>
至此,LNMP的組合已基本搭建完畢。當然,我們還沒有做相關優化
4 部署一個blog程式服務
開源部落格程式WordPress介紹
WordPress 是一套利用PHP語言和MySQL資料庫開發的開源免費的blog(部落格,網站)程式,使用者可以在支援PHP環境和MySQL資料庫的伺服器上建立blog站點。它的功能非常強大,擁有眾多外掛,易於擴充功能。其安裝和使用也都非常方便。目前WordPress已經成為搭建blog平臺的主流,很多釋出平臺都是根據WordPress二次開發的,如果你也想像他們一樣擁有自己的blog,可購買網上的域名及空間,然後搭建LNMP環境,部署WordPress程式後就可以輕鬆成就自己的夢想了。
# MySQL資料庫配置準備
[[email protected] ~]# mysql -uroot -p666666 //登陸MySQL資料庫
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 5.5.32 MySQL Community Server (GPL)
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> create database wordpress; #建立一個數據庫,名字為wordpress,用於存放blog資料
Query OK, 1 row affected (0.27 sec)
mysql> show databases like 'wordpress'; #檢視
+----------------------+
| Database (wordpress) |
+----------------------+
| wordpress |
+----------------------+
1 row in set (0.37 sec)
mysql> grant all on wordpress.* to [email protected]'localhost' identified by '666666';
Query OK, 0 rows affected (0.33 sec)
mysql> flush privileges; #重新整理許可權,使得建立使用者生效
Query OK, 0 rows affected (0.28 sec)
mysql> show grants for [email protected]'localhost'; #檢視使用者對應許可權
+------------------------------------------------------------------------------------------------------------------+
| Grants for [email protected] |
+------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'wordpress'@'localhost' IDENTIFIED BY PASSWORD '*B2B366CA5C4697F31D4C55D61F0B17E70E5664EC' |
| GRANT ALL PRIVILEGES ON `wordpress`.* TO 'wordpress'@'localhost' |
+------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.06 sec)
mysql> select user,host from mysql.user; #檢視資料庫裡建立的wordpress使用者
+-----------+----------------+
| user | host |
+-----------+----------------+
| root | 127.0.0.1 |
| root | ::1 |
| | localhost |
| root | localhost |
| wordpress | localhost | #只允許本機通過wordpress使用者訪問資料庫
| | zhangminagjuan |
| root | zhangminagjuan |
+-----------+----------------+
7 rows in set (0.12 sec)
mysql> quit
Bye
# Nginx及PHP環境配置準備
選擇之前配置好的支援LNMP的blog域名對應的虛擬主機,命令如下:
[[email protected] ~]# cd /usr/local/nginx/conf
[[email protected] conf]# vim nginx.conf
server {
listen 80;
server_name blog.yunjisuan.com;
location / {
root html/blog;
index index.php index.html index.htm; #補充一個首頁檔案index.php
}
location ~ .*\.(php|php5)?$ {
root html/blog;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
}
[[email protected] conf]# /usr/local/nginx/sbin/nginx -s reload
獲取WordPress部落格程式,並放置到blog域名對應虛擬主機的站點目錄下,即/usr/local/nginx/html/blog,操作命令如下:
[[email protected] blog]# cd
[[email protected] ~]# cd /usr/local/nginx/html/blog/
[[email protected] blog]# ls #瀏覽www.wordpress.org下載部落格程式
test_info.php test_mysql.php wordpress-4.7.4-zh_CN.tar.gz
[[email protected] blog]# tar xf wordpress-4.7.4-zh_CN.tar.gz #解壓
[[email protected] blog]# ls
test_info.php test_mysql.php wordpress wordpress-4.7.4-zh_CN.tar.gz
[[email protected] blog]# rm -f test_info.php test_mysql.php #刪除無用檔案
[[email protected] blog]# ls
wordpress wordpress-4.7.4-zh_CN.tar.gz
[[email protected] blog]# mv wordpress/* . #把目錄裡的內容移動到blogcom根目錄下
[[email protected] blog]# /bin/mv wordpress-4.7.4-zh_CN.tar.gz /root/ #移走源程式
[[email protected] blog]# ls -l #完整的blog程式內容
total 192
-rw-r--r-- 1 nobody 65534 418 Sep 25 2013 index.php
-rw-r--r-- 1 nobody 65534 19935 Jan 3 2017 license.txt
-rw-r--r-- 1 nobody 65534 6956 Apr 23 2017 readme.html
drwxr-xr-x 2 nobody 65534 4096 Nov 28 01:08 wordpress
-rw-r--r-- 1 nobody 65534 5447 Sep 28 2016 wp-activate.php
drwxr-xr-x 9 nobody 65534 4096 Apr 23 2017 wp-admin
-rw-r--r-- 1 nobody 65534 364 Dec 19 2015 wp-blog-header.php
-rw-r--r-- 1 nobody 65534 1627 Aug 29 2016 wp-comments-post.php
-rw-r--r-- 1 nobody 65534 2930 Apr 23 2017 wp-config-sample.php
drwxr-xr-x 5 nobody 65534 4096 Apr 23 2017 wp-content
-rw-r--r-- 1 nobody 65534 3286 May 25 2015 wp-cron.php
drwxr-xr-x 18 nobody 65534 12288 Apr 23 2017 wp-includes
-rw-r--r-- 1 nobody 65534 2422 Nov 21 2016 wp-links-opml.php
-rw-r--r-- 1 nobody 65534 3301 Oct 25 2016 wp-load.php
-rw-r--r-- 1 nobody 65534 33939 Nov 21 2016 wp-login.php
-rw-r--r-- 1 nobody 65534 8048 Jan 11 2017 wp-mail.php
-rw-r--r-- 1 nobody 65534 16255 Apr 7 2017 wp-settings.php
-rw-r--r-- 1 nobody 65534 29896 Oct 19 2016 wp-signup.php
-rw-r--r-- 1 nobody 65534 4513 Oct 15 2016 wp-trackback.php
-rw-r--r-- 1 nobody 65534 3065 Sep 1 2016 xmlrpc.php
[[email protected] blog]# chown -R www.www /usr/local/nginx/html/blog/ #授權使用者訪問
[[email protected] blog]# ls -l #最終部落格目錄和許可權
total 192
-rw-r--r-- 1 www www 418 Sep 25 2013 index.php
-rw-r--r-- 1 www www 19935 Jan 3 2017 license.txt
-rw-r--r-- 1 www www 6956 Apr 23 2017 readme.html
drwxr-xr-x 2 www www 4096 Nov 28 01:08 wordpress
-rw-r--r-- 1 www www 5447 Sep 28 2016 wp-activate.php
drwxr-xr-x 9 www www 4096 Apr 23 2017 wp-admin
-rw-r--r-- 1 www www 364 Dec 19 2015 wp-blog-header.php
-rw-r--r-- 1 www www 1627 Aug 29 2016 wp-comments-post.php
-rw-r--r-- 1 www www 2930 Apr 23 2017 wp-config-sample.php
drwxr-xr-x 5 www www 4096 Apr 23 2017 wp-content
-rw-r--r-- 1 www www 3286 May 25 2015 wp-cron.php
drwxr-xr-x 18 www www 12288 Apr 23 2017 wp-includes
-rw-r--r-- 1 www www 2422 Nov 21 2016 wp-links-opml.php
-rw-r--r-- 1 www www 3301 Oct 25 2016 wp-load.php
-rw-r--r-- 1 www www 33939 Nov 21 2016 wp-login.php
-rw-r--r-- 1 www www 8048 Jan 11 2017 wp-mail.php
-rw-r--r-- 1 www www 16255 Apr 7 2017 wp-settings.php
-rw-r--r-- 1 www www 29896 Oct 19 2016 wp-signup.php
-rw-r--r-- 1 www www 4513 Oct 15 2016 wp-trackback.php
-rw-r--r-- 1 www www 3065 Sep 1 2016 xmlrpc.php
(3)開始安裝blog部落格程式
開啟瀏覽器輸入blog.yunjisuan.com(提前做好hosts或DNS解析),回車後,出現下圖:
仔細閱讀頁面的文字資訊後,單擊“現在就開始”按鈕繼續,然