1. 程式人生 > 資料庫 >LNMP架構簡介及搭建(原始碼編譯Nginx,MYSQL,PHP)

LNMP架構簡介及搭建(原始碼編譯Nginx,MYSQL,PHP)

LNMP架構簡介及搭建(原始碼編譯Nginx,MYSQL,PHP)

1. 什麼是LNMP

LNMP是指一組通常一起使用來執行動態網站或者伺服器的自由軟體名稱首字母縮寫。L指Linux,N指Nginx,M一般指MySQL,也可以指MariaDB,P一般指PHP,也可以指Perl或Python。

一般來講,LNMP代表的就是:Linux系統下Nginx+MySQL+PHP這種網站伺服器架構。

LNMP = Linux+Nginx+Mysql+PHP

  • Linux是一類Unix計算機作業系統的統稱,是目前最流行的免費作業系統。代表版本有:debian、centos、ubuntu、fedora、gentoo等。
  • Nginx是一個高效能的HTTP和反向代理伺服器,也是一個IMAP/POP3/SMTP代理伺服器。
  • Mysql是一個小型關係型資料庫管理系統。
  • PHP是一種在伺服器端執行的嵌入HTML文件的指令碼語言。
  • 這四種軟體均為免費開源軟體,組合到一起,成為一個免費、高效、擴充套件性強的網站服務系統。

Nginx中的PHP是以fastcgi的方式結合Nginx的,可以理解為Nginx代理了PHP的fastcgi。

LNMP和LAMP唯一不同是指提供web服務的是Nginx而不是Apache:在Apache中,PHP是作為一個模組存在的。而在Nginx中,PHP是作為一個獨立服務存在的,這個服務叫做php-fpm. ;Nginx直接處理靜態請求,動態請求會轉發給php-fpm.

2. LNMP的工作原理

  • 瀏覽器傳送http request請求到伺服器(Nginx)
  • 伺服器響應並處理web請求,將一些靜態資源(CSS,圖片,視訊等)儲存伺服器上,然後將php指令碼通過介面傳輸協議(閘道器協議)PHP-FCGI(fast-cgi)傳輸給PHP-FPM(程序管理程式)
  • PHP-FPM不做處理,然後PHP-FPM呼叫PHP解析器程序,PHP解析器解析php指令碼資訊。
  • PHP解析器程序可以啟動多個,進行併發執行。然後將解析後的指令碼返回到PHP-FPM
  • PHP-FPM再通過fast-cgi的形式將指令碼資訊傳送給Nginx
  • 伺服器再通過Http response的形式傳送給瀏覽器。
  • 瀏覽器再進行解析與渲染然後進行呈現。

3. MYSQL資料庫的原始碼編譯

step1 解壓安裝 mysql:

tar zxf mysql-boost-5.7.28.tar.gz

step2 建立 mysql 使用者:

useradd -s /sbin/nologin -M mysql

step3 編譯MYSQL:
cmake跨平臺工具是用來預編譯mysql原始碼的,用於設定mysql的編譯引數。如:安裝目錄、資料存放目錄、字元編碼、排序規則等

yum install -y cmake	#編譯mysql需要用的包
cd mysql-5.7.28	#進入mysql解壓後的目錄
#以下命令為編譯:
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql \			#安裝位置
> -DMYSQL_UNIX_ADDR=/usr/local/lnmp/mysql/data/mysql.sock \ 	#指定套接字檔案位置
> -DEXTRA_CHARSETS=all \ 										#擴充套件字符集
> -DDEFAULT_CHARSET=utf8 \										#預設字符集
> -DDEFAULT_COLLATION=utf8_general_ci \							#預設字元校對
> -DWITH_INNOBASE_STORAGE_ENGINE=1 \							#安裝myisam 儲存引擎
> -DWITH_MYISAM_STORAGE_ENGINE=1 \								#安裝innodb儲存引擎
> -DWITH_MEMORY_STORAGE_ENGINE=1 \								#安裝memory儲存引擎
> -DWITH_READLINE=1 \											#支援readline庫
> -DENABLED_LOCAL_INFILE=1 \									#啟用載入本地資料
> -DMYSQL_USER=mysql \											#指定mysql執行使用者
> -DMYSQL_TCP_PORT=3306											#指定mysql埠

step4 根據提示解決依賴性問題:

yum install -y gcc gcc-c++ ncurses-devel openssl-devel -y

step5 可能會看到這樣的報錯:

CMake Error at cmake/boost.cmake:81 (MESSAGE):
You can download it with -DDOWNLOAD_BOOST=1 -DWITH_BOOST=<directory>
This CMake script will look for boost in <directory>. If it is not there,it will download and unpack it (in that directory) for you.
If you are inside a firewall,you may need to use an http proxy:
export http_proxy=http://example.com:80

解決:

缺少 -DWITH_BOOST=<directory>引數
重新編譯時加上下面的引數: 
-DWITH_BOOST=boost/boost_1_59_0/

重新編譯時,需要清除原來的物件檔案和快取資訊:

make clean
rm -fr CmakeCache.txt

後面編譯過程中可能會有一個 warnin:

CMake Warning at cmake/bison.cmake:20 (MESSAGE):
Bison executable not found in PATH
Call Stack (most recent call first):
sql/CMakeLists.txt:514 (INCLUDE)

解決:

yum install -y bison

step6 安裝:

make && make install ##如果 make 還有問題,刪除原來的目錄,重新解壓編譯(安裝過程較長) 

step7 修改許可權:

cd /usr/local/lnmp/mysql
mkdir data
chown -R root .
chown -R mysql data
ln -s /usr/local/lnmp/mysql/bin/* /usr/local/bin/

step8 複製配置檔案:

cd /usr/local/lnmp/mysql/mysql-test/include
cp default_my.cnf /etc/my.cnf
cd /usr/local/lnmp/mysql/support-files
cp -a mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig mysqld on
systemctl status mysqld

step9 初始化:

mysqld --user=mysql --initialize	#以mysql 使用者身份初始化
注意:初始化會生成一個臨時密碼,用於登入 mysql(要記住此密碼)
比如:2019-01-03T09:06:09.448851Z 1 [Note] A temporary password is generated
for root@localhost: r#9VqAoA/au
r#9VqAoA/au就是臨時密碼

step10 啟動mysql:

systemctl start mysqld

step11 進入 mysql:

mysql -uroot -pr#9VqAoA/au: #使用剛才的臨時密碼(會有報錯,所以需要安全初始化)

step12 安全初始化:

mysql_secure_installation	#然後會提示是否啟用密碼檢測外掛,直接回車不啟用,否則會要求密碼有大小寫和特殊字元等要求;剩餘全部選 y

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

mysql安裝配置完成

4. PHP原始碼編譯

step1 解壓安裝包:

tar zxf php-7.4.1.tar.gz

step2 解決依賴性:

yum -y install bzip2

step3 進入解壓後的目錄,開始編譯:

./configure --prefix=/usr/local/lnmp/php --with-config-file-path=/usr/local/lnmp/php/etc \
--with-mysqli=/usr/local/lnmp/mysql/bin/mysql_config \
--enable-soap \
--enable-mbstring=all \
--enable-sockets \
--with-pdo-mysql=/usr/local/lnmp/mysql \
--enable-gd \
--without-pear \
--enable-fpm

step4 根據編譯過程中的報錯逐步解決依賴性:
可能會需要安裝的包:

yum install -y libxml2-devel
yum install -y libpng-devel
yum install -y oniguruma-*

step5 安裝:

make && make install

step6 拷貝更改配置檔案:

cd /usr/local/lnmp/php/etc
cp php-fpm.conf.default php-fpm.conf
vim php-fpm.conf		#開啟17行:pid = run/php-fpm.pid

在這裡插入圖片描述
step7 拷貝子配置檔案:

cd /usr/local/lnmp/php/etc/php-fpm.d
cp www.conf.default www.conf
vim www.conf	#更改23和24行內容如下
user = nginx
group = nginx

在這裡插入圖片描述

在這裡插入圖片描述

step8 拷貝更改php主配置檔案:

cd php-7.4.1
cp php.ini-production /usr/local/lnmp/php/etc/php.ini
vim /usr/local/lnmp/php/etc/php.ini	#961行修改時區如下
date.timezone = Asia/Shanghai

在這裡插入圖片描述

step9 拷貝php啟動指令碼至/etc/init.d/:

cd /root/lnmp/php-7.4.1/sapi/fpm
cp init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm	#新增執行許可權

step10 啟動php:

/etc/init.d/php-fpm start

注意:
啟動報錯可能因為沒有 nginx 使用者,需要手動建立

useradd -u 900 nginx

在這裡插入圖片描述
php安裝配置完成

5. nginx的原始碼編譯

step1 解壓安裝包

tar zxf nginx-1.16.0.tar.gz

step2 去掉nginx的版本號:

cd /root/lnmp/nginx-1.16.0
vim src/core/nginx.h	

在這裡插入圖片描述

step3 關閉debug日至:

因為debug的日誌非常多,企業中一般不需要開啟

vim auto/cc/gcc
做如下修改:
# debug
#CFLAGS="$CFLAGS -g" (將這2行註釋調,關閉debug)

在這裡插入圖片描述

step4 編譯安裝 nginx:

./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module --user=nginx --group=nginx

step5 根據提示解決依賴性:
此處應該還需要安裝pcre-devel:

yum install pcre-devel -y

step6 安裝:

make && make install

step7 修改nginx配置檔案,開啟php模組:

cd /usr/local/lnmp/nginx/conf
vim nginx.conf

在這裡插入圖片描述
step8 將nginx啟動指令碼連結到/usr/local/sbin/:

ln -s /usr/local/lnmp/nginx/sbin/nginx /usr/local/sbin/

step9 開啟nginx:

nginx -t ##檢測語法
nginx

在這裡插入圖片描述

step10 測試:

嘗試訪問http://172.25.254.1	##是nginx預設頁面

在這裡插入圖片描述
在nginx預設釋出目錄新增index.php:

vim /usr/local/lnmp/nginx/html/index.php
寫入:
<?php
phpinfo()
?>

在這裡插入圖片描述
重新整理http://172.25.254.1可以看到php的預設頁面
在這裡插入圖片描述

nginx 安裝配置完成