Table of Contents
LNMP定義
基於Linux操作系統,以Nginx作爲web服務器,Mysql作爲數據庫。Nginx會直接處理靜態請求,因爲Nginx本身不具備處理動態請求能力,它會把用戶的動態請求交給php服務(php-fpm)去處理,php服務可以和數據庫進行交互,將結果返回給Nginx,最終返回給用戶
流程:
靜態請求:client -> nginx(location) -> html -> client
動態請求:client -> nginx(location) -> fastcgi(快速通用網關接口) -> php-fpm(管理進程) -> wrapper(工作進程) -> php -> mysql(php連接數據庫) -> php -> php-fpm -> fastcgi -> nginx -> http -> client
系統環境
系統:rhel7.6
安裝包版本:
- nginx-1.18.0
- mysql-boost-5.7.30
- php-7.4.5
LNMP安裝部署
安裝Nginx
解壓源碼包並進行語法檢測[通過字體顏色可以查看是否寫錯]
添加語法檢測:
編譯
yum install -y gcc gcc-c++ pcre-devel openssl-devel
[root@node1 nginx-1.18.0]# ./configure --prefix=/usr/local/lnmp/nginx \
> --with-http_ssl_module \
> --with-http_stub_status_module \
> --user=nginx --group=nginx
make && make install
沒有報錯,make成功,同時在objs目錄下又添加了很多內容
/usr/local/lnmp/nginx/sbin/nginx -V # 查看nginx系統版本內容
但是此時我們發現nginx版本號完全顯示出來,這在企業中是相對比較危險的,那麼接下來我們將其隱藏
隱藏版本號
vim src/core/nginx.h
關閉debug,減少編譯代碼量
vim auto/cc/gcc
關閉前:
關閉後:
修改nginx配置文件
# 默認不支持動態頁面訪問
cd /usr/local/lnmp/nginx/conf
vim nginx.conf
###
打開php模塊,並進行修改
修改訪問順序,首先訪問index.php,沒有再進行訪問index.html
###
做軟鏈接來方便操作,直接通過nginx來充當命令
ln -s /usr/local/lnmp/nginx/sbin/nginx /usr/local/sbin/
開啓nginx
nginx # 開啓nginx
netstat -tnlp # 查看端口
安裝MySQL
安裝和更新部分官方文檔:https://dev.mysql.com/doc/refman/5.7/en/source-installation-methods.html
官網下載MySQL
這裏咱們不用最新版本,選擇5.7.30版本
image widget
解壓MySQL
編譯MySQL
之前我們編譯時通過./cofigure,但是我們可以看到,當前目錄下並沒有configure,這是因爲MySQL是通過cmake來編譯
useradd -s /sbin/nologin -M mysql # 創建MySQL用戶,用來啓動MySQL進程
yum install -y cmake # 安裝cmake用於編譯MySQL
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql \ # 安裝MySQL
-DMYSQL_UNIX_ADDR=/usr/local/lnmp/mysql/data/mysql.sock \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_USER=mysql \
-DMYSQL_TCP_PORT=3306
但是,這並不是結束,出現了錯誤
原因已經告知,缺少-DWITH_BOOST=<directory>模塊,添加該模塊再次運行
code snippet widget
並沒有結束,再次運行的結果仍然有錯誤,看錯誤提示,告知我們缺少ncurses-devel庫
yum install -y ncurses-devel
在這裏要注意,在重新預編譯時需要刪除上一次編譯的緩存文件CMakeCache.txt
rm -fr CMakeCache.txt
再次編譯
報錯,需要添加C++編譯器
yum install -y gcc-c++
清理緩存後再次編譯,出現一個warning
yum install -y bison
清理緩存,並再次編譯,編譯成功~編譯過程已經沒有錯誤
make && make install 安裝MySQL
安裝過程比較長,需要耐心等待一陣子。這裏我直接截取部分過程,代表已經安裝完成
配置過程一
- 創建data目錄(編譯時選擇的參數,sock存放路徑),並更改所屬爲mysql
cd /usr/local/lnmp/mysql/
mkdir data
chown -R mysql data
- 做軟鏈接
ln -s /usr/local/lnmp/mysql/bin/* /usr/local/bin/
這裏爲了後面可以快捷使用mysql,創建軟鏈接到/usr/local/bin/
- 修改配置文件一
cd mysql-test/include/ # 切換到配置文件目錄下
mv /etc/my.cnf /etc/my.cnf.bak # 將原先的/etc/my.cnf進行備份,命名爲/etc/my.cnf.bak
cp default_my.cnf /etc/my.cnf # 將default_my.cnf複製到/etc/目錄下,且命名爲my.cnf
vim /etc/my.cnf # 編譯過程中所指定的配置文件目錄
cd support-files/
cp -a mysql.server /etc/init.d/mysqld # 複製腳本
chmod +x /etc/init.d/mysqld # 增加執行權限
chkconfig mysqld on # 設置開機啓動
chkconfig --list # 查看設置詳情
systemctl status mysqld # 查看當前mysqld狀態
- 初始化
mysqld --user=mysql --initialize
- 啓動mysqld image widget
systemctl start mysqld
systemctl status mysqld
- 登錄mysql(這裏初始密碼即初始化時的默認密碼)
mysql -uroot -p # 登錄數據庫
- 重置密碼
mysql_secure_installation # 重置密碼,這裏我重置爲dsd
image widget
- 測試訪問mysql
mysql -uroot -p
配置過程二
- 修改配置文件
vim /etc/my.cnf #編譯時指定了配置文件目錄
- 初始化
./bin/mysqld --user=mysql --initialize
- 啓動服務
./support-files/mysql.server start
這裏我出現了下圖問題,不知道是不是大家都會出現,若出現可以參考一下我的解決辦法
mkdir /var/log/mariadb # 創建mariadb目錄
touch /var/log/mariadb/mariadb.log # 創建mariadb.log文件
chown -R mysql /var/log/mariadb/ # 修改使用者權限
啓動成功~~~
- 重置密碼
./bin/mysql_secure_installation
image widget
安裝php
解壓
編譯
./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 libxml2-devel.x86_64 sqlite-devel.x86_64 libpng-devel.x86_64 -y
網上下載oniguruma包,並進行安裝
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/o/oniguruma-5.9.5-3.el7.x86_64.rpm
## 下載oniguruma二進制包
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/o/oniguruma-devel-5.9.5-3.el7.x86_64.rpm
## 下載oniguruma-devel二進制包
yum install oniguruma-5.9.5-3.el7.x86_64.rpm oniguruma-devel-5.9.5-3.el7.x86_64.rpm -y
依賴安裝完成,我們重新進行編譯
編譯成功~
安裝
make && make install
編輯配置文件
- 修改php-fpm.conf配置文件
cp php-fpm.conf.default php-fpm.conf #備份默認配置文件1
vim php-fpm.conf
- 編輯擴展配置文件
cd php-fpm.d/
cp www.conf.default www.conf # 備份默認配置文件2
vim www.conf # 編輯配置文件2
###
nginx只能處理靜態請求,當在接收到動態請求時會傳給php,因此php這裏接收的就是nginx的信息
###
- 修改php主配置文件
cd php-7.4.5/
cp php.ini-production /usr/local/lnmp/php/etc/php.ini # 拷貝主配置文件到安裝路徑下
cd /usr/local/lnmp/php/etc/
vim php.ini # 編輯主配置文件
###
更改時區到上海
###
編輯啓動腳本
cd php-7.4.5/sapi/fpm
cp init.d.php-fpm /etc/init.d/php-fpm # 複製啓動腳本到/etc/init.d/目錄下
chmod +x /etc/init.d/php-fpm # 給該文件提供執行權限
/etc/init.d/php-fpm start
錯誤提示告知我們由於缺少nginx用戶,那麼我們就去新增一下
useradd -s /sbin/nologin -M nginx # 新增nginx用戶
/etc/init.d/php-fpm start # 啓動
netstat -tnlp # 查看我們開啓的端口
測試
cd /usr/local/lnmp/nginx/html
vim index.php
###
<?php
phpinfo() # 輸出php一個默認頁面
?>
###
訪問成功,顯示php的信息頁面