一、企业级架构之LNMP

news2024/11/17 19:50:45

一、LNMP 概述

1、LNMP之间的关系:

LNMP = Linux + Nginx + MySQL + PHP

2、配置LNMP服务器:

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

IP 为 10.1.1.10,UUID 修改后三位。

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

hostnamectl set-hostname lnmp.itcast.cn
vim /etc/hosts
10.1.1.10 lnmp lnmp.itcast.cn

(3) 关闭防火墙和selinux。

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

(4) 关闭NetworkManager服务。

systemctl stop NetworkManager
systemctl disable NetworkManager

(5) 配置 yum 源。

配置阿里镜像源。

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

yum install ntpdate -y
ntpdate cn.ntp.org.cn

二、LNMP软件架构之MySQL

1、MySQL安装:

(1) 安装方式:

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

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

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

(2) 安装步骤:

编辑脚本一键安装:

#!/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软件:
前提准备:安装依赖库:

yum -y install pcre-devel zlib-devel openssl-devel
yum -y install gcc gcc-c++ autoconf automake make

编写脚本:

#!/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:

sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ss -naltp | grep 80

4、扩展nginx.service脚本:

(1) 停止原生的nginx:

cd /usr/local/nginx
sbin/nginx -s stop

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

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

[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) 编写配置文件:

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进程:

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 相关的命令。

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

<?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。

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;

        }

    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1567779.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习周记(第三十二周:文献阅读-时空双通路框架)2024.3.25~2024.3.31

目录 摘要 ABSTRACT 1 论文信息 1.1 论文标题 1.2 论文摘要 1.3 论文模型 1.3.1 Spatial Encoder&#xff08;空间编码器&#xff09; 1.3.2 Temporal Encoder&#xff08;时间编码器&#xff09; 2 相关代码 摘要 本周阅读了一篇运用GNN进行时间序列预测的论文。论文…

挖一挖:PostgreSQL Java里的double类型存储到varchar精度丢失问题

前言 大概故事是这样的&#xff0c;PostgreSQL数据库&#xff0c;表结构&#xff1a; create table t1(a varchar);然后使用标准的Java jdbc去插入数据&#xff0c;其基本代码如下&#xff1a; import java.sql.*; public class PgDoubleTest {public static void main(Stri…

渐进式图片解决前端在页面中使用大图,图片体积过大导致页面出现白屏现象

1、演示 可以看到&#xff0c;图片还在拼命加载的时候&#xff0c; 页面上就已经有内容了 2、什么渐进式图片 图片一开始是模糊的&#xff0c;然后逐渐的开始变的清晰。如果页面上有一些大图&#xff0c;如果直接扔给浏览器的话那么图片的传输时间就会比较长&#xff0c;用户就…

Java对象Object对象头-MarkWord分析-hashCode

代码主要通过打印对象的内存布局来观察对象头在不同状态下的变化&#xff0c;进而分析对象头在不同情况下的内存布局情况。 System.out.println(ClassLayout.parseInstance(o).toPrintable());&#xff1a;这一行代码通过使用开源库 openjdk.jol 的 ClassLayout 类来解析对象 o…

算法思想堪比哲学,你知多少否?

对算法思想 - 分治算法的理解 分治算法是一种将复杂问题划分为规模较小的子问题&#xff0c;并递归地解决这些子问题&#xff0c;最后将它们的解合并为原问题的解的算法思想。 它具有以下几个关键步骤&#xff1a;分解、解决和合并。 通过将大问题分解为小问题&#xff0c;每个…

数据结构—堆

什么是堆 堆是一种特殊的树形结构&#xff0c;其中每个节点都有一个值。堆可以分为两种类型&#xff1a;最大堆和最小堆。在最大堆中&#xff0c;每个节点的值都大于等于其子节点的值&#xff1b;而在最小堆中&#xff0c;每个节点的值都小于等于其子节点的值。这种特性使得堆…

Linux实验过程

答案截图获取&#xff0c;代写&#xff1a; https://laowangall.oss-cn-beijing.aliyuncs.com/studentall.pdf 基本任务&#xff1a; 1.Linux操作系统安装 2.vi文本编辑 3. Linux用户及文件管理命令 4. Linux权限管理命令 5. Linux网络服务 提高任务&#xff1a; 1、Li…

vue3+elementPlus:实现数字滚动效果(用于大屏可视化)

自行封装注册一个公共组件 案例一&#xff1a; //成功案例&#xff1a; //NumberScroll.vue /* 数字滚动特效组件 NumberScroll */<template><span class"number-scroll-grow"><spanref"numberScroll":data-time"time"class&qu…

intellij idea 使用git的 cherry pick 摘取其他分支的comment

cherry pick 摘取其他分支的comment 如果想把 feature_v1.0 分支的comment 摘到 feature_v1.0_new 分支上&#xff0c; 先切换到 feature_v1.0_new分支&#xff0c;这一步不能少了。然后点击 下面菜单栏的 git&#xff0c;点击Local Changes旁边的 Log&#xff0c;这时能看到…

【Java】打包:JAR、EAR、WAR

打包&#xff1a;JAR、EAR、WAR war 是一个 Web 模块&#xff0c;其中需要包括 WEB-INF&#xff0c;是可以直接运行的 WEB 模块。而 jar 一般只是包括一些 class 文件&#xff0c;在声明了 main_class 之后是可以用 java 命令运行的。 它们都是压缩的包&#xff0c;拿 Tomcat …

SpringBoot登录校验(四)过滤器Filter

JWT令牌生成后&#xff0c;客户端发的请求头中会带有JWT令牌&#xff0c;服务端需要校验每个请求的令牌&#xff0c;如果在每个controller方法中添加校验模块&#xff0c;则十分复杂且冗余&#xff0c;所以引入统一拦截模块&#xff0c;将请求拦截下来并做校验&#xff0c;这块…

配置Pod使用PersistentVolume作为存储,PV类型为 hostPath

准备开始 在节点主机上创建一个 /mnt/data 目录&#xff1a; mkdir -p /mnt/data创建一个index.html文件 echo Hello from Kubernetes storage > /mnt/data/index.html创建PV 创建一个 hostPath 类型的 PersistentVolume。 Kubernetes 支持用于在单节点集群上开发和测试的…

第19次修改了可删除可持久保存的前端html备忘录:换了一个特别的倒计时时钟

第19次修改了可删除可持久保存的前端html备忘录:换了一个特别的倒计时时钟 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><met…

数据结构记录

之前记录的数据结构笔记&#xff0c;不过图片显示不了了 数据结构与算法(C版) 1、绪论 1.1、数据结构的研究内容 一般应用步骤&#xff1a;分析问题&#xff0c;提取操作对象&#xff0c;分析操作对象之间的关系&#xff0c;建立数学模型。 1.2、基本概念和术语 数据&…

glm2大语言模型服务环境搭建

一、模型介绍 ChatGLM2-6B 是开源中英双语对话模型 ChatGLM-6B 的第二代版本&#xff0c;在保留了初代模型对话流畅、部署门槛较低等众多优秀特性的基础之上&#xff0c;ChatGLM2-6B 引入了如下新特性&#xff1a; 更强大的性能&#xff1a;基于 ChatGLM 初代模型的开发经验&…

大数据实验三-HBase编程实践

目录 一&#xff0e;实验内容 二&#xff0e;实验目的 三&#xff0e;实验过程截图及说明 1、安装HBase 2、配置伪分布式模式&#xff1a; 3、使用hbase的shell命令来操作表&#xff1a; 4、使用hbase提供的javaAPI来编程实现类似操作&#xff1a; 5、实验总结及心得体会…

『VUE』10. 事件修饰符(详细图文注释)

目录 什么是事件修饰符?vuejs 不使用修饰符 原生js实现禁用事件对象的默认事件使用事件修饰符 .prevent使用事件修饰符 .stop使用事件修饰符 .self 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 什么是事件修饰符? vue 在 Vu…

『51单片机』蜂鸣器

&#x1f6a9; WRITE IN FRONT &#x1f6a9; &#x1f50e; 介绍&#xff1a;"謓泽"正在路上朝着"攻城狮"方向"前进四" &#x1f50e;&#x1f3c5; 荣誉&#xff1a;2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评…

【研发日记】白话解读UDS协议(一)——19 04读取快照服务

文章目录 前言 19服务 04子服务 19 04协议 快照存储设计 快照发送设计 功能验证 分析和应用 总结 前言 近期在一个嵌入式软件开发项目中&#xff0c;要按照UDS标准开发相关功能&#xff0c;期间在翻阅UDS标准时&#xff0c;周围同事都说很多地方晦涩难懂。所以利用晚上…

ObjectiveC-08-OOP面向对象程序设计-类的分离与组合

本节用一简短的文章来说下是ObjectiveC中的类。类其实是OOP中的一个概念&#xff0c;概念上简单来讲类是它是一组关系密切属性的集合&#xff0c;所谓的关系就是对现实事物的抽象。 上面提到的关系包括很多种&#xff0c;比如has a&#xff0c; is a&#xff0c;has some等&…