【網絡運維】Linux:LNMP 項目實踐

LNMP 項目實踐

簡介:什么是 LAMP/LNMP

LAMPLinux+Apache+Mysql/Mariadb+PHP/Python/Perl。

LNMPLinux+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 工作原理

在這里插入圖片描述

  1. 客戶端通過HTTP協議請求web服務器資源

  2. web 服務器根據資源類型進行處理:

    • 靜態資源:web直接把資源返回至客戶端。

    • 動態資源:通過指定的通訊方式將腳本網頁交給后端程序執行。如果運算期間需要連接mysql數據庫,則通過mysql連接器連接mysql。后端程序將運算結果返回給web服務。

  3. web服務將結果返回給客戶端。

PHP 與 WEB 協同工作模式

  1. CGI:Web 進程動態調用相應腳本解釋器執行動態頁面 ,執行完后再釋放。特點:性能差。
  2. Modules:Web 進程動態加載相應模塊執行動態頁面 。特點:性能較好。
  3. FastCGI:后端進程獨立運行管理,通過獨立的網絡套接字接口接收Web進程傳過來的請求。特點:真正地實現前后端分離。適合于性能要求比較高的場景。Web 服務器需要開啟反向代理功能,將請求轉發到后端服務器。
  • 本文主要講解在LNMP模式下配置服務器的方法及步驟。

單個服務器整合(ALL-IN-ONE)

以部署 wordpress 應用為例。

實驗環境
主機名IP 地址角色
blog.furongwang.cloud10.1.8.10all

以部署 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.cloud10.1.8.21apache
php.furongwang.cloud10.1.8.22php
db.furongwang.cloud10.1.8.23mariadb
storage.furongwang.cloud10.1.8.24nfs

所有節點關閉防火墻和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/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/918534.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/918534.shtml
英文地址,請注明出處:http://en.pswp.cn/news/918534.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

用 Docker 安裝并啟動 MySQL:從零到實戰的完整指南

用 Docker 安裝并啟動 MySQL&#xff1a;從零到實戰的完整指南MySQL 是目前最流行的關系型數據庫之一&#xff0c;廣泛應用于各類應用系統中。使用 Docker 部署 MySQL 可以極大簡化環境配置&#xff0c;保證開發、測試和生產環境的一致性。本文將詳細介紹如何使用 Docker 安裝、…

動態規劃----1.爬樓梯

70. 爬樓梯 - 力扣&#xff08;LeetCode&#xff09; /** 1階:1步,即1種; 2階:1步1步或直接2步,即2種 f(1) 1,f(2) 2 3階:由1階邁2步,或2階邁一步; 4階:由2階邁2步,或3階1步; n階:由n-2階邁2步,或n-1階邁1步 f(n) f(n - 1) f(n - 2) */ class Solution {/**1階:1步,即1種…

special topic 11 (1)

preface 雖然我知道專業課必須得學&#xff0c;但是要學的東西&#xff0c;好多&#xff0c;我對專業課很害怕&#xff0c;稍微往后挪一挪&#xff0c;今天學了兩個強化網課之后再學專業課吧。今天的目標是學完 11 到 14.任重道遠&#xff0c;加油&#xff01;從今天開始盡量早…

MTD和FTL的關系

在嵌入式存儲系統里&#xff0c;MTD&#xff08;Memory Technology Device&#xff09;和 FTL&#xff08;Flash Translation Layer&#xff09;是上下兩層、互相配合的概念。你可以把它想成**“原始硬件接口”和“硬盤驅動”**的關系。1. MTD 是什么定位&#xff1a;內核里對原…

自動駕駛 HIL 測試:構建 “以假亂真” 的實時數據注入系統

01 引言在端到端自動駕駛的研發競賽中&#xff0c;算法的迭代速度遠超物理世界的測試能力。單純依賴路測不僅成本高昂、周期漫長&#xff0c;更無法窮盡決定系統安全性的關鍵邊緣場景&#xff08;Corner Cases&#xff09;。因此&#xff0c;硬件在環&#xff08;HIL&#xff0…

jdk升級

列出所有的jdk版本 /usr/libexec/java_home -V 永久切換版本 export JAVA_HOME(/usr/libexec/javahome?v11)exportPATH(/usr/libexec/java_home -v 11) export PATH(/usr/libexec/javah?ome?v11)exportPATHJAVA_HOME/bin:$PATH 保存后執行 source ~/.zshrc

Openlayers基礎教程|從前端框架到GIS開發系列課程(24)openlayers結合canva繪制矩形繪制線

本章節講解Canvas如何結合 Openlayer 使用&#xff0c;首先我們講解Canvas的繪圖基礎。我們初始化地圖的時候可以看見&#xff0c;實際上Openlayer的地圖就是用Canvas實現繪制的。Canvas繪制基本概念什么是canvas&#xff1f;HTML5 <canvas> 元素用于圖形的繪制&#…

深度學習——01 深度學習簡介

1 什么是深度學習&#xff1f;人工智能是個大范疇&#xff0c;目標是打造智能機器和程序&#xff1b; 機器學習是實現人工智能的一種途徑&#xff0c;它能讓機器在不被明確編程的情況下自主學習&#xff1b;而深度學習&#xff0c;是機器學習的一個分支&#xff0c;它是基于深度…

自然語言處理( NLP)基礎

一、基本概念自然語言處理也就是Natural Language Processing&#xff0c;簡稱NLP。NLP就是人工只能和語言學領域的一個分支&#xff0c;涉及到計算機與人類語言之間的相互作用。主要目標是讓計算機能夠理解、解釋和生成人類語言的數據。1 自然語言處理的基本介紹NLP包括但不限…

云原生作業(nginx)

目錄 1 Web 服務基礎介紹 1.1 Web 服務介紹 1.1.1 Apache 經典的 Web 服務端 1.1.2 Nginx-高性能的 Web 服務端 1.1.3 用戶訪問體驗和性能 1.1.4 服務端 I/O 流程 1.2 I/O 模型 1.2.1 I/O 模型相關概念 1.2.2 網絡 I/O 模型 1.2.3 五種 IO 對比 1.2.4 I/O 的具體實現…

NY198NY203美光固態閃存NY215NY216

NY198NY203美光固態閃存NY215NY216技術架構與核心創新突破美光NY系列&#xff08;含NY198/NY203/NY215/NY216&#xff09;作為新一代企業級存儲解決方案&#xff0c;其底層采用232層NAND閃存三維堆疊工藝&#xff0c;如同垂直建造數字世界的摩天大樓&#xff0c;在有限芯片面積…

後端開發技術教學(四) 數據交互延伸

書接上回&#xff1a;後端開發技術教學(三) 表單提交、數據處理-CSDN博客 必要資源&#xff1a; trae中文版下載網址: TRAE - The Real AI Engineer phpStudy 2018 : phpStudy - Windows 一鍵部署 PHP 開發環境 小皮出品 前言 大家好&#xff0c;我是小楓。書接上期說到的後…

華清遠見25072班C語言學習day7

重點內容&#xff1a;二維整形數組&#xff1a;定義&#xff1a;數據類型 數組名[行數][列數];數組中元素的訪問&#xff1a;通過行標和列標來訪問、行標從0開始&#xff0c;列標從0開始初始化和賦值&#xff1a;int arr1[2][3]{1,2,3,4,5,6}; -->二維數組完全初始化int arr…

FPGA實現Aurora 64B66B數據回環傳輸,基于GTX高速收發器,提供2套工程源碼和技術支持

目錄1、前言Aurora 64B66B是啥&#xff1f;官方有Example&#xff0c;為何要用你這個&#xff1f;工程概述免責聲明2、相關方案推薦我已有的所有工程源碼總目錄----方便你快速找到自己喜歡的項目我這里已有的 GT 高速接口解決方案本方案在Aurora 8B10B上的應用3、工程詳細設計方…

實用硬件設計規范要點-原理圖

此處所涉及的并非指導硬件工程師如何繪制原理圖&#xff0c;而是旨在規范原理圖的模板&#xff0c;統一原理圖的設計方式&#xff0c;確保原理圖具備良好的可閱讀性&#xff0c;并統一與下一環節——PCB LAYOUT的接口。具體的硬件設計方法&#xff0c;諸位需在未來的工作中加以…

用 Apache Iceberg 與 Apache Spark 在 Google Cloud 打造高性能、可擴展的數據湖倉

大數據分析版圖不斷演進&#xff0c;組織正尋求更靈活、可擴展且具成本效益的方式來管理與分析海量數據。這一追求催生了數據湖倉范式&#xff0c;它將數據湖的低成本存儲與靈活性&#xff0c;與數據倉庫的數據管理能力和事務一致性相結合。站在這場變革中心的是 Apache Iceber…

【PyTorch學習筆記 - 02】 Datasets DataLoaders

前言 處理數據樣本的代碼可能會變得雜亂無章且難以維護&#xff1b;為了獲得更好的可讀性和模塊化&#xff0c;我們理想的情況是將數據集代碼與模型訓練代碼解耦。PyTorch 提供了兩個數據處理類&#xff1a; torch.utils.data.DataLoader 和 torch.utils.data.Dataset&#x…

JavaWeb 30 天入門:第七天 —— 異常處理機制

在前六天的學習中&#xff0c;我們掌握了 Java 的基礎語法、面向對象核心特性、抽象類與接口等知識。今天我們將學習 Java 中的異常處理機制&#xff0c;這是保證程序健壯性的關鍵技術。在 JavaWeb 開發中&#xff0c;無論是用戶輸入錯誤、數據庫連接失敗還是網絡異常&#xff…

編譯器默認生成的c++類六大成員函數

編譯器默認生成的c類六大成員函數 編譯器默認生成的六大成員函數 當你定義一個空類時&#xff0c;例如&#xff1a; class Empty {};如果代碼中沒有顯式定義任何成員函數&#xff0c;C編譯器會在需要時&#xff08;例如&#xff0c;代碼中實際調用了這些函數&#xff09;為你…

人工智能概念:常見的大模型微調方法

文章目錄一、微調技術的底層邏輯1.1 預訓練與微調的關系1.2 核心目標&#xff1a;適配任務與數據二、經典微調方法詳解2.1 全量微調&#xff08;Full Fine-Tuning&#xff09;2.2 凍結層微調&#xff08;Layer-Freezing Fine-Tuning&#xff09;2.3 參數高效微調&#xff08;Pa…