LNMP源碼編譯(MySQL,PHP,NGINX)

主要概念:

1.LNMP=Linux+NGINX+MySQL+PHP
Nginx是一個高性能的http和反向代理服務器
MySQL是一個小型關係型數據管理系統
PHP是一種在服務器端執行的嵌入HTML文檔的腳本語言
這四個都是免費開源的軟件,組合起來就是一個免費高效擴展性強的網站服務系統

2.LNMP的工作流程
client —>瀏覽器—>nginx —>靜態的直接返回給client,動態的 —>php —>數據庫中找資源
3.LNMP架構代表的就是Linux系統下NGINX+MySQL+PHP這種網站服務器的架構。NGINX中的PHP是以fastcgi的方式結合nginx的,可以理解爲Nginx代理了PHP的fastcgi
4.工作方式:
(1)首先,瀏覽器發送http request請求到服務器(Nginx)
(2)服務器響應並處理web請求,將一些靜態資源(CSS,圖片,視頻等)保存服務器上,然後將php腳本通過接口傳輸協議(網關協議)PHP-FCGI(fast-cgi)傳輸給PHP-FPM(進程管理程序)
(3)PHP-FPM不做處理,然後PHP-FPM調用PHP解析器進程,PHP解析器解析php腳本信息。
(4)PHP解析器進程可以啓動多個,進行併發執行。然後將解析後的腳本返回到PHP-FPM
(5)PHP-FPM再通過fast-cgi的形式將腳本信息傳送給Nginx
(6)服務器再通過Http response的形式傳送給瀏覽器。

5 . LNMP和LAMP的區別:
LNMP和LAMP唯一不同是指提供web服務的是Nginx,
在Apache中,PHP是作爲一個模塊存在的。而在Nginx中,PHP是作爲一個獨立服務存在的,這個服務叫做php-fpm。
Nginx直接處理靜態請求,動態請求會轉發給php-fpm
6. LNMP的特點:
7. Nginx的性能穩定,功能豐富,處理靜態文件速度快且消耗的系統資源較少,支持比Apache更多的併發連接數,效率更高

注:CGI 通用網關接口
在解析的過程中不能響應請求
fattcgi將兩者分開,解析的同時也能響應請求
fastcgi_pass相當於一個反向代理 將請求交給php,讓php處理動態的請求
mysql_connect連接數據庫管理系統
mysql_select查詢數據
memcachad緩存 每一級都可加緩存
實驗環境:

主機名 IP 服務
server1 172.25.68.1 mysqld,php,nginx

一、給虛擬機擴容:
mysql源碼編譯時要求虛擬機的硬盤大小不能小於20G,否則後邊的編譯過程會出問題,爲了提升速度我們再增加CPU核數和內存大小

1.開機之前先打開虛擬機圖形管理器,將cpu核數增加,擴大內存爲2048,添加一個硬盤
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
2.開機後查看,出現新增的硬盤,/dev/sdb

[root@server1 ~]# fdisk -l

在這裏插入圖片描述
在這裏插入圖片描述
3.更改新增磁盤的標籤以及分區

[root@server1 ~]# fdisk /dev/sdb

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
4.修改後可以看到這個磁盤變成了一和lvm類型的設備

[root@server1 ~]# fdisk -l

在這裏插入圖片描述
5.將新增的磁盤擴充到磁盤的邏輯卷dev/mapper/VolGroup中

[root@server1 ~]# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created
[root@server1 ~]# vgextend VolGroup /dev/sdb1
  Volume group "VolGroup" successfully extended
[root@server1 ~]# lvextend -L 30G /dev/mapper/VolGroup-lv_root 
  Extending logical volume lv_root to 30.00 GiB
  Insufficient free space: 5494 extents needed, but only 5118 available
[root@server1 ~]# lvextend -l +5118 /dev/mapper/VolGroup-lv_root 
  Extending logical volume lv_root to 28.53 GiB
  Logical volume lv_root successfully resized

在這裏插入圖片描述
在這裏插入圖片描述
6.再次查看磁盤的大小發生變化

[root@server1 ~]# fdisk -l
Disk /dev/mapper/VolGroup-lv_root: 30.6 GB, 30635196416 bytes

在這裏插入圖片描述
在這裏插入圖片描述
7.查看掛載情況,沒有變化

[root@server1 ~]# df -h
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root  8.5G  1.1G  7.0G  13% /
tmpfs                         939M     0  939M   0% /dev/shm
/dev/sda1                     485M   33M  427M   8% /boot

在這裏插入圖片描述
8.重新加載後查看發生變化,擴容成功

[root@server1 ~]# resize2fs /dev/mapper/VolGroup-lv_root 
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/mapper/VolGroup-lv_root is mounted on /; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 2
Performing an on-line resize of /dev/mapper/VolGroup-lv_root to 7479296 (4k) blocks.
The filesystem on /dev/mapper/VolGroup-lv_root is now 7479296 blocks long.
[root@server1 ~]# df -h
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root   29G  1.1G   26G   4% /
tmpfs                         939M     0  939M   0% /dev/shm
/dev/sda1                     485M   33M  427M   8% /boot

在這裏插入圖片描述
二、安裝mysql

1.下載一個安裝包,解壓

[root@server1 ~]# ls
bansys      mysql-boost-5.7.17.tar.gz       varnish-libs-3.0.5-1.el6.x86_64.rpm
bansys.zip  varnish-3.0.5-1.el6.x86_64.rpm
[root@server1 ~]# tar zxf mysql-boost-5.7.17.tar.gz 
[root@server1 ~]# ls
bansys      mysql-5.7.17               varnish-3.0.5-1.el6.x86_64.rpm
bansys.zip  mysql-boost-5.7.17.tar.gz  varnish-libs-3.0.5-1.el6.x86_64.rpm
[root@server1 ~]# cd mysql-5.7.17/

在這裏插入圖片描述
2.新建一個目錄,作爲mysql的目錄

[root@server1 mysql-5.7.17]# mkdir /usr/local/lnmp/

在這裏插入圖片描述
3.安裝cmake軟件(c++編譯)

[root@server1 mysql-5.7.17]# yum install cmake -y

在這裏插入圖片描述
cmake跨平臺工具時用來編譯mysql源碼的,用於設置mysql的編譯參數,如安裝目錄,數據存放目錄,字符編碼,排序規則等

4.編譯(這個過程中會出現很多問題,一個一個解決)
<1>第一次編譯:報錯cmake版本太低

[root@server1 mysql-5.7.17]# cmake 
-DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql \      #安裝目錄
> -DMYSQL_DATADIR=/usr/local/lnmp/mysql/data \          #數據庫存放目錄
> -DMYSQL_UNIX_ADDR=/usr/local/lnmp/mysql/data/mysql.sock \  #Unix socket 文件路徑
> -DWITH_MYISAM_STORAGE_ENGINE=1 \            #安裝 myisam 存儲引擎
> -DWITH_INNOBASE_STORAGE_ENGINE=1 \          #安裝 innodb 存儲引擎
> -DDEFAULT_CHARSET=utf8 \                       #使用 utf8 字符
> -DDEFAULT_COLLATION=utf8_general_ci \          #校驗字符
> -DEXTRA_CHARSETS=all                           #安裝所有擴展字符集

在這裏插入圖片描述
下載一個更高版本的cmake安裝包,安裝軟件

[root@server1 ~]# ls
bansys                           mysql-boost-5.7.17.tar.gz
bansys.zip                       varnish-3.0.5-1.el6.x86_64.rpm
cmake-2.8.12.2-4.el6.x86_64.rpm  varnish-libs-3.0.5-1.el6.x86_64.rpm
mysql-5.7.17
[root@server1 ~]# yum install cmake-2.8.12.2-4.el6.x86_64.rpm -y

在這裏插入圖片描述
<2>第二次編譯:報錯缺少一個參數

[root@server1 ~]# cd mysql-5.7.17/
[root@server1 mysql-5.7.17]# ls
[root@server1 mysql-5.7.17]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql 
-DMYSQL_DATADIR=/usr/local/lnmp/mysql/data 
-DMYSQL_UNIX_ADDR=/usr/local/lnmp/mysql/data/mysql.sock 
-DWITH_MYISAM_STORAGE_ENGINE=1 
-DWITH_INNOBASE_STORAGE_ENGINE=1 
-DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci 
-DEXTRA_CHARSETS=all 

在這裏插入圖片描述
在這裏插入圖片描述
<3>第三次:添加參數再次編譯,報錯沒有安裝ncurses-devel

[root@server1 mysql-5.7.17]# cmake 
-DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql 
-DMYSQL_DATADIR=/usr/local/lnmp/mysql/data 
-DMYSQL_UNIX_ADDR=/usr/local/lnmp/mysql/data/mysql.sock 
-DWITH_MYISAM_STORAGE_ENGINE=1 
-DWITH_INNOBASE_STORAGE_ENGINE=1 
-DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci 
-DEXTRA_CHARSETS=all 
-DWITH_BOOST=boost/boost_1_59_0/

在這裏插入圖片描述
在這裏插入圖片描述
安裝依賴性

[root@server1 mysql-5.7.17]# yum install -y ncurses-devel

在這裏插入圖片描述
<4>第四次:報錯一出緩存文件

在這裏插入圖片描述
在這裏插入圖片描述
刪除編譯緩存文件,再次編譯

[root@server1 mysql-5.7.17]# ls
[root@server1 mysql-5.7.17]# rm -fr CMakeCache.txt 
[root@server1 mysql-5.7.17]# ls

在這裏插入圖片描述
<5>第五次編譯:報錯c++的依賴性沒有安裝
在這裏插入圖片描述
在這裏插入圖片描述
安裝gcc gcc-c++

[root@server1 mysql-5.7.17]# yum install gcc gcc-c++ -y

在這裏插入圖片描述
<6>第六次:刪除緩存文件再次編譯,報錯bison沒有安裝

[root@server1 mysql-5.7.17]# rm -fr CMakeCache.txt 
[root@server1 mysql-5.7.17]# cmake 
-DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql 
-DMYSQL_DATADIR=/usr/local/lnmp/mysql/data 
-DMYSQL_UNIX_ADDR=/usr/local/lnmp/mysql/data/mysql.sock 
-DWITH_MYISAM_STORAGE_ENGINE=1 
-DWITH_INNOBASE_STORAGE_ENGINE=1 
-DDEFAULT_CHARSET=utf8 
-DDEFAULT_COLLATION=utf8_general_ci 
-DEXTRA_CHARSETS=all 
-DWITH_BOOST=boost/boost_1_59_0/

在這裏插入圖片描述
在這裏插入圖片描述
安裝bison
在這裏插入圖片描述
<7>第七次編譯:刪除緩存文件,再次編譯,編譯成功
在這裏插入圖片描述
在這裏插入圖片描述
5.安裝
在這裏插入圖片描述

6.安裝包
在這裏插入圖片描述
在這裏插入圖片描述
7.安裝之後可以看到/usr/local/lnmp目錄下生成了mysql目錄,而mysql目錄下有一些子目錄和文件

[root@server1 mysql-5.7.17]# cd /usr/local/lnmp
[root@server1 lnmp]# ls
mysql
[root@server1 lnmp]# cd mysql/
[root@server1 mysql]# ls
bin  COPYING  docs  include  lib  man  mysql-test  README  share  support-files

在這裏插入圖片描述
8.將mysql的配置文件複製到etc下
備份/etc/my.cnf文件爲/etc/my.cnf.bak

[root@server1 mysql]# cd /etc/
[root@server1 etc]# cp my.cnf my.cnf.bak

在這裏插入圖片描述
mysql的默認配置文件在support-files目錄下,將mysql配置文件賦值爲/etc/my.cnf文件

[root@server1 etc]# cd -
/usr/local/lnmp/mysql
[root@server1 mysql]# cd support-files/
[root@server1 support-files]# ls
magic  my-default.cnf  mysqld_multi.server  mysql-log-rotate  mysql.server
[root@server1 support-files]# vim my-default.cnf 
[root@server1 support-files]# cp my-default.cnf /etc/my.cnf
cp: overwrite `/etc/my.cnf'? y
[root@server1 support-files]# 

在這裏插入圖片描述
9.編輯mysql的配置文件,內容如下:

basedir = /usr/local/lnmp/mysql
datadir = /usr/local/lnmp/mysql/data
# port = .....
# server_id = .....
socket = /usr/local/lnmp/mysql/data/mysql.sock

在這裏插入圖片描述

[root@server1 ~]# vim /etc/my.cnf
[root@server1 ~]# 

在這裏插入圖片描述
10.創建mysql組和用戶

[root@server1 ~]# groupadd -g 27 mysql
[root@server1 ~]# useradd -u 27 -g 27 mysql
[root@server1 ~]# id mysql
uid=27(mysql) gid=27(mysql) groups=27(mysql)
[root@server1 ~]# 

在這裏插入圖片描述
11.新建一個data目錄作爲數據存放目錄,修改目錄的屬性,讓mysql用戶對這個目錄有操作的權限

[root@server1 mysql]# mkdir data
[root@server1 mysql]# ll

[root@server1 mysql]# chgrp mysql /usr/local/lnmp/mysql -R
[root@server1 mysql]# chown mysql /usr/local/lnmp/mysql/data/ -R
[root@server1 mysql]# ll

在這裏插入圖片描述
在這裏插入圖片描述
12.將編譯生成的mysql二進制命令放進系統環境變量的文件中,保證可以直接使用二進制命令(配置完之後mysql命令可以自動補齊)

[root@server1 mysql]# vim ~/.bash_profile 
[root@server1 mysql]# 
[root@server1 mysql]# source ~/.bash_profile 
[root@server1 mysql]# 

在這裏插入圖片描述
在這裏插入圖片描述
13.將編輯生成的mysql啓動腳本複製到系統服務的目錄中,保證腳本有可執行權限

[root@server1 mysql]# cd support-files/
[root@server1 support-files]# ls
magic  my-default.cnf  mysqld_multi.server  mysql-log-rotate  mysql.server
[root@server1 support-files]# cp mysql.server /etc/init.d/mysqld
[root@server1 support-files]# ll /etc/init.d/mysqld
-rwxr-xr-x 1 root root 10916 Apr 26 22:47 /etc/init.d/mysqld
[root@server1 support-files]# cd

在這裏插入圖片描述
14.將mysql初始化,這時data目錄下不能有任何文件,如果有的話刪除

[root@server1 ~]# mysqld --user=mysql --initialize

在這裏插入圖片描述
在這裏插入圖片描述

[root@server1 data]# cd
[root@server1 ~]# /etc/init.d/mysqld  start
Starting MySQL.Logging to '/usr/local/lnmp/mysql/data/server1.err'.
.. SUCCESS! 

在這裏插入圖片描述
15.初始化文成後會生成一個臨時密碼,用這個密碼登陸數據庫,查看數據失敗,這是因爲沒有進行安全初始化

[root@server1 ~]# mysql -p

在這裏插入圖片描述
16.對mysql進行安全初始化,按照提示進行即可

[root@server1 ~]# mysql_secure_installation 

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
17.再次進入數據庫查看,可以查看

[root@server1 ~]# mysql -uroot -p
Enter password: 

在這裏插入圖片描述
三、源碼安裝php
1.下載一個php的安裝包,解壓
在這裏插入圖片描述
2.安裝編譯php源碼時需要的依賴性
在這裏插入圖片描述
3.進行編譯
編譯時出錯,提示需要libmcrypt的依賴性,下載一個libmcrypt的安安裝包,安莊後再次編譯,編譯成功
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
編譯完是這樣的
在這裏插入圖片描述
4.安裝
make && make install
在這裏插入圖片描述
在這裏插入圖片描述
5.安裝成功後會看到/usr/local/lnmp下會出先一個php目錄
在這裏插入圖片描述
6.切換到這個目錄下,編輯php的默認配置文件
在這裏插入圖片描述

25  pid = run/php-fpm.pid  ##pid行去掉註釋
149 user = nginx
150 group = niginx      ##保證用戶和組都是nginx

在這裏插入圖片描述
在這裏插入圖片描述
7.將源碼包中的php。ini文件複製到安裝後的目錄中
編輯這個文件
在這裏插入圖片描述
更改時區
在這裏插入圖片描述
8.將php的啓動文件複製到系統啓動腳本的默認目錄下
在這裏插入圖片描述
在這裏插入圖片描述
9.創建nginx用戶
在這裏插入圖片描述
10.啓動php服務,啓動成功後可以查看到他使用的端口
在這裏插入圖片描述
在這裏插入圖片描述
四、源碼安裝NGINX
1.解壓安裝包

[root@server1 ~]# tar zxf nginx-1.14.0.tar.gz 
[root@server1 ~]# ls

2.切換到解壓出的目錄,修改下面文件的內容
(1)去掉版本號

[root@server1 nginx-1.14.0]# vim src/core/nginx.h
[root@server1 nginx-1.14.0]# 
#define NGINX_VER          "nginx/"

在這裏插入圖片描述
在這裏插入圖片描述
(2)去掉debug日誌(debug日誌的級別很低,會產生很多數據,一般不需要開啓)

[root@server1 nginx-1.14.0]# vim auto/cc/gcc 

171 # debug
172 # CFLAGS="$CFLAGS -g"

在這裏插入圖片描述
在這裏插入圖片描述
3.創建編譯環境,添加需要的模塊
第一次編譯:報錯需要安裝pcre庫

[root@server1 nginx-1.14.0]# ./configure 
--prefix=/usr/local/lnmp/nginx 
--with-threads 
--with-file-aio 
--with-http_ssl_module 
--with-http_stub_status_module 
--user=nginx 
--group=nginx 

在這裏插入圖片描述
在這裏插入圖片描述
解決依賴性

[root@server1 nginx-1.14.0]# yum install pcre-devel -y

在這裏插入圖片描述
再次編譯:編譯成功

[root@server1 nginx-1.14.0]# ./configure 
--prefix=/usr/local/lnmp/nginx 
--with-threads 
--with-file-aio 
--with-http_ssl_module 
--with-http_stub_status_module 
--user=nginx 
--group=nginx 

在這裏插入圖片描述
在這裏插入圖片描述
4.安裝

[root@server1 nginx-1.14.0]# make && make install

在這裏插入圖片描述
在這裏插入圖片描述
安裝後在/usr/local/lnmp目錄下會產生一個nginx子目錄
在這裏插入圖片描述
5.配置nginx服務

[root@server1 nginx-1.14.0]# cd /usr/local/lnmp/
[root@server1 lnmp]# ls
mysql  nginx  php
[root@server1 lnmp]# cd nginx/
[root@server1 nginx]# ls
conf  html  logs  sbin
[root@server1 nginx]# cd conf/
[root@server1 conf]# ls
fastcgi.conf            koi-win             scgi_params
fastcgi.conf.default    mime.types          scgi_params.default
fastcgi_params          mime.types.default  uwsgi_params
fastcgi_params.default  nginx.conf          uwsgi_params.default
koi-utf                 nginx.conf.default  win-utf
[root@server1 conf]# vim nginx.conf

在這裏插入圖片描述

  2 user  nginx nginx;
  3 worker_processes  2;

 43         location / {
 44             root   html;
 45             index  index.php index.html index.htm;
 46         }

 65         location ~ \.php$ {
 66             root           html;
 67             fastcgi_pass   127.0.0.1:9000;
 68             fastcgi_index  index.php;
 69         #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
 70             include        fastcgi.conf;
 71         }

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
切換到nginx/sbin目錄下可以進行語法檢測,檢查配置文件中有沒有語法問題

[root@server1 conf]# cd ..
[root@server1 nginx]# ls
conf  html  logs  sbin
[root@server1 nginx]# cd sbin/
[root@server1 sbin]# ls
nginx
[root@server1 sbin]# ./nginx -t
nginx: the configuration file /usr/local/lnmp/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/lnmp/nginx/conf/nginx.conf test is successful
[root@server1 sbin]# 

在這裏插入圖片描述
-v查看版本號

[root@server1 sbin]# ./nginx -v
nginx version: nginx/

在這裏插入圖片描述
-V查看編譯環境

[root@server1 sbin]# ./nginx -V
nginx version: nginx/
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) 
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/usr/local/lnmp/nginx --with-threads --with-file-aio 
--with-http_ssl_module --with-http_stub_status_module --user=nginx --group=nginx

在這裏插入圖片描述
6.創建一個軟連接可以直接使用nginx命令

[root@server1 sbin]# ln -s /usr/local/lnmp/nginx/sbin/nginx  /usr/local/sbin/
[root@server1 sbin]# 
[root@server1 sbin]# nginx -t
nginx: the configuration file /usr/local/lnmp/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/lnmp/nginx/conf/nginx.conf test is successful

在這裏插入圖片描述
7.打開服務查看端口號

[root@server1 sbin]# nginx
[root@server1 sbin]# netstat -tnlp

在這裏插入圖片描述
打開服務後可以看到多出了幾個子目錄

[root@server1 sbin]# cd ..
[root@server1 nginx]# ls
client_body_temp  fastcgi_temp  logs        sbin       uwsgi_temp
conf              html          proxy_temp  scgi_temp

在這裏插入圖片描述
8.打開瀏覽器,訪問測試
出現nginx的頁面
在這裏插入圖片描述
9.編輯一個php文件,瀏覽器訪問測試

[root@server1 sbin]# cd ..
[root@server1 nginx]# ls
client_body_temp  fastcgi_temp  logs        sbin       uwsgi_temp
conf              html          proxy_temp  scgi_temp
[root@server1 nginx]# cd html/
[root@server1 html]# ls
50x.html  index.html
[root@server1 html]# vim index.php
[root@server1 html]# ls
50x.html  index.html  index.php

在這裏插入圖片描述

<?php
phpinfo()
?>

在這裏插入圖片描述
瀏覽器中刷新後出現php頁面,說明nginx和php結合成功

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章