搭建LNMP架構的辛酸歷程-----源碼編譯MYSQL,PHP,nginx
1.LNMP是什麼?
LNMP = Linux+Nginx+Mysql+PHP
LNMP代表的就是:Linux系統下Nginx+MySQL+PHP這種網站服務器架構。
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數據庫的源碼編譯
第一步:解壓安裝 mysql
解壓安裝 mysql:
tar zxf mysql-boost-5.7.30.tar.gz
第二步:創建 mysql 用戶
創建 mysql 用戶:
useradd -s /sbin/nologin -M mysql
第三步:編譯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端口
根據提示解決依賴性問題:
yum install -y gcc gcc-c++ -y
重新編譯:
又出現報錯
解決辦法:
缺少 -DWITH_BOOST=<directory>參數
重新編譯時加上下面的參數:
-DWITH_BOOST=boost/boost_1_59_0/
注意:在解決問題之前,,,一定一定要重新編譯時,需要清除原來的對象文件和緩存信息(!!!!!)
重新編譯時,需要清除原來的對象文件和緩存信息:
make clean
rm -fr CmakeCache.txt
繼續編譯動作:
又出錯了
yum install openssl-devel -y
安裝之後,先清除對象文件和緩存,在進行編譯
又錯了
yum install ncurses-devel -y
安裝之後,先清除對象文件和緩存,在進行編譯
編譯成功,但是有一個警告!!!
解決:
yum install -y bison
第四步:安裝
安裝:
make && make install
安裝完成!!!!
第五步:修改權限
修改權限:
cd /usr/local/lnmp/mysql
mkdir data
chown -R root .
chown -R mysql data
ln -s /usr/local/lnmp/mysql/bin/* /usr/local/bin/
第六步:複製配置文件
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
第七步:初始化
mysqld --user=mysql --initialize #以mysql 用戶身份初始化
注意:初始化會生成一個臨時密碼,用於登錄 mysql(要記住此密碼)
比如:2020-05-05T16:19:05.101684Z 1 [Note] A temporary password is generated for root@localhost: g%KBW3mygi9G
g%KBW3mygi9G就是臨時密碼
啓動mysql:
systemctl start mysqld
進入 mysql:
mysql -uroot -pg%KBW3mygi9G
所以這時候需要進行安全初始化
mysql_secure_installation #然後會提示是否啓用密碼檢測插件,直接回車不啓用,否則會要求密碼有大小寫和特殊字符等要求;剩餘全部選 y
mysql安裝配置完成!!!!!!!!!!
4.PHP源碼編譯
第一步:解壓安裝包
解壓安裝包:
tar zxf php-7.4.1.tar.gz
第二部:進入解壓後的目錄,開始編譯
./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
第三步:根據編譯過程中的報錯逐步解決依賴性
yum install -y libxml2-devel
繼續編譯:
yum install -y sqlite-devel.x86_64
繼續:
yum install -y libpng-devel
繼續:
這個包yum倉庫裏面沒有,所以需要下載,下載之後安裝
繼續:
第四步:安裝
make && make install
安裝完成!!!!!!!
第五步:拷貝更改配置文件
cd /usr/local/lnmp/php/etc
cp php-fpm.conf.default php-fpm.conf
vim php-fpm.conf #開啓17行:pid = run/php-fpm.pid
第六步:拷貝子配置文件
cd /usr/local/lnmp/php/etc/php-fpm.d
cp www.conf.default www.conf
vim www.conf #更改23和24行內容如下
user = nginx
group = nginx
第七步:拷貝更改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
第八步:拷貝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 #添加執行權限
注意:需要手動創建nginx用戶,不然啓動失敗
useradd -u 900 nginx
php安裝配置完成!!!!!!!!!
5.nginx的源碼編譯
第一步:解壓
解壓安裝包
tar zxf nginx-1.18.0.tar.gz
第二步:去掉nginx的版本號
cd /root/lnmp/nginx-1.18.0/src/core
vim nginx.h #去掉版本號,防止攻擊
第三步:關閉debug日誌
因爲debug的日誌非常多,企業中一般不需要開啓
vim auto/cc/gcc
做如下修改:
# debug
#CFLAGS="$CFLAGS -g" (將這2行註釋調,關閉debug)
第四步:編譯安裝
./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module --user=nginx --group=nginx
make && make install
第五步:修改nginx配置文件,開啓php模塊
cd /usr/local/lnmp/nginx/conf
vim nginx.conf
將nginx啓動腳本鏈接到/usr/local/sbin/
ln -s /usr/local/lnmp/nginx/sbin/nginx /usr/local/sbin/
第六步:開啓nginx
開啓nginx:
nginx -t ##檢測語法
nginx
這裏出錯的原因是之前裝過apache並且開啓着,80端口被佔着,所以關閉就行
開啓成功之後測試:
在nginx默認發佈目錄添加index.php
vim /usr/local/lnmp/nginx/html/index.php
寫入:
<?php
phpinfo()
?>
nginx配置完成!!!!!!!!!!!