LNMP架构和论坛搭建以及一键部署

目录

LNMP工作原理

Nginx

Mysql

 PHP

安装论坛

小结


LNMP工作原理

客户端请求访问一个地址,这个请求会到达nginx服务器,

nginx服务器首先判断是否为静态请求,如果是静态请求则直接返回结果到达客户端,

如果是动态请求,这是nginx服务器只做反向代理的作用,(nginx通过接口传输协议PHP-fastcgi协议)它会将请求传给php-fpm这个服务来处理,但是php-fpm不做处理,因为php-fpm是用来管理进程的程序,他会调用PHP解析器进程,php解析进程会来处理这个php文件,如果其中需要调用数据,那么再通过mysql.sock连接到数据库进行读取数据,再进程处理,处理完成之后再交给php-fpm服务进程,php-fpm服务进程再交给nginx服务器,最后到达客户端。

LAMP和LNMP的区别

LAMP表示为:linux、apache、mysql、php

LNMP表示为:linux、nginx、mysql、php

主要区别在于web服务器与php后台之间的转发存在区别,

当nginx作为web服务器时,nginx通过cgi接口协议转发到php-fpm服务程序上,nginx服务和php-fpm服务时相对独立的,然后由php-fpm程序调用对应的php解析进行来完成处理。
当apache作为web服务器时,apache是调用libphp7.so模块来进行处理,这个模块是会随着apache的启动而启动。内嵌在apache中的一个模块。

 

Nginx

(注意:首先把需要的安装包都放到系统里)

1、首先关闭防火墙

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

2、安装依赖环境

yum -y install pcre-devel zlib-devel gcc gcc-c++ make

3、解压安装包

tar zxvf nginx-1.15.9.tar.gz

4.编译安装nginx

添加路径优化:为了使 Nginx 服务器的运行更加方便,可以为主程序 nginx 创建链接文件,以便管理员 直接执行“nginx”命令就可以调用 Nginx 的主程序(让系统可以识别)

 

5.测试一下nginx是否成功启动

 6.添加 Nginx 系统服务

为了使 Nginx 服务的启动、停止、重载等操作更加方便,可以编写基于 CentOS 7.6 的 Nginx 服务控制文件使用 systemctl 工具来进行管理,CentOS7.6 系统的管理习惯

[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/bin/kill -s HUP $MAINPID
ExecStop=/usr/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target

7.检查通过systemctl命令能否正常 启动、停止、重启、重载 Nginx 服务

Mysql

1.安装依赖环境包

2.创建用户,不要加 -M,解压安装包

3.编译安装

4.调整配置文件

5.数据库目录进行权限调整

6.设置环境变量,初始化数据库

7.数据库开启自启,关闭,状态

8.登录数据库

 PHP

1.安装依赖环境包

2.解压安装包,编译安装

cd /opt

tar xjvf php-7.1.10.tar.bz2

cd php-7.1.10

3.复制主配置文件及php-fpm 配置文件

4.让nginx支持php功能

5.测试数据库工作是否正常

6.可以更改原来的测试页内容

 

安装论坛

一键部署lnmp

#!/bin/bash
###########关闭防火墙##########
firewalld () {
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
}

###########安装nginx###########
install_nginx () {
yum -y install gcc gcc-c++ pcre-devel zlib-devel make

useradd -M -s /sbin/nologin nginx

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

make && make install
##使 Nginx 服务器的运行更加方便以便管理员直接执行“nginx”命令就可以调用 Nginx 的主程序
cp -r /usr/local/nginx/sbin/nginx /usr/local/sbin/nginx

touch /lib/systemd/system/nginx.service
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=/usr/bin/kill -s HUP $MAINPID
ExecStop=/usr/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF

chmod 754 /lib/systemd/system/nginx.service
systemctl daemon-reload
systemctl start nginx.service

a=`echo $?`
if [ $a -eq 0 ] ;then
   echo "nginx启动成功"
   systemctl enable nginx.service
else
   echo "nginx寄了"
fi
}

#######安装MySQL#######
install_mysql () {

#安装依赖环境
yum install -y gcc gcc-c++ ncurses ncurses-devel bison cmake
#创建运行用户
useradd -s /sbin/nologin mysql
#解压
cd /opt
tar xzvf mysql-boost-5.7.20.tar.gz
cd /opt/mysql-5.7.20/

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_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=boost \
-DWITH_SYSTEMD=1

#编译安装
make && make install

#数据库目录进行权限调整
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
[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
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

##设置环境变量
echo 'PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
echo 'export PATH' >> /etc/profile
source /etc/profile

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

cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
systemctl daemon-reload

#开启服务
systemctl start mysqld
b=`echo $?`
if [ $b -eq 0 ];then
  echo "mysqld服务启动成功"
  systemctl enable mysqld
else
  echo "mysql寄了"
fi

#设置mysql密码
yum install -y expect
/usr/bin/expect <<-EOF
spawn mysqladmin -u root -p password  
expect {
"Enter password"
{send "\r";exp_continue}
"New password"
{send "abc123\r";exp_continue}
"Confirm new password"
{send "abc123\r"}
}
expect eof
EOF
}
##安装PHP####
install_php () {

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

cd /opt
tar xjvf php-7.1.10.tar.bz2
cd php-7.1.10

##编译安装
./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 && make install

##调整主配置文件
cp 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

##配置优化DPM模块
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.10/sapi/fpm/
cp php-fpm.service /usr/lib/systemd/system/php-fpm.service

#配置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
sed -i '45c  index  index.html index.htm index.php;' /usr/local/nginx/conf/nginx.conf

systemtl restart nginx
}

###创建数据库

create_mysql () {

#下载免交互软件
yum install -y expect
/usr/bin/expect <<-EOF
spawn mysql -uroot -pabc123
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 "quit;\r"}
expect eof
EOF

IP=`ifconfig|awk 'NR==2'|awk '{print $2}'`

cat > /usr/local/nginx/html/index.php << EOF
<?php
\$link=mysqli_connect('20.0.0.5','bbsuser','admin123');
if(\$link) echo "<h1>666666</h1>";
else echo "Fail!!";
?>
EOF
sed -i "s/20.0.0.5/$IP/g" /usr/local/nginx/html/index.php

systemctl restart nginx
}
###安装论坛####
luntan () {
cd /opt
unzip Discuz_X3.4_SC_UTF8.zip  -d /tmp
cd /tmp/dir_SC_UTF8/
cp -r upload/ /usr/local/nginx/html/bbs/
cd /usr/local/nginx/html/bbs/
chown -R root:nginx ./config/
chown -R root:nginx ./data/
chown -R root:nginx ./uc_client/
chown -R root:nginx ./uc_server/

chmod -R 777 ./config/
chmod -R 777 ./data/
chmod -R 777 ./uc_client/
chmod -R 777 ./uc_server/

}

###################脚本执行##########################
#需要提前把需要的安装包提前上传到/opt目录下
firewalld
install_nginx
install_mysql
install_php
create_mysql
luntan

小结

LNMP 与LAMP Nginx ——> Apache

MySQL ——》5.7 boost 底层c++函数库 +10 分钟编译时间 php 在LAMP 只是做为后台程序运行,pid 支持他 php 在LNMP 开起了fpm模块 fpm 进程管理模块 开启了php 的pid 功能,让php可以以9000端口的方式运行起来 Nginx ——》开启了支持FastCGI的方式对接php (对接的端口是9000)

FPM 是管理FastCgi 的一个管理器 FastCGI 是控制http 动态和静态分离功能的一个通用网关接口

nginx 对接php 需要支持fastcgi 哪个端口 9000

php和mysql 进行对接 2个对接 一、php ./configure --with-mysql-socket /usr/local/mysql/mysql.sock

二、配置文件 mysqli.default_socket /usr/local/mysql/mysql.sock

一个架构 1、首先先理解这个架构有哪些服务构成/集成 2、各司其职: 每个服务在这个架构中,发挥什么功能 LNMP L 平台 N 静态 M 数据库 P 动态 3、对接: L 做为基础平台 Nginx —— php 进行对接 : 因为静态页面和动态页面的基础概念,静态页面是不需要和数据库进行交互 php - Mysql 相连 :动态页面需要和数据库进行交互

一个服务: nginx : 理解常用的概念/功能 web服务,擅长于静态页面处理

nginx 常用功能 : 虚拟主机 反向代理(动态页面请求交给apache) 压缩 、缓存、用户和组 、访问权限、状态统计 虚拟主机: 节省资源,充分利用资源 代理:动静分离 缓存:提高客户侧和服务端两边的一个读取性能 访问权限:安全管理 状态统计:便于管理人员管理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值