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

LAMPLNMP 最佳实践

LAMP/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:脚本语言,提供动态执行生成。
    LAMP/LNMP 工作原理
    在这里插入图片描述
  1. 客户端通过HTTP协议请求web服务器资源

  2. web 服务器根据资源类型进行处理:

    • 静态资源:web直接把资源返回至客户端。

    • 动态资源:通过指定的通讯方式将脚本网页交给后端程序执行。如果运算期间需要连接mysql数据库,则通过mysql连接器连接mysql。后端程序将运算结果返回给web服务。

  3. web服务将结果返回给客户端。

可以把整个流程想象成一家餐厅的工作场景,这样就好理解啦:

角色对应

  • 客户端浏览器:就是来餐厅吃饭的顾客,想点餐、获取美食 。
  • Web 服务器:是餐厅里负责接待、传递需求的服务员,统筹处理顾客的各种要求 。
  • 静态资源:像餐厅里提前备好的凉菜、小食,不用现做,直接就能端给顾客 。
  • Php、perl、python:是后厨里负责做复杂菜品(动态内容)的厨师团队,能根据需求做出多样美味 。
  • mysql:是餐厅的食材仓库,存储着各种做菜用的原材料 。
  • http 协议:顾客和服务员交流用的 “点餐语言”,清晰说清想要啥 。
  • CGI/Fast CGI:服务员和厨师沟通的 “传菜通道”,把顾客对复杂菜品的需求准确传给厨师 。
  • php_mysql 驱动:厨师从食材仓库取原料用的 “工具”,方便快捷拿到做菜所需食材 。

工作流程

  1. 要静态资源时:顾客(客户端浏览器)用 “点餐语言”(http 协议)跟服务员(Web 服务器)说:“我要份现成的凉拌菜(静态资源)” 。服务员直接去凉菜区(静态资源)端来,通过 http 协议把菜给顾客,顾客就能享用啦。
  2. 要动态资源时:顾客说:“我要一份现做的特色炒菜(动态资源)” 。服务员(Web 服务器)接到需求,通过 “传菜通道”(CGI/Fast CGI)把做菜要求传给厨师团队(Php、perl、python)。厨师们需要从食材仓库(mysql)取原料,就用 “取料工具”(php_mysql 驱动)去仓库拿,然后精心做出特色菜(处理动态内容),做好后再通过服务员(Web 服务器),用 http 协议把菜给顾客,顾客就能吃到现做的美味咯。

整个 LAMP/LNMP 的工作流程,就像这样一家餐厅里,不同角色配合满足顾客(用户)需求,完成 “请求 - 处理 - 响应” 的过程,这样是不是就生动好懂多啦,就像在餐厅里走了一遍点餐、做菜、上菜的流程!

部署 Mysql 服务

部署软件

[root@server ~ 14:02:58]# yum install -y mariadb-server[root@server ~ 14:04:29]# systemctl enable --now mariadb[root@server ~ 14:05:54]# mysql_secure_installation 

准备数据库

[root@server ~ 14:06:35]# mysql -uroot -p123
mysql> CREATE DATABASE wordpress;
mysql> CREATE USER wp@'%' identified by '123';
mysql> GRANT ALL PRIVILEGES ON wordpress.* TO 'wp'@'%';
mysql> FLUSH PRIVILEGES;
mysql> exit
部署 Web 服务

不同类型 Web 服务器只需要部署一个。

部署 Apache

[root@server ~ ]# yum install -y httpd
[root@server ~ ]# echo 'ServerName blog.yy.cloud:80' >> /etc/httpd/conf/httpd.conf
[root@server ~ ]# echo 'Hello World !' > /var/www/html/index.html
[root@server ~ ]# systemctl enable httpd --now

部署 Nginx

[root@server ~ ]# yum install -y nginx
[root@server ~ ]# echo 'Hello World !' > /usr/share/nginx/html/index.html
[root@server ~ ]# systemctl enable nginx --now
部署 PHP 服务
部署 php 服务
[root@server ~ ]# yum install -y php php-fpm php-mysqlnd
[root@server ~ ]# systemctl enable php-fpm.service --now
[root@server ~ ]# systemctl restart httpd

准备 php 测试文件

# 准备 index.php
[root@server ~ ]# cat > index.php <<EOF
<?phpecho "<h1>Hello World !</h1>\n";
?>
EOF# 准备 test-mysql.php
[root@server ~ ]# cat > test-mysql.php <<'EOF'
<?php$link=mysqli_connect('10.1.8.20','wp','Laoma@123');if($link)echo "<h1>Connect Mysql Success !</h1>\n";elseecho "<h1>Connect Mysql Failed !</h1>\n";$link->close();
?>
EOF# 准备 info.php
[root@server ~ ]# cat > info.php <<EOF
<?phpphpinfo()
?>
EOF# Apache 服务器
[root@server ~ ]# cp *.php /var/www/html# Nginx 服务器
[root@server ~ ]# cp *.php /usr/share/nginx/html

php 程序测试

[root@server ~ ]# php -f index.php
<h1>Hello World !</h1>[root@server ~ ]# php -f test-mysql.php
<h1>Connect Mysql Success !</h1>

在这里插入图片描述

在这里插入图片描述

部署 wordpress 应用

下载wordpress,上传到家目录。

 [root@server ~ 15:03:49]#unzip -o wordpress-4.9.4-zh_CN.zip
[root@server ~ 15:03:49]# cp -r wordpress /usr/share/nginx/html/
[root@server ~ 15:03:57]# chown -R nginx:nginx /usr/share/nginx/html/wordpress/[root@server ~ 15:05:03]# vim /etc/php-fpm.d/www.conf
user=nginx
group=nginx
[root@server ~ 15:07:28]# systemctl restart php-fpm

在这里插入图片描述

Standalone

以部署 wordpress 应用为例。

实验环境
主机名IP 地址角色
www.yy.cloud10.1.8.21apache
php.yy.cloud10.1.8.22php
mysql.yy.cloud10.1.8.23mysql
nfs.yy.cloud10.1.8.24nfs

nfs 服务器提供共享存储 web 应用文件。

部署 NFS 服务器

由于静态文件和动态文件没有分开,所以 Web 服务器和 PHP 服务器都要存一份。实验环境通过NFS共享提供wordpress应用。

下载 wordpress,上传到家目录。

[root@storage ~ 16:22:26]# mkdir -m 777 /www
[root@storage ~ 16:25:35]# echo '/www 10.1.8.0/24(rw)' > /etc/exports[root@storage ~ 16:26:14]# systemctl enable nfs-server.service --now
# 准备 wordpress资源
[root@storage ~ 16:29:43]#unzip -o wordpress-4.9.4-zh_CN.zip -d /www/
# 准备网页测试文件
[root@storage ~ 16:28:26]# echo 'hello world !' > /www/index.html
[root@storage ~ 16:29:00]# cat > /www/index.php << EOF
> ?php
>   echo "<h1>Hello World !</h1>\n";
> ?>
> EOF
[root@storage ~ 16:29:43]# cat > /www/test-mysql.php << 'EOF'
> ?php
>   $link=mysqli_connect('mysql.yy.cloud','wp','123');
>   if($link)
>     echo "<h1>Connect Mysql Success !</h1>\n";
>   else
>     echo "<h1>Connect Mysql Failed !</h1>\n";
>   $link->close();
> ?>
> EOF
[root@storage ~ 16:30:43]# cat > /www/info.php << EOF
> ?php
>   phpinfo();
> ?>
> EOF

部署 Mysql 服务器

[root@db ~ 16:33:08]#yum install -y mysql-server
[root@db ~ 16:33:23]# systemctl enable mariadb --now# 准备wordpress数据库和用户
[root@db ~ 16:34:31]# mysql_secure_installation 
mysql> CREATE DATABASE wordpress;
mysql> CREATE USER yy@'%' identified by '123';
mysql> GRANT ALL PRIVILEGES ON wordpress.* TO 'yy'@'%';
mysql> FLUSH PRIVILEGES;
mysql> exit
部署 Web 服务器

不同类型 Web 服务器只需要部署一个。

部署 Nginx 服务

[root@www ~ 16:39:50]# yum install -y nginx
[root@www ~ 16:39:50]# systemctl enable nginx --now# 安装 nfs 工具(上述已完成)
[root@www ~ 16:39:50]# yum install -y nfs-utils
[root@www ~ 16:52:31]# echo 'storage.yy.cloud:/www /usr/share/nginx/html nfs defaults 0 0' >> /etc/fstab 
[root@www ~ 16:52:49]# systemctl daemon-reload 
[root@www ~ 16:53:45]# mount /usr/share/nginx/html/
[root@www ~ 16:55:26]# df
文件系统                   1K-块    已用     可用 已用% 挂载点
devtmpfs                  485772       0   485772    0% /dev
tmpfs                     497820       0   497820    0% /dev/shm
tmpfs                     497820    7820   490000    2% /run
tmpfs                     497820       0   497820    0% /sys/fs/cgroup
/dev/mapper/centos-root 52403200 1656804 50746396    4% /
/dev/sda1                1038336  142224   896112   14% /boot
tmpfs                      99564       0    99564    0% /run/user/0
storage.yy.cloud:/www   52403200 1690880 50712320    4% /usr/share/nginx/html
[root@www ~ 16:55:27]# ls /usr/share/nginx/html
index.html  index.php  info.php  test-mysql.php  wordpress
部署 PHP 服务器
部署 php 服务
[root@php ~ 17:00:37]#yum install -y php php-fpm php-mysqlnd
[root@php ~ 17:00:37]#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 ~17:02:31]# systemctl enable php-fpm.service --now[root@php ~17:02:31]# useradd -u 997 -s /sbin/nologin nginx

挂载存储

[root@php ~ 17:02:31]# yum install -y nfs-utils
[root@php ~ 17:00:37]# echo 'storage.yy.cloud:/www /www nfs defaults 0 0' >> /etc/fstab
[root@php ~ 17:01:34]# mkdir /www
[root@php ~ 17:01:41]# mount /www
[root@php ~ 17:01:47]# df -h /www
文件系统               容量  已用  可用 已用% 挂载点
storage.yy.cloud:/www   50G  1.7G   49G    4% /www
[root@php ~ 17:01:52]# ls /www
index.html  index.php  info.php  test-mysql.php  wordpress
[root@php ~ 17:01:58]# php /www/index.php
?phpecho "<h1>Hello World !</h1>\n";
?>#php 程序测试
[root@php ~ 17:02:14]# php /www/test-mysql.php
?php$link=mysqli_connect('mysql.yy.cloud','wp','123');if($link)echo "<h1>Connect Mysql Success !</h1>\n";elseecho "<h1>Connect Mysql Failed !</h1>\n";$link->close();
?>

配置 Nginx 对接 PHP

[root@www ~ 17:03:34]# cat > /etc/nginx/conf.d/vhost-www.conf << 'EOF'
> server {
>     listen 80;
>     server_name www.yy.cloud;
>  location / {
>         root /usr/share/nginx/html;
>         index index.html index.htm index.php;
>     }
> location ~ \.php$ {
>  fastcgi_pass php.yy.cloud:9000;
>         fastcgi_index index.php;
> fastcgi_param SCRIPT_FILENAME /www/$fastcgi_script_name;
>         include fastcgi_params;
>     }
> }
> EOF
#重启服务
[root@www ~ 17:04:55]# systemctl restart nginx

配置存储权限

# 更改拥有者为nginx对应的uid
[root@storage ~ 17:12:08]# chown -R 997 /www
# php-fpm 进程默认以 apache 用户身份运行,修改运行用户为 nginx,并重启服务
[root@php ~ 17:02:31]# useradd -u 997 -s /sbin/nologin nginx
[root@php ~ 17:16:01]# vim /etc/php-fpm.d/www.conf
user=nginx
group=nginx
[root@php ~ 17:17:15]# systemctl restart php-fpm

start nginx


配置存储权限```bash
# 更改拥有者为nginx对应的uid
[root@storage ~ 17:12:08]# chown -R 997 /www
# php-fpm 进程默认以 apache 用户身份运行,修改运行用户为 nginx,并重启服务
[root@php ~ 17:02:31]# useradd -u 997 -s /sbin/nologin nginx
[root@php ~ 17:16:01]# vim /etc/php-fpm.d/www.conf
user=nginx
group=nginx
[root@php ~ 17:17:15]# systemctl restart php-fpm
http://www.xdnf.cn/news/17541.html

相关文章:

  • 基于FPGA的热电偶测温数据采集系统,替代NI的产品(二)总体设计方案
  • Python Day27 HTML 核心知识笔记及例题分析
  • 【Kafka系列】第三篇| 在哪些场景下会选择使用 Kafka?
  • 自建Web应用防火墙(WAF)
  • React 19 通用 ECharts 组件
  • uni-app app端安卓和ios如何申请麦克风权限,唤起提醒弹框
  • 什么是网络准入控制系统?解析一款网络准入的详细功能
  • FPGA+护理:跨学科发展的探索(二)
  • 最短路问题从入门到负权最短路
  • 【算法专题训练】11、字符串中的变位词
  • “鱼书”深度学习进阶笔记(3)第四章
  • MLAG双活网络妙招:BGP + 静态VRRP实现智能负载均衡
  • (一)vscode搭建espidf环境
  • Linux线程——线程控制及理解
  • LLM大语言模型初步学习认识
  • day23|前端学习三件套
  • 集成电路学习:什么是URDF Parser统一机器人描述格式解析器
  • 10种经典学习方法的指令化应用
  • 动态创建可变对象:Python类工厂函数深度解析
  • 【k近邻】Kd树的构造与最近邻搜索算法
  • 用户虚拟地址空间布局
  • JVM管理数据的方式
  • 剧本杀小程序系统开发:推动行业数字化转型新动力
  • Linux中DNS系统搭建与配置指南(配实验步骤与注释)
  • 在 .NET Core 5.0 中启用 Gzip 压缩 Response
  • Tricentis Tosca:现代软件测试的自动化利器
  • 企业级 IT 运维服务平台数据备份方案:基于 rsync 的自动化实现
  • AI生成代码时代的商业模式重构:从“软件即产品”到“价值即服务”
  • 云原生环境Prometheus企业级监控
  • Notepad++ 插件开发实战:从理念到落地的探索