LNMP架构搭建

 

  

1. Nginx的相关知识

 1.1 Nginx的简介

 1.2  ApacheNginx的区别

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

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

 1.2  ApacheNginx的区别

Nginx Apache

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

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

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

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

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

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

nginx不支持IBMIopenvms一样的osapache支持更多的os

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

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

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

Nginx对比Apache的优势:

轻量级,nginxapache 占用更少的内存及资源;

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

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

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

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

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

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

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

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

apache相对于nginx的优点 :

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

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

bugnginxbug相对较多

超稳定

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

1.3  Nginx的进程

ApacheNginx的默认端口都是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    #安装论坛

 

posted @ 2022-11-17 19:22  withfear  阅读(33)  评论(0编辑  收藏  举报
----------------------------------- ©著作权归作者所有:来自51CTO博客作者一品堂_技术学习笔记的原创作品,请联系作者获取转载授权,否则将追究法律责任 博客园随笔中添加目录导航悬浮框博客园随笔中添加目录导航悬浮框 https://blog.51cto.com/ios9/3125785