一、企业级架构之LNMP

一、LNMP 概述

1 、LNMP之间的关系:

LNMP = Linux + Nginx + MySQL + PHP

2 、配置LNMP服务器:

(1) 克隆一台centos7虚拟机,修改 IP 地址 和 UUID 编号。

IP 为 10.1.1.10,UUID 修改后三位。

(2) 设置主机名称,绑定IP地址与主机名称到/etc/hosts文件。

bash 复制代码
hostnamectl set-hostname lnmp.itcast.cn
vim /etc/hosts
10.1.1.10 lnmp lnmp.itcast.cn

(3) 关闭防火墙和selinux。

bash 复制代码
systemctl stop firewalld
systemctl disable firewalld
setenforce 0

(4) 关闭NetworkManager服务。

bash 复制代码
systemctl stop NetworkManager
systemctl disable NetworkManager

(5) 配置 yum 源。

配置阿里镜像源。

(6) 安装ntpdate,进行时间同步。

bash 复制代码
yum install ntpdate -y
ntpdate cn.ntp.org.cn

二、LNMP软件架构之MySQL

1 、MySQL安装:

(1) 安装方式:

企业级数据库部署中,常用的MySQL数据库一共有两种安装方式:GLIBC 安装与源码安装。

① GLIBC 安装:使用操作系统的包管理器(如APT、YUM等)来安装MySQL,会自动处理依赖关系。

② 源码安装:通过从MySQL官方网站下载MySQL源代码,并手动编译安装,这种方式需要更多的手动配置和管理。

(2) 安装步骤:

编辑脚本一键安装:

bash 复制代码
#!/bin/bash

tar -zxf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz
mv mysql-5.6.35-linux-glibc2.5-x86_64 /usr/local/mysql

#创建一个名为mysql的系统用户,该用户只用于运行 MySQL 服务,不允许登录系统
useradd -r -s /sbin/nologin mysql
chown -R mysql.mysql /usr/local/mysql
cd /usr/local/mysql
yum remove mariadb-libs -y

#运行MySQL提供的mysql_install_db脚本来初始化MySQL数据库,指定初始化过程中使用mysql用户
scripts/mysql_install_db --user=mysql

#将MySQL提供的启动脚本复制到/etc/init.d/mysql,以便使用系统命令管理MySQL服务
cp support-files/mysql.server /etc/init.d/mysql
service mysql start

# 追加/usr/local/mysql/bin目录到环境变量
echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile
source /etc/profile

设置完成后,使用source命令执行mysql.sh脚本:

source mysql.sh

(3) mysql 默认选项:

默认安装路径:/usr/local/mysql

默认数据目录:/usr/local/mysql/data

默认端口:3306

默认socket文件存放路径:/tmp/mysql.sock (这个套接字文件用于本地连接到 MySQL 服务器,允许客户端应用程序如 php 与 MySQL 服务器进行通信)

2 、MySQL后续配置:

(1) 配置MySQL密码以及安全策略:

mysql_secure_installation

(2) MySQL 登录验证:

mysql -uroot -p

远程登录:

mysql -h 服务器IP地址 -P 端口号 -uroot -p

三、LNMP架构之Nginx

1 、Nginx应用场景:

Nginx是一款轻量级的 Web 服务器/反向代理服务器及电子邮件 (IMAP/POP3) 代理服务器,其特点是占有内存少,并发能力强。

(1) 应用场景:

①web服务器软件。

②充当邮件服务器,提供 IMAP/POP3/SMTP 服务。

③充当反向代理服务器,实现负载均衡功能。

(2) 特点:

①高可靠:一个进程下有多个线程,某个线程故障不会影响其他线程运行;

②热部署:平滑升级,在不停止业务的情况下实现软件升级以及重载;

③高并发:可以同时响应更多的请求事件;

④响应快:尤其在处理静态文件上,响应速度很快;

⑤低消耗:1w个请求消耗内存2-3MB;

⑥分布式支持:反向代理七层负载均衡,把用户请求进行分流。

2 、Nginx安装:

(1) 安装方式:

①yum安装配置,需使用Nginx官方源或者EPEL源 (版本过低,无法进行定制,不推荐)

②源码编译。

(2) Nginx 编译安装:

①去官网下载Nginx安装包:

社区版 => http://www.nginx.org

企业版 => http://www.nginx.com

②使用Shell脚本安装Nginx软件:
前提准备:安装依赖库:

bash 复制代码
yum -y install pcre-devel zlib-devel openssl-devel
yum -y install gcc gcc-c++ autoconf automake make

编写脚本:

bash 复制代码
#!/bin/bash

tar -zxf nginx-1.12.2.tar.gz
cd nginx-1.12.2
useradd -r -s /sbin/nologin www

#--prefix:安装路径
#--with:安装拓展模块 -支持https -查看nginx基本状态信息 -代理服务器获取客户端真实IP

./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module

#编译安装
make && make install

3 、Nginx目录:

(1) 目录介绍:

conf:配置文件目录,Nginx主配置文件nginx.conf。

html:网站默认目录,源代码存放于此目录下 。

logs:日志目录,access.log访问日志与error.log错误日志。

sbin:可执行文件,Nginx的主程序sbin/nginx。

(2) sbin/nginx -h

显示nginx的帮助信息:

(3) 启动nginx:

bash 复制代码
sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ss -naltp | grep 80

4 、扩展nginx.service脚本:

(1) 停止原生的nginx:

bash 复制代码
cd /usr/local/nginx
sbin/nginx -s stop

(2) 创建nginx.service脚本,编写脚本:

vim /usr/lib/systemd/system/nginx.service

bash 复制代码
[Unit]

Description=Nginx Web Server
After=network.target

[Service]
Type=forking

ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit

PrivateTmp=true

[Install]
WantedBy=multi-user.target

这个脚本是一个 systemd 服务单元文件,systemd 是一个 Linux 系统的初始化系统和服务管理器,负责在系统启动时启动各种服务。

当编写并启用了这个脚本后,就可以使用系统命令启动、重载和停止Nginx服务。

(3) 使用系统命令管理nginx:

四、LNMP架构之php

1 、php介绍:

PHP(Hypertext Preprocessor,超文本预处理器)是一种通用开源脚本语言,主要应用于Web领域。

Nginx与PHP之间的关系:Nginx与PHP相对而言都是独立的,只不过在解析动态脚本时,Nginx会将源代码发送给PHP-FPM程序进行解析。

2 、安装php-fpm:

(1) 安装依赖库:

yum -y install libxml2-devel libjpeg-devel libpng-devel freetype-devel curl-devel openssl-devel

(2) 编写配置文件:

bash 复制代码
tar -zxf php-7.2.12.tar.gz

cd php-7.2.12

#--prefix:安装目录
#--with-config-file-path:配置文件目录
#--enable-fpm:开启php-fpm功能

./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv-dir --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-mbstring --enable-ftp --with-gd --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --with-libzip --enable-soap --without-pear --with-gettext --disable-fileinfo --enable-maintainer-zts

make && make install

3 、php-fpm配置文件:

/usr/local/php/etc/ 专门用于存放 php-fpm 启动或运行过程中需要的配置文件。

使用php-fpm进行管理php服务,需要三个配置文件:

(1) php.ini

默认php配置文件,可以在这个文件中开启或关闭特定的 PHP 扩展。

php.ini 默认存放在 /root/php-7.2.12 下,php.ini-development 和 php.ini-production 分别用于开发环境和生产环境。

php.ini-development 设置为显示所有错误,包括警告和通知。

php.ini-production 设置为不显示详细的错误信息给最终用户。

把php.ini移动到/usr/local/php/etc目录:

cp /root/php-7.2.12/php.ini-development /usr/local/php/etc/php.ini

(2) php-fpm.conf

PHP-FPM 的主配置文件,它包含了 PHP-FPM 的全局设置,默认存放在 /usr/local/php/etc/ 下。

将该默认配置文件复制一份存放到此目录下:

cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

(3) www.conf 文件:

php-fpm 的子配置文件,优先级最高,默认存放在 /usr/local/php/etc/php-fpm.d 下。

将该默认配置文件复制一份存放到此目录下:

cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf

PHP-FPM 配置文件启动顺序:php.ini → php-fpm.conf → www.conf文件

4 、添加php-fpm启动项:

(1) 把php-fpm添加到/etc/init.d目录下:
/root/php-7.2.12/sapi/fpm/init.d.php-fpm 这个路径指向了一个脚本模版,包含了用于启动、停止、重启 PHP-FPM 的服务。

将该脚本添加到/etc/init.d/下,可以使用系统命令管理php-fpm进程:

bash 复制代码
cp /root/php-7.2.12/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
service php-fpm start

查看端口占用情况(php占用9000端口):

(2) 把php的bin目录添加到环境变量:
将 PHP 的 bin 目录添加到环境变量中,确保在系统的任何位置都可以直接运行 PHP 相关的命令。

bash 复制代码
echo 'export PATH=$PATH:/usr/local/php/bin' >> /etc/profile
source /etc/profile

5.Nginx 关联php:

(1) 为什么需要关联:

Nginx与PHP独立安装,Nginx占用80端口,PHP-FPM占用9000端口。Nginx处理静态页面 (.html),php处理动态页面(.php)。

(2) 创建php脚本:

cd /usr/local/nginx/html/

vim demo.php

bash 复制代码
<?php
    echo 'hello php!';
?>

直接在浏览器中,访问IP地址/demo.php,会自动弹出下载,说明nginx不具备解析php代码的功能。

(3) 修改nginx配置文件:

更改配置文件,使nginx将.php文件交给php-fpm解析。

nginx.conf文件,主要由三部分组成:

http {

server { }

server {

location { }

}

}

一个nginx.conf文件只有一个http区块,代表一个http请求;server定义了一个虚拟服务器的配置;location 用于定义如何响应特定的请求 URI。

bash 复制代码
worker_processes 1;

events {

    worker_connections 1024;

}

http {

    include mime.types;

    default_type application/octet-stream;

    sendfile on;

    keepalive_timeout 65;

    server {

        # 监听端口

        listen 80;

        # 域名,localhost代表本机

        server_name localhost;
        
        # 任意请求

        location / {

            root html;

            # 响应定义的默认首页

            index index.html index.htm;

        }

        # 添加PHP文件支持

        location ~ \.php$ {

            root html;

            fastcgi_pass 127.0.0.1:9000;

            fastcgi_index index.php;

            # php执行脚本的完整路径

            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    
            include fastcgi_params;

        }

        # 当访问遇到错误时,返回50x.html页面给用户

        error_page 500 502 503 504 /50x.html;
    
        location = /50x.html {

        root html;

        }

    }

}
相关推荐
敲个大西瓜1 小时前
Java项目常用数据归档方式
mysql
kyriewen3 小时前
面试官让我查各部门工资最高的员工,我用AI三秒写出窗口函数,他愣了
后端·mysql·面试
小码工作室3 小时前
使用 HAVING 进行 MySQL 集合筛选
mysql
不正经的小寒3 小时前
PHP 8.4 核心特性
php
春天花会开1313 小时前
Kubernetes 高可用架构实战指南
架构
罗超驿4 小时前
18.事务的隔离性和隔离级别:MySQL面试高频考点全解析
数据库·mysql·面试
码云之上4 小时前
万星入坞·其三:SDK 轻量组件如何优雅地"点亮"
性能优化·架构·前端框架
小江的记录本4 小时前
【Java基础】Java 8-21新特性:JDK21 LTS:虚拟线程、模式匹配switch、结构化并发、序列集合(附《思维导图》+《面试高频考点清单》)
java·数据库·python·mysql·spring·面试·maven
枫叶林FYL4 小时前
【强化学习】3 双系统持续强化学习:快速迁移与元知识整合架构手册
人工智能·机器学习·架构
AI科技星4 小时前
哥德巴赫猜想1+1基于平行素数对等腰梯形网格拓扑与素数渐近密度的大偶数满填充完备性证明
人工智能·线性代数·架构·概率论·学习方法