Linux基礎(day48)

12.1 LNMP架構介紹

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對靜態爲主的網站,處理用戶併發會很大,速度也會快不少

輸入圖片說明

12.2 MySQL安裝

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.而後其餘步驟相同
  1. 這裏新建一個虛擬環境(這裏不是在lamp架構上搭建的,而是新建的一個環境)
  2. 而後進入到/usr/local/src目錄下
[root@hanfeng ~]# cd /usr/local/src
[root@hanfeng src]#
  1. 下載mysql安裝包
[root@hanfeng src]# wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz
  1. 而後解壓安裝包
[root@hanfeng src]# tar zxvf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz
  1. 移動目錄並修更名稱——>這裏移動目錄到/usr/local/下時,必定不能有mysql目錄,(若已經有mysql目錄時,再去移動則會放到mysql目錄下面去,而不是去移動並修更名稱了)
[root@hanfeng src]# mv mysql-5.6.35-linux-glibc2.5-x86_64 /usr/local/mysql
[root@hanfeng src]#
  1. 移動完後,檢查目錄
[root@hanfeng src]# ls /usr/local/mysql
bin      data  include  man         README   share      support-files
COPYING  docs  lib      mysql-test  scripts  sql-bench
[root@hanfeng src]#
  1. 進入到/usr/local/mysql目錄下
[root@hanfeng src]# cd /usr/local/mysql
[root@hanfeng mysql]#
  1. 新建mysql用戶和/data/目錄——>這裏如果在lamp以前的基礎上作的話,須要rm -rf /data/mysql/*清空內容,(直接刪除mysql目錄也能夠。它會自動建立)
[root@hanfeng mysql]# useradd mysql
[root@hanfeng mysql]# mkdir /data/
[root@hanfeng mysql]#
  1. 初始化./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
  • 初始化的過程目的,就是把mysql啓動所須要的目錄生成
[root@hanfeng mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
  • 錯誤
FATAL ERROR: please install the following Perl modules before executing ./scripts/mysql_install_db:
Data::Dumper
  • 解決方法
yum install -y perl-Data-Dumper
  • 錯誤
Installing MySQL system tables..../bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
  • 解決方法
yum install -y libaio
  1. 而後能夠echo $?檢查,或者看初始化的過程當中是否有兩個OK
[root@hanfeng mysql]# echo $?
0
[root@hanfeng mysql]#
  1. 拷貝配置文件cp support-files/my-default.cnf /etc/my.cnf
  • 未拷貝以前的環境配置cat /etc/my.cnf
[root@hanfeng mysql]# cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d

拷貝後php

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

在文件中配置
basedir=/usr/local/mysql
datadir=/data/mysql

而後保存退出
  1. 啓動mysql服務
[root@hanfeng mysql]# /etc/init.d/mysqld start
Starting MySQL.Logging to '/data/mysql/hanfeng.err'.
. SUCCESS! 
[root@hanfeng mysql]#
  1. 查看服務是否啓動成功
[root@hanfeng mysql]# ps aux |grep mysql
root      2295  0.0  0.1 113252  1608 pts/0    S    22:41   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/hanfeng.pid
mysql     2403  1.9 44.6 973512 451180 pts/0   Sl   22:41   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/hanfeng.err --pid-file=/data/mysql/hanfeng.pid
root      2429  0.0  0.0 112656   992 pts/0    R+   22:41   0:00 grep --color=auto mysql
[root@hanfeng mysql]#
  1. 將mysql服務加入到服務列表中去,並設置開機啓動
[root@hanfeng mysql]# chkconfig --add mysqld
[root@hanfeng mysql]# chkconfig mysqld on
[root@hanfeng mysql]#
  1. 下次就能夠直接使用service關閉或啓動服務
[root@hanfeng mysql]# service mysqld stop
Shutting down MySQL.. SUCCESS! 
[root@hanfeng mysql]# service mysqld start
Starting MySQL. SUCCESS!

12.3/12.4 PHP安裝

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 把以前編譯過的那些文件,所有刪掉
  1. 首先進入到/usr/local/src/
[root@hanfeng ~]# cd /usr/local/src/
[root@hanfeng src]#
  1. 下載php安裝包
[root@hanfeng src]# wget http://cn2.php.net/distributions/php-5.6.30.tar.gz
  1. 解壓php安裝包
[root@hanfeng src]# tar zxf php-5.6.30.tar.gz
[root@hanfeng src]# ls
mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz  php-5.6.30  php-5.6.30.tar.gz
[root@hanfeng src]#
  1. 增長用戶並指定shell
  • useradd -s 指定用戶的shell
[root@hanfeng src]# useradd -s /sbin/nologin php-fpm
[root@hanfeng src]#
  1. 切換到/usr/local/src/php-5.6.30
[root@hanfeng ~]# cd /usr/local/src/php-5.6.30
[root@hanfeng php-5.6.30]#
  1. 初始化./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@hanfeng 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
  • 錯誤
checking for cc... no
checking for gcc... no
configure: error: in `/usr/local/src/php-5.6.30':
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details
  • 解決方法
yum install -y gcc
  • 錯誤
configure: error: xml2-config not found. Please check your libxml2 installation.
  • 解決方法
[root@hanfeng php-5.6.30]# yum install -y libxml2-devel
  • 錯誤
configure: error: Cannot find OpenSSL's <evp.h>
  • 解決方法
yum install -y openssl-devel
  • 錯誤
configure: error: Please reinstall the libcurl distribution -
  easy.h should be in <curl-dir>/include/curl/
  • 解決方法
yum install -y libcurl-devel
或
yum install -y curl curl-devel
  • 錯誤
configure: error: jpeglib.h not found.
  • 解決方法
yum install -y libjpeg-devel
  • 錯誤
configure: error: png.h not found.
  • 解決方法
yum install -y libpng

yum install -y libpng-devel
  • 錯誤
configure: error: freetype-config not found.
  • 解決方法
yum install -y freetype-devel
  • 錯誤
configure: error: mcrypt.h not found. Please reinstall libmcrypt.
  • 解決方法
yum install -y epel-release

yum install -y libmcrypt-devel
  1. 能夠echo $?檢查是否初始化成功
[root@hanfeng php-5.6.30]# echo $?
0
[root@hanfeng php-5.6.30]#
  1. 而後make && make install
[root@hanfeng php-5.6.30]# make && make instal
  1. 用echo $?檢查是否成功
[root@hanfeng php-5.6.30]# echo $?
0
[root@hanfeng php-5.6.30]#
  1. 查看/usr/local/php-fpm/目錄——>於/usr/local/php/目錄項比較多了 sbin 和 var 目錄
[root@hanfeng php-5.6.30]# ls /usr/local/php-fpm/
bin  etc  include  lib  php  sbin  var
[root@hanfeng php-5.6.30]# ls /usr/local/php-fpm/sbin/    //在sbin目錄下有一個php-fpm文件,就是用來啓動php-fpm的
php-fpm
[root@hanfeng php-5.6.30]# ls /usr/local/php-fpm/var/      //在var目錄下有 log 和 run 文件,log文件存放日誌的,run存放pid的,日誌和pid路徑都是能夠指定的
log  run
[root@hanfeng php-5.6.30]#
  1. /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          測試配置文件文件語法
  1. 用/usr/local/php-fpm/sbin/php-fpm -t 測試配置文件文件語法是否錯誤
[root@hanfeng php-5.6.30]# /usr/local/php-fpm/sbin/php-fpm -t
[03-Jan-2018 00:10:44] ERROR: failed to open configuration file '/usr/local/php-fpm/etc/php-fpm.conf': No such file or directory (2)
[03-Jan-2018 00:10:44] ERROR: failed to load configuration file '/usr/local/php-fpm/etc/php-fpm.conf'
[03-Jan-2018 00:10:44] ERROR: FPM initialization failed
[root@hanfeng php-5.6.30]#
  1. 這裏會提示配置文件並不存在,若想要啓動php-fpm服務,首先須要去配置配置文件
  2. 拷貝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@hanfeng php-5.6.30]# cp php.ini-production /usr/local/php-fpm/etc/php.ini
[root@hanfeng php-5.6.30]#
  1. 進入到/usr/local/php-fpm/etc/目錄下
[root@hanfeng php-5.6.30]# cd /usr/local/php-fpm/etc/
[root@hanfeng etc]# ls
pear.conf  php-fpm.conf.default  php.ini
[root@hanfeng etc]#
  1. 編輯配置文件vim php-fpm.conf,或者直接把php-fpm.conf.default文件更名字爲php-fpm.cnf——>這裏直接新建寫入的
[root@hanfeng 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的配置語句也是不一樣css

  1. 進入到/usr/local/src/php-5.6.30/下,拷貝啓動的腳本
[root@hanfeng etc]# cd /usr/local/src/php-5.6.30/
[root@hanfeng php-5.6.30]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@hanfeng php-5.6.30]#
  1. 加入到服務列表中,先更改權限,而後在chkconfig,最後在開機啓動
[root@hanfeng php-5.6.30]# chmod 755 /etc/init.d/php-fpm
[root@hanfeng php-5.6.30]# chkconfig --add php-fpm
[root@hanfeng php-5.6.30]# chkconfig php-fpm on
[root@hanfeng php-5.6.30]# service php-fpm start
Starting php-fpm  done
[root@hanfeng 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:關
[root@hf-01 php-5.6.30]#
  1. 查看php-fpm服務是否啓動
[root@hanfeng php-5.6.30]# ps aux |grep php-fpm
root      2386  0.0  0.4 124184  4936 ?        Ss   17:04   0:00 php-fpm: master process (/usr/local/php-fpm/etc/php-fpm.conf)
php-fpm   2387  0.0  0.4 124184  4700 ?        S    17:04   0:00 php-fpm: pool www
php-fpm   2388  0.0  0.4 124184  4700 ?        S    17:04   0:00 php-fpm: pool www
php-fpm   2389  0.0  0.4 124184  4700 ?        S    17:04   0:00 php-fpm: pool www
php-fpm   2390  0.0  0.4 124184  4700 ?        S    17:04   0:00 php-fpm: pool www
php-fpm   2391  0.0  0.4 124184  4704 ?        S    17:04   0:00 php-fpm: pool www
php-fpm   2392  0.0  0.4 124184  4708 ?        S    17:04   0:00 php-fpm: pool www
php-fpm   2393  0.0  0.4 124184  4708 ?        S    17:04   0:00 php-fpm: pool www
php-fpm   2394  0.0  0.4 124184  4708 ?        S    17:04   0:00 php-fpm: pool www
php-fpm   2395  0.0  0.4 124184  4708 ?        S    17:04   0:00 php-fpm: pool www
php-fpm   2396  0.0  0.4 124184  4708 ?        S    17:04   0:00 php-fpm: pool www
php-fpm   2397  0.0  0.4 124184  4708 ?        S    17:04   0:00 php-fpm: pool www
php-fpm   2398  0.0  0.4 124184  4708 ?        S    17:04   0:00 php-fpm: pool www
php-fpm   2399  0.0  0.4 124184  4708 ?        S    17:04   0:00 php-fpm: pool www
php-fpm   2400  0.0  0.4 124184  4708 ?        S    17:04   0:00 php-fpm: pool www
php-fpm   2401  0.0  0.4 124184  4708 ?        S    17:04   0:00 php-fpm: pool www
php-fpm   2402  0.0  0.4 124184  4708 ?        S    17:04   0:00 php-fpm: pool www
php-fpm   2403  0.0  0.4 124184  4708 ?        S    17:04   0:00 php-fpm: pool www
php-fpm   2404  0.0  0.4 124184  4708 ?        S    17:04   0:00 php-fpm: pool www
php-fpm   2405  0.0  0.4 124184  4708 ?        S    17:04   0:00 php-fpm: pool www
php-fpm   2406  0.0  0.4 124184  4708 ?        S    17:04   0:00 php-fpm: pool www
root      2408  0.0  0.0 112676   988 pts/0    R+   17:04   0:00 grep --color=auto php-fpm
[root@hanfeng php-5.6.30]#

12.5 Nginx介紹

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雖然功能很少,但能夠去擴展一些第三方的模塊進來

擴展

  1. Nginx爲何比Apache Httpd高效:原理篇 html

  2. apache和nginx工做原理比較mysql

  3. mod_php 和 mod_fastcgi以及php-fpm的比較linux

  4. 概念瞭解:CGI,FastCGI,PHP-CGI與PHP-FPM nginx

概念瞭解git

相關文章
相關標籤/搜索