LNMP架構介紹MySQL安裝PHP安裝 Nginx介紹

12.1 LNMP架構介紹
12.2 MySQL安裝
12.3/12.4 PHP安裝
12.5 Nginx介紹

擴展
Nginx爲何比Apache Httpd高效:原理篇 http://www.toxingwang.com/linux-unix/linux-basic/1712.html
apache和nginx工做原理比較 http://www.server110.com/nginx/201402/6543.html
mod_php 和 mod_fastcgi以及php-fpm的比較 http://dwz.cn/1lwMSd
概念瞭解:CGI,FastCGI,PHP-CGI與PHP-FPMhttp://www.nowamagic.net/librarys/veda/detail/1319/https://www.awaimai.com/371.htmlphp

LNMP架構介紹目錄概要

  • 和LAMP不一樣的是,提供web服務的是Nginx
  • 而且php是做爲一個獨立服務存在的,這個服務叫作php-fpm
  • Nginx直接處理靜態請求,動態請求會轉發給php-fpm

輸入圖片說明

LNMP架構

  • LAMP和LNMP兩個架構相似
    • 在LAMP架構中,PHP和Apache是一個總體,php解析是交給Apache來執行的,只不過須要加一個php的模塊libphp.so
    • 在LNMP架構中,提供web服務的是Nginx,PHP會啓動一個php-fpm服務,Nginx會把用戶請求的php交給php-fpm服務去進行處理(用戶數據與mysql的交互就是由php-fpm來作的,處理好的結果在高速Nginx,而後經過Nginx告訴用戶的瀏覽器),用戶的靜態請求將由Nginx直接進行處理(Nginx在處理靜態數據的性能上要比Apache快),
      • Nginx對靜態爲主的網站,處理用戶併發會很大,速度也會快不少

輸入圖片說明

MySQL安裝目錄概要

  • cd /usr/local/src
  • wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz
  • tar zxvf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz
  • mv mysql-5.6.35-linux-glibc2.5-x86_64 /usr/local/mysql
  • cd /usr/local/mysql
  • useradd mysql
  • mkdir /data/
  • ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
  • cp support-files/my-default.cnf /etc/my.cnf
  • cp support-files/mysql.server /etc/init.d/mysqld
  • vi /etc/init.d/mysqld
    • 定義basedir和datadir
  • /etc/init.d/mysqld start

搭建LNMP環境

LAMP架構下,而後搭建LNMP架構
1.首先查看mysql是否啓動
ps aux |grep mysql
2.刪除目錄
rm -rf /usr/local/mysql/
3.刪除啓動的腳本
rm -rf /etc/init.d/mysqld
4.而後其餘步驟相同css

  • 這裏新建一個虛擬環境(這裏不是在lamp架構上搭建的,而是新建的一個環境)
  • 而後進入到/usr/local/src目錄下
[root@yong-01 ~]# cd /usr/local/src/
[root@yong-01 src]# wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz
  • 而後解壓安裝包
[root@yong-01 src]# tar zxvf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz
  • 移動目錄並修更名稱——>這裏移動目錄到/usr/local/下時,必定不能有mysql目錄,(若已經有mysql目錄時,再去移動則會放到mysql目錄下面去,而不是去移動並修更名稱了)
  • 移動完後,檢查目錄
[root@yong-01 src]# mv mysql-5.6.35-linux-glibc2.5-x86_64 /usr/local/mysql
[root@yong-01 src]# ls /usr/local/mysql/
bin      data  include  man         README   share      support-files
COPYING  docs  lib      mysql-test  scripts  sql-bench
  • 進入到/usr/local/mysql目錄下
[root@yong-01 src]# cd /usr/local/mysql/
  • 新建mysql用戶和/data/目錄——>這裏如果在lamp以前的基礎上作的話,須要rm -rf /data/mysql/*清空內容,(直接刪除mysql目錄也能夠。它會自動建立)
[root@yong-01 mysql]# id mysql
uid=1002(mysql) gid=1002(mysql) 組=1002(mysql)
[root@yong-01 mysql]# rm -rf /data/mysql/*
[root@yong-01 mysql]# ls /data/
mariadb  mysql
  • 初始化./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
  • 初始化的過程目的,就是把mysql啓動所須要的目錄生成
[root@hanfeng mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
  • 而後能夠echo $?檢查,或者看初始化的過程當中是否有兩個OK
[root@yong-01 mysql]# echo $?
0
  • 拷貝配置文件以前已經存在 查看

  datadir=/data/mysql    socket=/tmp/mysql.sock  這兩個文件html

[root@yong-01 mysql]# cp support-files/my-default.cnf /etc/my.cnf
  • 拷貝啓動文件cp support-files/mysql.server /etc/init.d/mysqld
[root@yong-01 mysql]# cp support-files/mysql.server /etc/init.d/mysqld
  • 編輯文件 /etc/init.d/mysqld,並配置
[root@yong-01 mysql]# vim /etc/init.d/mysqld

在文件中配置
basedir=/usr/local/mysql
datadir=/data/mysql
  • 啓動mysql服務
[root@yong-01 mysql]# /etc/init.d/mysqld start
Starting MySQL.Logging to '/data/mysql/yong-01.err'.
 SUCCESS!
  • 查看服務是否啓動成功
[root@yong-01 mysql]# ps aux |grep mysql
root      1846  0.0  0.0 113264  1612 pts/0    S    20:29   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/yong-01.pid
mysql     1981  2.6 24.0 973056 450520 pts/0   Sl   20:29   0:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/yong-01.err --pid-file=/data/mysql/yong-01.pid --socket=/tmp/mysql.sock
root      2005  0.0  0.0 112676   984 pts/0    R+   20:29   0:00 grep --color=auto mysql
  • 將mysql服務加入到服務列表中去,並設置開機啓動
[root@yong-01 mysql]# chkconfig --add mysqld
[root@yong-01 mysql]# chkconfig mysqld on
  • 下次就能夠直接使用service關閉或啓動服務 service mysqld (start stop restart)
[root@yong-01 mysql]# service mysqld restart
Shutting down MySQL.. SUCCESS! 
Starting MySQL. SUCCESS!

 

PHP安裝目錄概要

  • 和LAMP安裝PHP方法有差異,須要開啓php-fpm服務
  • cd /usr/local/src/
  • wget http://cn2.php.net/distributions/php-5.6.30.tar.gz
  • tar zxf php-5.6.30.tar.gz
  • useradd -s /sbin/nologin php-fpm
  • cd php-5.6.30
  • ./configure --prefix=/usr/local/php-fpm --with-config-file-path=/usr/local/php-fpm/etc --enable-fpm --with-fpm-user=php-fpm --with-fpm-group=php-fpm --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-pdo-mysql=/usr/local/mysql --with-mysql-sock=/tmp/mysql.sock --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-ftp --enable-mbstring --enable-exif --with-pear --with-curl --with-openssl
  • make && make install
  • cp php.ini-production /usr/local/php-fpm/etc/php.ini
  • vi /usr/local/php/etc/php-fpm.conf //寫入以下內容
  • cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
  • chmod 755 /etc/init.d/php-fpm
  • chkconfig --add php-fpm
  • chkconfig php-fpm on
  • service php-fpm start
  • ps aux |grep php-fpm

PHP安裝

  • LAMP架構和LNMP架構中安裝PHP方法是不一樣的
    • 在LAMP中,php是做爲Apache的一個模塊存在的,須要用apxs2 指定Apache的路徑,使用apxs的工具進行自動配置模塊的加載
    • 在LNMP裏,須要指定mysql的路徑,可是不須要制動Nginx的路徑,由於是LNMP中,PHP是做爲一個獨立的服務在運行的,和Nginx沒有直接的關係,因此它也不須要依賴Nginx
  • 如果在以前LAMP架構中,編譯過PHP,因此只須要進入PHP的目錄下執行make clean 把以前編譯過的那些文件,所有刪掉
  • 首先進入到/usr/local/src/ 已經有了php解壓的安裝文件
[root@yong-01 mysql]# cd /usr/local/src
[root@yong-01 src]# ls
apr-1.6.3               httpd-2.4.33                                  php-5.6.30
apr-1.6.3.tar.gz        httpd-2.4.33.tar.gz                           php-5.6.30.tar.gz
apr-util-1.6.1          mariadb-10.2.6-linux-glibc_214-x86_64.tar.gz  php-5.6.32.tar.bz2
apr-util-1.6.1.tar.bz2  mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz
  •  進入php-5.6.30 make clean 清理  把以前編譯的文件所有刪掉
[root@yong-01 src]# cd php-5.6.30/
[root@yong-01 php-5.6.30]# make clean
find . -name \*.gcno -o -name \*.gcda | xargs rm -f
find . -name \*.lo -o -name \*.o | xargs rm -f
find . -name \*.la -o -name \*.a | xargs rm -f 
find . -name \*.so | xargs rm -f
find . -name .libs -a -type d|xargs rm -rf
rm -f libphp5.la sapi/cli/php sapi/cgi/php-cgi    libphp5.la modules/* libs/*
  • 增長用戶並指定shell  useradd -s 指定用戶的shell
[root@yong-01 php-5.6.30]# useradd -s /sbin/nologin php-fpm

安裝php

  • 初始化./configure --prefix=/usr/local/php-fpm --with-config-file-path=/usr/local/php-fpm/etc --enable-fpm --with-fpm-user=php-fpm --with-fpm-group=php-fpm --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-pdo-mysql=/usr/local/mysql --with-mysql-sock=/tmp/mysql.sock --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-ftp --enable-mbstring --enable-exif --with-pear --with-curl --with-openssl
  • ./configure –prefix=/usr/local/php-fpm //指定路徑
  • --with-config-file-path=/usr/local/php-fpm/etc //指定配置文件所在路徑
  • --enable-fpm //必須加上,不然沒法啓動該服務
  • --with-fpm-user=php-fpm //指定用戶
  • --with-fpm-group=php-fpm //指定組
  • --with-mysql=/usr/local/mysql //指定 mysql 的路徑
  • --with-mysqli=/usr/local/mysql/bin/mysql_config //指定 mysqli 的路徑
  • --with-pdo-mysql=/usr/local/mysql //指定 pdo-mysql 的路徑
[root@yong-01 php-5.6.30]# ./configure --prefix=/usr/local/php-fpm --with-config-file-path=/usr/local/php-fpm/etc --enable-fpm --with-fpm-user=php-fpm --with-fpm-group=php-fpm --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-pdo-mysql=/usr/local/mysql --with-mysql-sock=/tmp/mysql.sock --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-ftp --enable-mbstring --enable-exif --with-pear --with-curl --with-openssl
  • 錯誤
configure: error: Please reinstall the libcurl distribution -
  easy.h should be in <curl-dir>/include/curl/
  • 解決方法
[root@yong-01 php-5.6.30]# yum install -y libcurl-devel
  • 裝完這個繼續初始化 能夠用echo $?檢查是否初始化成功
[root@yong-01 php-5.6.30]# echo $?
0
  • 而後make && make install
[root@yong-01 php-5.6.30]# make && make install
  • 用echo $?檢查是否成功
[root@yong-01 php-5.6.30]# echo $?
0
  • 查看/usr/local/php-fpm/目錄——>與/usr/local/php/目錄項比較多了 sbin 和 var 目錄
[root@yong-01 php-5.6.30]# ls /usr/local/php-fpm/
bin  etc  include  lib  php  sbin  var
[root@yong-01 php-5.6.30]# ls /usr/local/php/
bin  etc  include  lib  php
[root@yong-01 php-5.6.30]# ls /usr/local/php-fpm/sbin/    //在sbin目錄下有一個php-fpm文件,就是用來啓動php-fpm的
php-fpm
[root@yong-01 php-5.6.30]# ls /usr/local/php-fpm/var/    //在var目錄下有 log 和 run 文件,log文件存放日誌的,run存放pid的,日誌和pid路徑都是能夠指定的
log  run
  • /usr/local/php-fpm/sbin/php-fpm 和 /usr/local/php-fpm/bin/php 的用法是基本一致的
/usr/local/php-fpm/sbin/php-fpm -m       查看模塊
/usr/local/php-fpm/sbin/php-fpm -i
/usr/local/php-fpm/sbin/php-fpm -t       測試配置文件文件語法
  • 用/usr/local/php-fpm/sbin/php-fpm -t 測試配置文件文件語法是否錯誤
[root@yong-01 php-5.6.30]# /usr/local/php-fpm/sbin/php-fpm -t
[06-Jun-2018 21:17:00] ERROR: failed to open configuration file '/usr/local/php-fpm/etc/php-fpm.conf': No such file or directory (2)
[06-Jun-2018 21:17:00] ERROR: failed to load configuration file '/usr/local/php-fpm/etc/php-fpm.conf'
[06-Jun-2018 21:17:00] ERROR: FPM initialization failed
  • 這裏會提示配置文件並不存在,若想要啓動php-fpm服務,首先須要去配置配置文件
  • 拷貝cp php.ini-production /usr/local/php-fpm/etc/php.ini文件
  • 查看目錄發現/usr/local/src/php-5.6.30 有2個配置文件
    • php.ini-development 適合開發環境使用
    • php.ini-production 適合生產環境使用
  • 二者區別在於,錯誤日誌不一樣
[root@yong-01 php-5.6.30]# cp php.ini-production /usr/local/php-fpm/etc/php.ini
  • 進入到/usr/local/php-fpm/etc/目錄下
[root@yong-01 php-5.6.30]# cd /usr/local/php-fpm/etc/
[root@yong-01 etc]# ls
pear.conf  php-fpm.conf.default  php.ini
  • 編輯配置文件vim php-fpm.conf,或者直接把php-fpm.conf.default文件更名字爲php-fpm.conf——>這裏直接新建寫入的
[root@yong-01 etc]# vim php-fpm.conf 

去https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D15Z/php-fpm.conf拷貝樣例

拷貝到文件中
[global]                //全局配置
pid = /usr/local/php-fpm/var/run/php-fpm.pid                //定義PID
error_log = /usr/local/php-fpm/var/log/php-fpm.log        //錯誤日誌
[www]                    //模塊名字,啓動服務的時候就能看到
listen = /tmp/php-fcgi.sock        //監聽的地址
listen.mode = 666        //當監聽的是sock的時候,這個語句纔會生效,這個語句用來定義sock文件權限的
user = php-fpm        //用戶,定義是哪一個用戶啓動的
group = php-fpm             // 組,定義是哪一個組啓動的
pm = dynamic                    
pm.max_children = 50            
pm.start_servers = 20                       
pm.min_spare_servers = 5           
pm.max_spare_servers = 35       
pm.max_requests = 500        
rlimit_files = 1024

而後保存退出

linsten 能夠監聽sock、tcp 能夠寫成 linsten = 127.0.0.1:9000(默認端口就是9000,可自定義),通常監聽的到是「127.0.0.1 」IP,由於php-fpm這個服務是針對內部使用的、在本機上用的,也就是說Nginx和php一般是在一臺機器上,二者之間通訊直接使用內部網絡就能夠了;在這塊選擇的linsten配置不一樣,到以後的配置Nginx配置,也就是告訴Nginx到哪裏找php的配置語句也是不一樣mysql

  • 進入到/usr/local/src/php-5.6.30/下,拷貝啓動的腳本
[root@yong-01 etc]# cd /usr/local/src/php-5.6.30/
[root@yong-01 php-5.6.30]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
  • 加入到服務列表中,先更改權限,而後在chkconfig,最後在開機啓動
[root@yong-01 php-5.6.30]# chmod 755 /etc/init.d/php-fpm
[root@yong-01 php-5.6.30]# chkconfig --add php-fpm
[root@yong-01 php-5.6.30]# chkconfig php-fpm on
[root@yong-01 php-5.6.30]# service php-fpm start
Starting php-fpm  done
[root@yong-01 php-5.6.30]# chkconfig --list

注:該輸出結果只顯示 SysV 服務,並不包含
原生 systemd 服務。SysV 配置數據
可能被原生 systemd 配置覆蓋。 

      要列出 systemd 服務,請執行 'systemctl list-unit-files'。
      查看在具體 target 啓用的服務請執行
      'systemctl list-dependencies [target]'。

mysqld         	0:關	1:關	2:開	3:開	4:開	5:開	6:關
netconsole     	0:關	1:關	2:關	3:關	4:關	5:關	6:關
network        	0:關	1:關	2:開	3:開	4:開	5:開	6:關
php-fpm        	0:關	1:關	2:開	3:開	4:開	5:開	6:關
  • 查看php-fpm服務是否啓動
[root@yong-01 php-5.6.30]# ps aux |grep php-fpm
root     53083  0.0  0.2 123612  4948 ?        Ss   21:30   0:00 php-fpm: master process (/usr/localphp-fpm/etc/php-fpm.conf)
php-fpm  53084  0.0  0.2 123612  4708 ?        S    21:30   0:00 php-fpm: pool www
php-fpm  53085  0.0  0.2 123612  4708 ?        S    21:30   0:00 php-fpm: pool www
php-fpm  53086  0.0  0.2 123612  4708 ?        S    21:30   0:00 php-fpm: pool www
php-fpm  53087  0.0  0.2 123612  4708 ?        S    21:30   0:00 php-fpm: pool www
php-fpm  53088  0.0  0.2 123612  4712 ?        S    21:30   0:00 php-fpm: pool www
php-fpm  53089  0.0  0.2 123612  4712 ?        S    21:30   0:00 php-fpm: pool www
php-fpm  53090  0.0  0.2 123612  4712 ?        S    21:30   0:00 php-fpm: pool www
php-fpm  53091  0.0  0.2 123612  4712 ?        S    21:30   0:00 php-fpm: pool www
php-fpm  53092  0.0  0.2 123612  4712 ?        S    21:30   0:00 php-fpm: pool www
php-fpm  53093  0.0  0.2 123612  4716 ?        S    21:30   0:00 php-fpm: pool www
php-fpm  53094  0.0  0.2 123612  4716 ?        S    21:30   0:00 php-fpm: pool www
php-fpm  53095  0.0  0.2 123612  4716 ?        S    21:30   0:00 php-fpm: pool www
php-fpm  53096  0.0  0.2 123612  4716 ?        S    21:30   0:00 php-fpm: pool www
php-fpm  53097  0.0  0.2 123612  4716 ?        S    21:30   0:00 php-fpm: pool www
php-fpm  53098  0.0  0.2 123612  4716 ?        S    21:30   0:00 php-fpm: pool www
php-fpm  53099  0.0  0.2 123612  4716 ?        S    21:30   0:00 php-fpm: pool www
php-fpm  53100  0.0  0.2 123612  4716 ?        S    21:30   0:00 php-fpm: pool www
php-fpm  53101  0.0  0.2 123612  4716 ?        S    21:30   0:00 php-fpm: pool www
php-fpm  53102  0.0  0.2 123612  4716 ?        S    21:30   0:00 php-fpm: pool www
php-fpm  53103  0.0  0.2 123612  4716 ?        S    21:30   0:00 php-fpm: pool www
root     53111  0.0  0.0 112676   980 pts/0    R+   21:32   0:00 grep --color=auto php-fpm

 

Nginx介紹

  • Nginx官網 nginx.org,最新版1.13,最新穩定版1.12 (stable版本) //這個軟件是有俄國人開發的,由於對靜態文件的處理性能上比Apache強不少,因此在慢慢的取代Apache
  • Nginx應用場景:web服務、反向代理、負載均衡
  • Nginx著名分支,淘寶基於Nginx開發的Tengine,使用上和Nginx一致,服務名,配置文件名都同樣,和Nginx的最大區別在於Tenging增長了一些定製化模塊,在安全限速方面表現突出,另外它支持對js,css合併
  • Nginx核心+lua相關的組件和模塊組成了一個支持lua的高性能web容器openresty,參考文章
  • Nginx雖然功能很少,但能夠去擴展一些第三方的模塊進來
相關文章
相關標籤/搜索