微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Linux运维电商系统项目第一天:基于 LNMP 平台进行架构与设计

一、LNMP概述

1、什么是LNMP

LNMP是一个合成词 = Linux + Nginx + MysqL + PHP LAMP区别就在于Web Server由Apache替换为Nginx

2、LNMP之间的关系

LNMP都属于开源软件,这也是其比较流行的原因。

Nginx已经被F5公司收购了,负载均衡器 => 最出名的硬件负载均衡F5 Nginx社区版 => 开源免费

Nginx Plus收费版

3、准备LNMP服务器

第一步:克隆LNMP服务器

第二步:更改网卡IP地址与UUID编号

IPADDR = 10.1.1.10

UUID更改编号的最后3位

第三步:设置主机名称,然后绑定IP地址与主机名称到/etc/hosts文件

# hostnamectl set-hostname lnmp.itcast.cn # su
# vim /etc/hosts
10.1.1.10 lnmp lnmp.itcast.cn # systemctl restart network

第四步:关闭防火墙与SELinux

# systemctl stop firewalld
# systemctl disable firewalld # setenforce 0
# sed -i '/SELINUX=enforcing/cSELINUX=disabled'
/etc/selinux/config

第五步:关闭NetworkManager服务

# systemctl stop NetworkManager
# systemctl disable NetworkManager

第六步:配置yum源

[aliyun] name=aliyun yum
baseurl=http://mirrors.aliyun.com/centos/7/os/x86_64/ enabled=1
gpgcheck=0
baseurl=file:///mnt enabled=1
gpgcheck=0
yum
epel-release-latest-7.noarch.rpm
yum.repos.d]# cat server.repo
# rpm -ivh [root@db01 [local]
name=local

第七步:安装ntpdate,进行时间同步

# mount /dev/sr0 /mnt
# yum install ntpdate -y # ntpdate cn.ntp.org.cn

二、LNMP软件架构之MysqL

1、MysqL软件包

mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz

说明:通用linux下的二进制包,已编译好,只需放到相应的安装目录里即可

企业级数据库部署中,常用的MysqL数据库一共有两种安装方式:GLIBC 安装与源码安装(二选一)

2、使用GLIBC安装MysqL

认选项:

套接文件,负责客户

MysqL安装目录

MysqL数据目录

安装路径:/usr/local/MysqL

认数据目录:/usr/local/MysqL/data 认端口:3306

认socket文件存放路径:/tmp/MysqL.sock

端与服务器端进行网络连接

3、MysqL详细安装步骤

上传MysqL到Linux服务器:

mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz

编写MysqL.sh脚本:

# vim MysqL.sh #!/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 useradd -r -s /sbin/nologin MysqL
chown -R MysqL.MysqL /usr/local/MysqL
cd /usr/local/MysqL
yum remove mariadb-libs -y scripts/MysqL_install_db --user=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

4、MysqL后续配置

第一步:配置MysqL密码以及安全策略

# MysqL_secure_installation

注:在实际运维工作中,MysqL密码一定要越复杂越好。第二步:MysqL测试验证

# MysqL -uroot -p Enter password:123

远程登录

# MysqL -h 服务器IP地址 -P 端口号 -uroot -p Enter password:123

注:在实际运维工作中,远程连接账号尽量不要使用root。应该手工创建一个普通账号,然后按需分配权限。

5、扩展:MysqL.service脚本

CentOS6:service MysqL start|restart|stop CentOS7:systemctl start|restart|stop MysqL.service

第一步:创建一个MysqL.service文件

# vim /usr/lib/systemd/system/MysqL.service

第二步:写入内容

[Unit]
Description=MysqL Server After=network.target After=syslog.target
[Service] User=MysqL Group=MysqL
ExecStart=/usr/local/MysqL/bin/MysqLd --defaults- file=/usr/local/MysqL/my.cnf
LimitNOFILE = 5000
PrivateTmp=false
[Install]
WantedBy=multi-user.target

注:
Unit代表单元,启动程序需要有单元信息After代表在某些服务启动后在进行MysqL启动

Service代表服务,最核心配置
User + Group代表将来以哪个用户的身份运行此软件ExecStart代表启动脚本调用哪个程序(systemctl start MysqL.service)
LimitNOFILE代表限制文件大小
PrivateTmp代表是否把MysqL的运行程序放入私有空间,比如pid,socket
文件

Install代表安装模式,代表把MysqL服务运行在何种模式下

第三步:关闭原有的MysqL,使用systemctl启动MysqL

# service MysqL stop
# systemctl start MysqL

扩展:关闭与重启
# systemctl stop MysqL
# systemctl restart MysqL

第四步:把MysqL.service添加到开机启动项中

# systemctl enable MysqL
扩展:关闭开机启动项
# systemctl disable MysqL

三、LNMP软件架构之Nginx

1、Nginx概述

Nginx (engine x) 是一个性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的http://Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0 发布于2004年10月4日。

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件

(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用Nginx网站用户有:百度、京东、新浪、网易、腾 讯、淘宝等。

问题:怎么判断一个企业项目架构是否使用了Nginx

# curl -I 域名地址

Server:Nginx

2、Nginx应用场景

  1. web服务器软件 httpd(apache)

同类型web服务器软件:apache Nginx(俄罗斯) iis(微软) lighttpd(德国)

  1. 提供了IMAP/POP3/SMTP服务
  2. 充当反向代理服务器,实现负载均衡功能。LB=>Load Blance

3、Nginx特点

① 高可靠:稳定性 master进程 管理调度请求分发到哪一个worker=> worker进程 响应请求 一master多worker

Nginx --------- master进程 ----------------worker worker worker

② 热部署 :(1)平滑升级 (2)可以快速重载配置 => 不停止业务的情况下实现软件升级以及重载

③ 高并发:可以同时响应更多的请求 事件 epoll模型 几万

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

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

⑥ 分布式支持:反向代理 七层负载均衡,新版本也支持四层负载均衡 =>

用户请求进行分流

4、Nginx软件安装方式

常见安装方式:

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

② 源码编译(强烈推荐)

5、Nginx编译安装

第一步:去Nginx的官网下载Nginx软件包(1.12.2)

第二步:使用Shell脚本安装Nginx软件(配置 => 编译 => 安装) 安装依赖库:

# mount /dev/sr0 /mnt

# yum -y install pcre-devel zlib-devel openssl-devel

使用Nginx.sh安装Nginx软件:

# vim Nginx.sh #!/bin/bash

tar -zxf Nginx-1.12.2.tar.gz cd Nginx-1.12.2

useradd -r -s /sbin/nologin www

./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

注:

--prefix:安装路径

--user:以哪个用户身份安装初始化

--group:以哪个用户组身份安装初始化

--with-*:代表安装哪些模块(认情况下只安装基本模块)

6、Nginx目录介绍

conf:配置文件目录,Nginx配置文件Nginx.conf。当Nginx启动时,会自动加载Nginx.conf文件

html:项目目录,项目的源代码就存放于此目录下 logs:日志目录,error.log错误日志与access.log访问日志sbin:二进制文件目录,Nginx的主程序sbin/Nginx

7、使用sbin/Nginx -h求帮助

# cd /usr/local/Nginx # sbin/Nginx -h

-V :显示Nginx的版本号与配置的选项信息(加载哪些模块)

-t :在编写Nginx.conf时,非常重要。主要用于语法检查

-s :发送信号,stop(停止)、quit(优雅的推出)、reopen(重新打开配置文件)、reload(热重载配置文件

说明:stop停止与quit优雅推出的区别

stop:代表立即停止所有请求

quit:代表其不会立即停止所有请求,等待所有请求处理完毕后,在进行停止

reopen 与 reload reopen:代表重新打开配置文件

reload:热重载,就是在不停止业务的前提下,重新加载Nginx.conf配置文件

-c :加载配置文件

8、启动Nginx软件

# cd /usr/local/Nginx

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

设置完成后,在Windows端打开浏览器,使用服务器的IP+80访问Nginx页面

9、扩展Nginx.service脚本

第一步:停止原生的Nginx

# cd /usr/local/Nginx # sbin/Nginx -s stop

第二步:创建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

注:
Type=forking,代表后台运行

第四步:使用Nginx.service程序启动:

# systemctl start Nginx

停止:

# systemctl stop Nginx

热重载:

# systemctl reload Nginx

开机启动项:

# systemctl enable Nginx

开机不启动:

# systemctl disable Nginx

四、LNMP软件架构之PHP

1、什么是PHP

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

PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多

PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。(新特性)

2、PHP-FPM

Apache与PHPNginxPHP有何不同:

# httpd.conf => LoadModule => AddType => .PHP文件

Apache与PHP的之间的关系:PHP是以模块的形势加载在Apache的内核中。在解析动态PHP代码时,其效率较高。LoadModule

NginxPHP间的关系:NginxPHP相对而言都是独立的,只不过在应用过程中,解析动态脚本时,Nginx自动代码发送给PHP-FPM程序。Nginx在处理静态页面时,效率较高。

3、PHP-FPM软件安装

第一步:安装依赖库

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

第二步:编写配置文件

# tar -zxf PHP-7.2.12.tar.gz # cd PHP7.2.12
# ./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


注:
--prefix:安装目录
--with-config-file-path:配置文件目录
--enable-fpm:开启PHP-fpm功能
--with-fpm-user:代表以哪个用户运行PHP-fpm
--with-fpm-group:代表以哪个用户组运行PHP-fpm
--with-MysqLi:PHP-MysqLi扩展
--with-pdo-MysqLPHP-pdo-MysqL扩展
--with-*:项目所需的额外的扩展库(需要运维工程师安装,但是由程序猿提供文档)
PHP7.2:从PHP5.6开始,PHP链接MysqL必须使用MysqLi或pdo扩展。

4、PHP-FPM配置文件

使用PHP-fpm进行管理PHP服务,有两个配置文件

PHP.ini #PHP配置文件(/root/PHP-7.2.12) PHP => redis.so => Redis

PHP-fpm.conf #PHP-fpm相关的配置 (认已存在)

③ www.conf #PHP-fpm主配置文件认已存在)

# ll /usr/local/PHP
etc文件夹:专门用于存放PHP-fpm启动或运行过程中需要的配置文件

第一步:把PHP.ini移动到/usr/local/PHP/etc目录

# cp /root/PHP-7.2.12/PHP.ini-development
/usr/local/PHP/etc/PHP.ini

第二步:加载PHP-fpm.conf主配置文件

# cd /usr/local/PHP/etc目录
# cp /usr/local/PHP/etc/PHP-fpm.conf.default
/usr/local/PHP/etc/PHP-fpm.conf

第三步:加载PHP-fpm子配置文件www.conf文件

# 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文件

5、添加PHP-fpm启动项

# 把PHP-fpm添加到/etc/init.d目录下

# 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

# 查看9000端口的占用情况(Nginx中的PHP是以独立进程的方式运行,占用计算机的9000端口)
# ss -naltp |grep 9000

6、把PHP的bin目录添加到环境变量

# echo 'export PATH=$PATH:/usr/local/PHP/bin' >>
/etc/profile
# source /etc/profile

五、让Nginx关联PHP-FPM

1、为什么需要关联

我们在安装NginxPHP时都是独立安装的。

Nginx占用80端口、PHP-FPM占用计算机的9000端口。

问题:请求过来后,都要先通过80端口的Nginx软件。那如果是.PHP为后缀的动态文件怎么处理呢?

2、创建PHP脚本

# cd /usr/local/Nginx/html # vim demo.PHP
<?PHP
echo 'hello PHP!';
?>

直接在浏览器中,访问IP地址+demo.PHP自动弹出下载

原因分析:正常情况下,Nginx不具备PHP代码的解析功能。所以遇到PHP 代码以后,会把其当做未知文件自动调用下载器进行下载。

3、让Nginx把.PHP文件转发PHP-FPM

Nginx 识别.PHP代码,然后转发 PHP-FPM

所以核心就是更改Nginx配置文件Nginx.conf:

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; 
# 项目目录 
root html; 
# 任意请求 
 location / {
# 首页(如果在html目录发现首页,直接运行) 
index index.html index.htm; 
}
# 添加PHP文件支持 
location ~ \.PHP$ { 
fastcgi_pass 127.0.0.1:9000; 
fastcgi_index index.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; 
 } 
 } 
 } 
Nginx.conf文件,主要由三部分组成: 
http {
server {} 
server {} 
}
一个Nginx.conf对应一个http,代表http请求,所以一个页面只有一个http
一个http可以包含多个server区块,每个区块就是一个项目(网站)=> 虚拟主机

配置让Nginx可以识别.PHP文件,然后转发:

设置完成后,一定要重载Nginx

# systemctl reload Nginx

重载完成后一定要检查一下9000端口是否启用,否则请求过来之后无法进行转发。

传智播客官方博客 发布了646 篇原创文章 · 获赞 1322 · 访问量 163万+ 他的留言板 关注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐