当前位置: 首页 > ds >正文

【网络运维】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.xdnf.cn/news/17743.html

相关文章:

  • redis常见的性能问题
  • 用Python实现Excel转PDF并去除Spire.XLS水印
  • [Ubuntu] xrdp共享连接 Ubuntu 屏幕 | xfce4
  • 数据结构 双链表与LinkedList
  • 【排序算法】⑦归并排序
  • Python笔记之`getattr`和`hasattr`用法详解
  • (二)vscode搭建espidf环境,配置wsl2
  • 【Altium designer】一键添加多个器件参数的“备注”
  • GPT-5越狱与零点击AI代理攻击:云与IoT系统面临新型威胁
  • 如何在 Ubuntu 24.04 LTS Linux 上安装和使用 Flatpak
  • 使用dockge 安装 photoprism
  • Nacos添加权限
  • Springboot-vue 地图展现
  • C++多态是如何实现
  • 【Altium designer】解决报错“Access violation at address...“
  • 机器学习第九课之DBSCAN算法
  • 【接口自动化测试】---YAML、JSON Schema
  • 02Vue3
  • github上传项目
  • 视频前处理技术全解析:从基础到前沿
  • Elasticsearch 官方 Node.js 从零到生产
  • docker安装Engine stopped
  • AVS Video Converter视频转换与编辑工具深度评测
  • 功能、延迟、部署、成本全解析:本地化音视频 SDK 对比 云端方案
  • Go 多进程编程-socket(套接字)
  • 定制化4G专网架构,满足多行业专属需求
  • 区间修改 - 差分
  • Kubernetes部署apisix的理论与最佳实践(一)
  • npm install报错~[master] npm install npm error code ERESOLVE npm err
  • 大数据系统架构模式:驾驭海量数据的工程范式