首页 > 其他分享 >LNMP架构搭建

LNMP架构搭建

时间:2022-11-17 19:34:14浏览次数:40  
标签:架构 Nginx -- LNMP nginx usr php local 搭建

 

  

1. Nginx的相关知识

 1.1 Nginx的简介

 1.2  Apache与Nginx的区别

1.3  Nginx的进程

2. 编译安装Nginx服务

 2.1 .1 关闭防火墙,将安装nginx所需软件包传到/opt目录下

 2.1.2 安装相关的依赖包

 2.1.3 创建用户组以及编译安装

2.2  Nginx的初始命令

2.2.1 启动nginx服务

 2.2.2 停止nginx服务

2.2.3 重载nginx服务

2.2.4 日志分割,重新打开日志文件

 2.2.5 平滑升级

 3 一键安装LNMP

 

 

 

一  Nginx的相关知识

 1.1 Nginx的简介

Nginx:

Nginx 是开源、高性能、高可靠的 Web 和反向代理服务器,而且支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动,还能在不间断服务的情况下对软件版本进行热更新。

对HTTP并发连接的处理能力高,单台物理服务器可支持30000~50000个并发请求。(实际操作,很多公司为了服务器的稳定,都会设置在20000个左右)

Nginx的主要使用场景: 虚拟主机,反向代理,缓存,http

Apache:Apache是以进程为基础的结构,进程要比线程消耗更多的系统开支,不太适用于多处理器环境,因此,在一个apache Web站点扩容时,通常是增加服务器或扩充群集节点而不是增加处理器。

 1.2  Apache与Nginx的区别

Nginx Apache

nginx是一个基于事件的web服务器 apache是一个基于流程的服务器

所有请求都由一个线程处理单个线程处理单个请求

nginx避免子进程的概念apache是基于子进程的

nginx类似于速度 apache类似于功率

nginx在内存消耗和连接方面比较好 apache在内存消耗和连接上没有提高

nginx在负载均衡方面表现较好 当流量到达进程极限时,apache将拒绝新的连接。

nginx不支持IBMI和openvms一样的osapache支持更多的os

nginx只具有核心功能 apache提供了比nginx更多的功能

nginx的性能和可伸缩性不依赖于硬件apache依赖于cpu和内存等硬件组件

Nginx支持热部署 Apache不支持热部署

Nginx对比Apache的优势:

轻量级,nginx比apache 占用更少的内存及资源;

静态处理,Nginx 静态处理性能比 Apache 高 ;

Nginx可以实现无缓存的反向代理加速,提高网站运行速度;

Nginx的性能和可伸缩性不依赖于硬件,Apache依赖于硬件;

Nginx支持热部署,启动速度迅速,可以在不间断服务的情况下,对软件版本或者配置进行升级;

nginx是异步进程,多个连接可以对应一个进程 ;apache是同步多进程,一个连接对应一个进程;

Nginx高度模块化,编写模块相对简单,且组件比Apache少

高并发下nginx 能保持低资源低消耗高性能;

Nginx 配置简洁, Apache配置复杂;

apache相对于nginx的优点 :

Rewrite比nginx的rewrite强大 (rewrite的主要功能就是实现统一资源定位符URL的跳转)

模块多,基本想到的都可以找到

少bug, nginx的bug相对较多

超稳定

Nginx处理动态请求是弱项,动态请求要Apache去做。

1.3  Nginx的进程

Apache和Nginx的默认端口都是80,当你发先Nginx启动失败,导致的原因可能就是80端口被占用,而导致服务启动失败,可以修改服务的端口,从而实现两个服务的同时进行。

Nginx有两个进程:

master process:主进程(守护进程),用来管理工作进程。

worker process:工作进程,用来处理用户的请求。

 

 

 

二初步编译安装 

 2.1 .1 关闭防火墙,将安装nginx所需软件包传到/opt目录下

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

2.1.2 安装相关的依赖包

#nginx的配置及运行需要pcre、zlib、openssl等软件包的支持,因此需要安装这些软件的开发包,以便提供相应的库和头文件。
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make

 2.1.3 创建用户组以及编译安装

 
[root@localhost opt]#useradd -M -s /sbin/nologin nginx
 
[root@localhost opt]#tar zxvf nginx-1.12.2.tar.gz -C /opt/
 
 
[root@localhost opt]#cd nginx-1.12.2/
[root@localhost nginx-1.12.2]#./configure \
> --prefix=/usr/local/nginx \
> --user=nginx \
> --group=nginx \
> --with-http_stub_status_module

make && make install
 
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/        #让系统识别nginx的操作命令

 

 

2.2  Nginx的初始命令

2.2.1 启动nginx服务

#检查nginx服务配置是否正确
nginx  -t
#启动nginx服务
/usr/local/sbin/nginx
#快捷运行
nginx

 

 

 2.2.2 停止nginx服务

cat /usr/local/nginx/logs/nginx.pid        #先查看nginx的PID号
kill -3 <PID号>
kill -s QUIT <PID号>
killall -3 nginx
killall -s QUIT nginx

 

 查看进程号

cat /usr/local/nginx/logs/nginx.pid   //查看nginx主进程的PID
 
pgrep nginx -l   //查看nginx的主进程号和工作进程号
 
 
 lsof -i :80    //查看nginx的主进程号和工作进程号
 ​
 ss -ntap | grep nginx  //查看nginx的主进程号和工作进程号
 ​
 netstat -ntap | grep nginx  //查看nginx主进程的PID
 

2.2.3重载服务

kill -1 <PID号>
kill -s HUP <PID号>
killall -1 nginx
killall -s HUP nginx

 

 

2.2.4 日志分割,重新打开日志文件 

 

[root@localhost logs]#ls
access.log  error.log  nginx.pid
[root@localhost logs]#mv access.log    access.`date +%F`.log
[root@localhost logs]#ls
access.2022-09-27.log  error.log  nginx.pid
[root@localhost logs]#kill -USR1 8468
[root@localhost logs]#ls
access.2022-09-27.log  access.log  error.log  nginx.pid
[root@localhost logs]#

 

 

 

 2.2.5 平滑升级

 引入新的升级安装包:

tar -zxvf nginx-1.22.0.tar.gz 
cd nginx-1.22.0
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
--with-http_ssl_module

编译安装新的nginx升级软件包:

 

#编译安装
make
#将老版本的nginx进行备份,防止升级失败,还原
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old
 #将新的运行文件放入安装的运行目录
cp objs/nginx /usr/local/nginx/sbin/nginx

 

 平滑升级:

 

make
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old
cp objs/nginx /usr/local/nginx/sbin/nginx
make upgrade  

 

 

 

 

 

三 一键安装LNMP

安装环境必须是4G内存,2核以上,运行脚本需要使用source进行执行,所需安装包需要放在/opt目录下,脚本可放在任意位置进行执行

#!/bin/bash

#===============关闭防火墙=======================
firewalld () {
   systemctl stop firewalld
   systemctl disable firewalld
   setenforce 0
}

#================安装nginx服务===========================
nginx_install () {

#安装环境
yum -y install pcre-devel zlib-devel gcc gcc-c++ make

#创建nginx用户
useradd -M -s /sbin/nologin nginx

#解压编译安装
cd /opt
tar zxvf nginx-1.12.2.tar.gz
cd /opt/nginx-1.12.2/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module 

make && make install

#将nginx程序添加到环境变量中
ln -s /usr/local/nginx/local/sbin/nginx /usr/local/sbin

#添加nginx为系统服务
cat >/lib/systemd/system/nginx.service <<EOF
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
chmod 754 /lib/systemd/system/nginx.service

systemctl start nginx
if [ $? -eq 0 ];then
   systemctl enable nginx
   echo "nginx服务已启动完成!"
else
  echo "nginx服务启动失败,请检查!"
fi
}

#=========安装mysql服务=========================#
mysql_install () {
#解压并修改boot包的名称
echo "下面开始安装mysql服务,请耐心等待~~~~~"
cd /opt
tar -zxf mysql-5.7.17.tar.gz
tar -zxf boost_1_59_0.tar.gz -C /usr/local
mv /usr/local/boost_1_59_0 /usr/local/boost

#安装依赖环境
yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake

#指定软件安装的位置
cd /opt/mysql-5.7.17/
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=/usr/local/boost \
-DWITH_SYSTEMD=1

#编译安装
make -j3 && make install
  
#创建一个mysql用户
useradd -s /sbin/nologin mysql
  
#修改mysql程序的归属
chown -R mysql:mysql /usr/local/mysql/
chown mysql:mysql /etc/my.cnf
 
#修改配置文件
echo '[client]                                    
port = 3306
default-character-set=utf8
socket=/usr/local/mysql/mysql.sock    

[mysql]                                    
port = 3306
default-character-set=utf8
socket=/usr/local/mysql/mysql.sock
auto-rehash

[mysqld]
user = mysql 
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port = 3306    
character-set-server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket=/usr/local/mysql/mysql.sock
bind-address = 0.0.0.0
skip-name-resolve
max_connections=2048
default-storage-engine=INNODB
max_allowed_packet=16M
server-id = 1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES' > /etc/my.cnf

#设置环境变量,申明/宣告mysql命令便于系统识别
echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
source /etc/profile

#初始化数据库
cd /usr/local/mysql/bin/
./mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data

#复制mysql服务程序到启动文件中
cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/

#刷新识别
systemctl daemon-reload

#开启服务
systemctl start mysqld
if [ $? -eq 0 ];then
systemctl enable mysqld
 echo "mysqld服务启动成功"
else
 echo "服务启动失败,请检查mysql用户权限和配置文件"
fi
}

#=============安装PHP服务===========================
php_install () {

#安装依赖环境
yum -y install gd \
libjpeg libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
libxml2 libxml2-devel \
zlib zlib-devel \
curl curl-devel \
openssl openssl-devel

#编译安装
cd /opt
tar -zxvf php-7.1.24.tar.gz
cd php-7.1.24
./configure \
--prefix=/usr/local/php \
--with-mysql-sock=/usr/local/mysql/mysql.sock \
--with-mysqli \
--with-zlib \
--with-curl \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-openssl \
--enable-fpm \
--enable-mbstring \
--enable-xml \
--enable-session \
--enable-ftp \
--enable-pdo \
--enable-tokenizer \
--enable-zip

make -j2 && make install


#路径优化
ln -s /usr/local/php/bin/* /usr/local/bin/
ln -s /usr/local/php/sbin/* /usr/local/sbin/

#调整主配置文件
cp /opt/php-7.1.24/php.ini-development /usr/local/php/lib/php.ini
sed -i -e  '1170c mysqli.default_socket = /usr/local/mysql/mysql.sock' -e '939c date.timezone = Asia/Shanghai' /usr/local/php/lib/php.ini

#调整进程配置文件
cd /usr/local/php/etc
cp php-fpm.conf.default php-fpm.conf
sed -i '17s/;//' /usr/local/php/etc/php-fpm.conf

#调整扩展配置文件
cd /usr/local/php/etc/php-fpm.d/
cp www.conf.default www.conf

#启动php-fpm
/usr/local/php/sbin/php-fpm -c /usr/local/php/lib/php.ini
cd /opt/php-7.1.24/sapi/fpm
cp php-fpm.service /usr/lib/systemd/system/php-fpm.service
systemctl restart php-fpm

#配置nginx支持php解析
sed -i -e '65,71s/#//g' -e '69c fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;' /usr/local/nginx/conf/nginx.conf

#重新启动nginx服务
systemctl restart nginx 

#验证php测试页
echo '
<?php
phpinfo();
?>
' > /usr/local/nginx/html/index.php
}

#===================创建数据库=======================
create_mysql () {

#下载免交互软件
yum -y install expect
/usr/bin/expect <<-EOF
spawn mysql -u root -p 
expect "password" {send "\r"}
expect "mysql>" {send "CREATE DATABASE bbs;\r"}
expect "mysql>" {send "GRANT all ON bbs.* TO 'bbsuser'@'%' IDENTIFIED BY 'admin123';\r"}
expect "mysql>" {send "GRANT all ON bbs.* TO 'bbsuser'@'localhost' IDENTIFIED BY 'admin123';\r"}
expect "mysql>" {send "flush privileges;\r"}
expect "mysql>" {send "exit\r"}
EOF

#获取本机ip地址
a=ifconfig ens33 |grep "inet "|awk '{print $2}'

#替换php页面的内容
echo '<?php
$link=mysqli_connect('20.0.0.55','bbsuser','admin123');
if($link) echo "<h1>welcometo ydq!!!!</h1>";
else echo "Fail!!";
?'> /usr/local/nginx/html/index.php
#将本机ip替换文本中的ip
sed -i "s/20.0.0.55/$a" /usr/local/nginx/html/index.php
}

#===========================搭建论坛===============================
luntan () {
#安装论坛软件
cd /opt
unzip Discuz_X3.4_SC_UTF8.zip -d /opt/dis
cd /opt/dis/dir_SC_UTF8/
cp -r upload/ /usr/local/nginx/html/bbs/

#调整论坛目录的权限
cd /usr/local/nginx/html/bbs/
chmod -R 777 ./config/
chmod -R 777 ./data/
chmod -R 777 ./uc_client/
chmod -R 777 ./uc_server/
}

#安装环境必须是4G内存,2核以上,运行脚本需要使用source进行执行,所需安装包
#需要放在/opt目录下,脚本可放在任意位置
#=====================main=======================
firewalld   #关闭防火墙
nginx_install    #安装nginx服务
mysql_install    #安装mysql服务
php_install    #安装PHP服务
create_mysql  #创建数据库
luntan    #安装论坛

 

标签:架构,Nginx,--,LNMP,nginx,usr,php,local,搭建
From: https://www.cnblogs.com/123456789SI/p/16869903.html

相关文章

  • Centos7 SRS直播服务器搭建
    安装git工具,然后进行安装yum-yinstallgitgitclone-b4.0releasehttps://gitee.com/ossrs/srs.gitcdsrs/trunk./configuremake./objs/srs-cconf/s......
  • Android开发环境的搭建(一)
    开发环境的搭建Android应用程序一般使用Android软件开发工具包,采用Java语言来开发。Android软件开发需要用到的开发工具,如图所示:JDK:相信大家在学习Java语言时,已经......
  • 手把手,完整的从0搭建vite-vue3-ts项目框架:配置less+svg+pinia+vant+axios
    项目同步git:https://gitee.com/lixin_ajax/vue3-vite-ts-pinia-vant-less.git  为避免赘述,过于基础的点会直接省略或贴图,比如创建文件夹/文件的路径/路由一类配置相......
  • K8s集群环境搭建
    K8s集群环境搭建1、环境规划1.1集群类型Kubernetes集群大体上分为两类:一主多从和多主多从一主多从:一台master节点和多台node节点,搭建简单,但是有单机故障风险,适用于......
  • Kubeadm搭建kubernetes集群
    Kubeadm搭建kubernetes集群环境说明|角色|ip|操作系统|组件||–|–|–||master|192.168.203.100|centos8|docker,kubectl,kubeadm,kubelet||node2......
  • LNMP搭建
    一、编译安装Nginx服务1、编译安装Nginx服务的操作步骤systemctlstopfirewalldsystemctldisablefirewalldsetenforce01.1安装依赖包yum-yinstallpcre-d......
  • JAVA环境搭建
      JDK下载   下载链接:https://www.oracle.com/java/technologies/downloads/    如果需要oracle账户,可以找度娘向好心人借一个安装   根据提示进行安装配......
  • 六、数据中台架构
    数据中台的功能定位是完成公司内部数据能力的抽象、共享和复用,因此,数据中台的架构必须围绕这三个功能来设计。数据中台搭建于大数据平台及数据仓库之上,将大数据平台和数据......
  • 搭建CI环境和git使用
    部署Git+Gerrit+Jenkins的CI环境使用Git作为代码存储及版本控制使用Jenkins进行自动化构建构建测试通过后,再交给人工review人工review通过后,自动同步到远程Git库中。......
  • React-App环境搭建和项目启动
    node环境>=14.0.0npm环境>=5.6安装create-react-app:npmi-gcreate-react-app(cnpm/yarn)创建项目:create-react-appreact-project(项目名称)进入项目根目录:cdreact-p......