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

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.dtcms.com/a/326514.html

相关文章:

  • Ubuntu 22.04 离线环境下 Python 包与 FFmpeg 安装全攻略​
  • 嵌入式Linnux学习 -- 软件编程2
  • linux下部署 dify,并配置本地ollama大模型
  • 【排序算法】⑤冒泡排序
  • Java学习 -- 可变参数与Collections工具类
  • docker安装Engine stopped
  • AI自动生成接口测试脚本全流程
  • 当AI重塑世界:普通人如何成为“主动进化者”?
  • 在 .NET Core 5.0 中启用 Gzip 压缩 Response
  • ECCV 2024 论文解读丨具身智能、机器人研究最新突破创先点分享合集
  • MCU中的存储器映射(Memory Map)
  • 登录系统英文使用 Sign In?Log In?还是 Log On?
  • Windows Server 2022域控制器部署与DNS集成方案
  • 大模型工程问题
  • Python网络爬虫(一) - 爬取静态网页
  • 打烊:餐厅开业前的“压力测试”
  • nginx 设置二级目录-实战
  • P1967 [NOIP 2013 提高组] 货车运输【题解】
  • 当智慧在腕间流转:一场无声的协同交响
  • haproxy 2.4.x, /metrics 取数据遇到的问题
  • 项目代码涉及的知识点笔记整理
  • C++高频知识点(二十一)
  • 嵌入式学习 day48 IMX6ULL裸机驱动 -按键、中断
  • 源码分析Eino框架工具调用--创建篇
  • Redis RDB和AOF 流程、优缺点详细介绍
  • python每日一题练习 有效的字母异位词 非常简单
  • Linux软件编程--IO
  • Linux 软件编程:IO——标准IO
  • 《录井管理与工程》书籍第一章要点及相应思考
  • 工业数采引擎-通信协议(Modbus/DTU/自定义协议)