LNMP 項目實踐
簡介:什么是 LAMP/LNMP
LAMP:Linux+Apache+Mysql/Mariadb+PHP/Python/Perl。
LNMP:Linux+Nginx+Mysql/Mariadb+PHP/Python/Perl。
- Linux:操作系統,提供程序運行基礎。
- Apache/Nginx:Web 服務器,提供網頁訪問。
- Mysql/Mariadb:數據庫,提供數據管理。
- PHP/Python/Perl:腳本語言,提供動態執行生成。
PHP FastCGI 進程管理器,是PHP的一個擴展模塊,用于管理PHP 進程池的軟件,用于接受web服務器的請求。PHP-FPM 全名 PHP FastCGI Process Manager,作為FastCGI進程管理器,與Web服務器(例如Nginx、Apache等)配合使用。
PHP-FPM的主要功能是管理和調度PHP腳本的執行。它通過創建和管理PHP進程池來處理PHP請求。每個PHP進程池中運行多個PHP-FPM進程,每個進程可以處理一個或多個PHP請求。PHP-FPM會根據配置的參數來管理這些進程的數量、生命周期和資源分配。
PHP-FPM提供了一些高級功能,例如進程池的動態調整、請求限制和超時控制、進程重生、日志記錄等。它還支持基于Unix域套接字或TCP/IP套接字的進程間通信,以及基于文件和共享內存的進程管理。
LAMP/LNMP 工作原理
-
客戶端通過HTTP協議請求web服務器資源
-
web 服務器根據資源類型進行處理:
-
靜態資源:web直接把資源返回至客戶端。
-
動態資源:通過指定的通訊方式將腳本網頁交給后端程序執行。如果運算期間需要連接mysql數據庫,則通過mysql連接器連接mysql。后端程序將運算結果返回給web服務。
-
-
web服務將結果返回給客戶端。
PHP 與 WEB 協同工作模式
- CGI:Web 進程動態調用相應腳本解釋器執行動態頁面 ,執行完后再釋放。特點:性能差。
- Modules:Web 進程動態加載相應模塊執行動態頁面 。特點:性能較好。
- FastCGI:后端進程獨立運行管理,通過獨立的網絡套接字接口接收Web進程傳過來的請求。特點:真正地實現前后端分離。適合于性能要求比較高的場景。Web 服務器需要開啟反向代理功能,將請求轉發到后端服務器。
- 本文主要講解在LNMP模式下配置服務器的方法及步驟。
單個服務器整合(ALL-IN-ONE)
以部署 wordpress 應用為例。
實驗環境
主機名 | IP 地址 | 角色 |
---|---|---|
blog.furongwang.cloud | 10.1.8.10 | all |
以部署 wordpress 應用為例。
部署數據庫
# 安裝服務端
[root@blog ~]# yum install -y mariadb-server# 啟用并啟動服務
[root@blog ~]# systemctl enable --now mariadb# 配置防火墻
[root@blog ~]# firewall-cmd --permanent --add-service=mysql
[root@blog ~]# firewall-cmd --reload
# 或關閉防火墻# 加固 MariaDB
[root@blog ~]# mysql_secure_installation
# 交互式提示您進行更改,包括:
# - 為root帳戶設置密碼,例如redhat。
# - 禁止root帳戶從本地主機外部訪問數據庫。
# - 刪除匿名用戶帳戶。
# - 刪除用于演示的test數據庫。 # 關閉SELinux服務
[root@blog ~]# setenforce 0
準備數據庫
[root@blog ~]# mysql -uroot -predhat
mysql> CREATE DATABASE wordpress;
mysql> CREATE USER wordpress@'%' identified by '123';
mysql> GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress'@'%';
mysql> FLUSH PRIVILEGES;
mysql> exit
部署 Nginx 服務
[root@blog ~]# yum install -y nginx
[root@blog ~]# echo 'Hello World !' > /usr/share/nginx/html/index.html
[root@blog ~]# systemctl enable nginx --now
部署 PHP 服務
部署 php 服務
[root@blog ~]# yum install -y php php-fpm php-mysqlnd
[root@blog ~]# systemctl enable php-fpm.service --now# 修改配置文件
[root@blog ~]# vim /etc/nginx/default.d/php.conf
location ~ \.php$ {try_files $uri =404;fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;
}[root@blog ~]# systemctl restart nginx
準備 php 測試文件
# 準備 index.php
[root@blog ~]# cat > index.php <<EOF
<?phpecho "<h1>Hello World !</h1>\n";
?>
EOF# 準備 test-mysql.php
[root@blog ~]# cat > test-mysql.php <<'EOF'
<?php$link=mysqli_connect('10.1.8.10','wordpress','123');if($link)echo "<h1>Connect Mysql Success !</h1>\n";elseecho "<h1>Connect Mysql Failed !</h1>\n";$link->close();
?>
EOF# 準備 info.php
[root@blog ~]# cat > info.php <<EOF
<?phpphpinfo()
?>
EOF# 移動到 Nginx 服務器默認主目錄
[root@blog ~]# mv *.php /usr/share/nginx/html
php 程序測試
[root@blog ~]# php -f index.php
<h1>Hello World !</h1>[root@blog ~]# php -f test-mysql.php
<h1>Connect Mysql Success !</h1>
瀏覽器測試:進入以下網址
blog.furongwang.cloud/index.php
http://blog.furongwang.cloud/test-mysql.php
部署 wordpress 應用
下載 wordpress,上傳到家目錄。
# 如果 Web 服務是 Nginx,則解壓文件到/usr/share/nginx/html
[root@blog ~]# unzip -o wordpress-4.9.4-zh_CN.zip -d /usr/share/nginx/html
[root@blog ~]# chown -R nginx:nginx /usr/share/nginx/html/wordpress# php-fpm 進程默認以 apache 用戶身份運行,修改運行用戶為 nginx,并重啟服務
[root@blog ~]# vim /etc/php-fpm.d/www.conf
user=nginx
group=nginx
[root@blog ~]# systemctl restart php-fpm
客戶端配置 blog.furongwang.cloud 名稱解析。訪問http://blog.furongwang.cloud/wordpress/
根據提示創建文件,然后單擊現在安裝。
分別部署服務器(Standalone)
以部署 wordpress 應用為例。
實驗環境
主機名 | IP 地址 | 角色 |
---|---|---|
www.furongwang.cloud | 10.1.8.21 | apache |
php.furongwang.cloud | 10.1.8.22 | php |
db.furongwang.cloud | 10.1.8.23 | mariadb |
storage.furongwang.cloud | 10.1.8.24 | nfs |
所有節點關閉防火墻和SELinux。
預配置
所有節點配置名稱解析:
[root@all-node ~ ]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain610.1.8.21 www.furongwang.cloud www
10.1.8.22 php.furongwang.cloud php
10.1.8.23 db.furongwang.cloud db
10.1.8.24 storage.furongwang.cloud storage
關閉防火墻和SELinux服務。
部署存儲服務器
由于靜態文件和動態文件沒有分開,所以 Web 服務器和 PHP 服務器都要存一份。實驗環境通過NFS共享提供wordpress應用。
下載 wordpress,上傳到家目錄。
[root@storage ~]# yum install -y nfs-utils
[root@storage ~]# mkdir -m 777 /www
[root@storage ~]# echo '/www 10.1.8.0/24(rw)' > /etc/exports
[root@storage ~]# systemctl enable nfs-server.service --now# 準備 wordpress資源
[root@storage ~]# unzip -o wordpress-4.9.4-zh_CN.zip -d /www/# 準備網頁測試文件
[root@storage ~]# echo 'Hello World !' > /www/index.html
[root@storage ~]# cat > /www/index.php <<EOF
<?phpecho "<h1>Hello World !</h1>\n";
?>
EOF[root@storage ~]# cat > /www/test-mysql.php <<'EOF'
<?php$link=mysqli_connect('db.furongwang.cloud','wordpress','123');if($link)echo "<h1>Connect Mysql Success !</h1>\n";elseecho "<h1>Connect Mysql Failed !</h1>\n";$link->close();
?>
EOF[root@storage ~]# cat > /www/info.php <<EOF
<?phpphpinfo();
?>
EOF
部署數據庫服務器
[root@db ~]# yum install -y mariadb-server
[root@db ~]# systemctl enable mariadb --now# 加固 MariaDB
[root@blog ~]# mysql_secure_installation
# 交互式提示您進行更改,包括:
# - 為root帳戶設置密碼,例如redhat。
# - 禁止root帳戶從本地主機外部訪問數據庫。
# - 刪除匿名用戶帳戶。
# - 刪除用于演示的test數據庫。 # 準備wordpress數據庫和用戶
[root@db ~]# mysql -uroot -predhat
mysql> CREATE DATABASE wordpress;
mysql> CREATE USER wordpress@'%' identified by '123';
mysql> GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress'@'%';
mysql> FLUSH PRIVILEGES;
mysql> exit
部署 Nginx 服務器
# 部署 Nginx 服務
[root@www ~]# yum install -y nginx
[root@www ~]# systemctl enable nginx --now# 安裝 nfs 工具
[root@www ~]# yum install -y nfs-utils# 掛載存儲
[root@www ~]# echo 'storage.furongwang.cloud:/www /usr/share/nginx/html nfs defaults 0 0' >> /etc/fstab
[root@www ~]# mount /usr/share/nginx/html/
[root@www ~]# df -h/usr/share/nginx/html/
Filesystem Size Used Avail Use% Mounted on
storage.furongwang.cloud:/www 64G 3.2G 61G 5% /usr/share/nginx/html
[root@www ~]# ls /usr/share/nginx/html/
index.html index.php info.php test-mysql.php wordpress
部署 PHP 服務器
部署 php 服務
[root@php ~]# yum install -y php php-fpm php-mysqlnd
[root@php ~]# vim /etc/php-fpm.d/www.conf
#使用;號注釋掉原有listen行
;listen = 127.0.0.1:9000
# 新增listen 監聽所有ip的9000端口
listen = 9000
# 支持監聽特定ip的9000端口,例如listen = 10.1.8.22:9000# 使用;號注釋掉原有 listen.allowed_clients 行
# 允許所有客戶端訪問
;listen.allowed_clients = 127.0.0.1[root@php ~]# systemctl enable php-fpm.service --now[root@php ~]# useradd -u 997 -s /sbin/nologin nginx
掛載存儲
# 安裝 nfs 工具
[root@php ~]# yum install -y nfs-utils# 掛載存儲
[root@php ~]# echo 'storage.furongwang.cloud:/www /www nfs defaults 0 0' >> /etc/fstab
[root@php ~]# mkdir /www
[root@php ~]# mount /www
[root@php ~]# df -h /www
Filesystem Size Used Avail Use% Mounted on
storage.furongwang.cloud:/www 50G 4.6G 47G 5% /www
[root@php ~]# ls /www
index.html index.php info.php test-mysql.php wordpress
php 程序測試
[root@php ~]# php /www/index.php
<h1>Hello World !</h1>[root@php ~]# php /www/test-mysql.php
<h1>Connect Mysql Success !</h1># 執行 info.php 的輸出內容太多,這里省略。
配置 Nginx 對接 PHP
[root@www ~]# cat > /etc/nginx/conf.d/vhost-www.conf <<'EOF'
server {listen 80;server_name www.furongwang.cloud;# 靜態資源處理location / {root /usr/share/nginx/html;index index.html index.htm index.php;}# PHP 請求處理location ~ \.php$ {# 配置 PHP-FPM 監聽的地址和端口fastcgi_pass php.furongwang.cloud:9000;fastcgi_index index.php;# 配置 php 服務器上 wordpress 應用所在位置fastcgi_param SCRIPT_FILENAME /www/$fastcgi_script_name;include fastcgi_params;}
}
EOF# 重啟服務
[root@www ~]# systemctl restart nginx
配置存儲權限
# 更改擁有者為nginx對應的uid
[root@storage ~]# chown -R 997 /www# php-fpm 進程默認以 apache 用戶身份運行,修改運行用戶為 nginx,并重啟服務
[root@php ~]# useradd -u 997 -s /sbin/nologin nginx
[root@php ~]# vim /etc/php-fpm.d/www.conf
user=nginx
group=nginx
[root@php ~]# systemctl restart php-fpm
測試應用
Windows客戶端配置hosts文件,添加 www.furongwang.cloud 名稱解析。
訪問http://www.furongwang.cloud/wordpress/