LNMP原理及源码安装LNMP、搭建论坛的shell脚本
一、LNMP
1、LNMP组成:
①Nginx服务:一款高性能的轻量级Web服务软件
》》》稳定性高
》》》支持正则,系统资源消耗低
》》》对HTTP并发连续的处理能力高(理论上处理3~5万个并发请求,实际上大概2~3万个并发请求)
②MySQL服务
③PHP服务
二、LNMP框架
三、LNMP业务层面的对接原理
1、LNMP的组成
由Nginx 、PHP 、MysQL组成
三者关系:各司其职,对接集成
①各司其职:云计算/运维角度分析
Nginx 属于前端 主要提供静态处理+跳转到php的功能
PHP 属于后端 只要处理动态任务,和对接数据库
MysQL存储存储数据(存储基础数据、核心数据、业务数据)
2、对接集成(组合)
nginx———>> 对接PHP————>>对接Mysql
3、对接方式
3.1Nginx <=========> php
3.1.1 Nginx角度来看,Nginx只要修改配置文件即可修改:
①location ~ l.php$s { }
②在以上模块中修改php-fpm模块的位置:127.0.0.1:9000
《FPM是Nginx对接PHP的一个小工具(接口),此接口会调用FastCgi这个API接口,从而和PHP进行对接》
3.1.2、从PHP角度来看,PHP需要开启Pid进程暴露9000端口,用于方便Nginx来对接。
小结:Nginx和php直接对接交互,就是通过ip: port来交互的
3.2 php<=========>mysql
3.2.1 从PHP角度来看
①需要在./configure配置过程中,指向mysql.sock 文件的位置
②php.ini调整”mysqli.default socket= /usr/local/mysql/mysql.sock”配置参数来和mysql进行对接从
(mysql.sock是用于将访问请求或调用等来访任务传递到mysql服务内部的一个通讯文件,mysql是由自己的内部空间的,而通讯就依靠mysql.sock)
3.2.1 MySQL角度来看
①本身如果PHP使用的是root权限来访问的话,则无需操作
②如果PHP借助于独立用户来访问的话,则需要进行grant提权处理
四、一键部署LNMP服务
1、安装过程收集的log需要的可自行下载
百度链接:https://pan.baidu.com/s/1HEdUoLx6Z3dQkQs9ZcUSXA?pwd=lnmp
提取码:lnmp
(文件过大,不便贴图)
2、LNMP的shell内容
#!/bin/bash
######################################系统初始化设置#################################
#####关闭防火墙
systemctl stop firewalld.service
if [ $? -eq 0 ];then
echo "防火墙已关闭"
else
echo "防火墙关闭失败,请重新操作"
break
fi
systemctl disable firewalld.service
if [ $? -eq 0 ];then
echo "防火墙已设置为开机不启动"
else
echo "防火墙开机不启动设置失败,请重新开始"
break
fi
########关闭安全中心
setenforce 0 ####
echo "selinux已关闭"
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
grep -w "SELINUX=disabled" /etc/selinux/config
if [ $? -eq 0 ];then
echo "selinux已设置为永久关闭"
else
echo "selinux设置永久关闭失败"
break
fi
#########调试网络
ping -c1 -w1 -i0.2 www.baidu.com
if [ $? -eq 0 ];then
echo "网络正常"
else
sed -i 's/BOOTPROTO="dhcp"/BOOTPROTO="static"/' /etc/sysconfig/network-scripts/ifcfg-ens33
read -p "请输入IP地址: " ip
read -p "请输入子网掩码: " mask
read -p "请输入网关地址: " way
read -p "请输入DNS: " dns
cat<<EOF>>/etc/sysconfig/network-scripts/ifcfg-ens33
IPADDR=$ip
NETMASK=$mask
GATEWAY=$way
DNS=$dns
EOF
systemctl restart network &>/dev/null
ping -c2 www.baidu.com
if [ $? -eq 0 ];then
echo "网络正常"
else
echo "网络设置失败"
fi
fi
yum -y install epel-release.noarch
####################################### LNMP 安装#################################
install_Nginx () {
yum -y install gcc gcc-c++ pcre-devel zlib-devel make
id nginx
if [ $? -eq 0 ];then
echo "nginx已存在,无需在创建"
else
useradd -M -s /sbin/nologin nginx
if [ $? -eq 0 ];then
echo "nginx用户新建成功"
else
echo "nginx用户新建失败"
exit
fi
fi
cd /opt
if [ -f nginx-1.15.9.tar.gz ];then
tar xzvf nginx-1.15.9.tar.gz
else
echo "nginx-1.15.9.tar.gz不存在"
exit
fi
cd nginx-1.15.9/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
make -j3
make install
if [ $? -eq 0 ];then
echo "nginx编译安装成功"
else
echo "nginx编译安装失败"
fi
cp /usr/local/nginx/sbin/nginx /usr/local/sbin/
yum -y install lynx
echo "
[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
" > /lib/systemd/system/nginx.service
chmod 754 /lib/systemd/system/nginx.service
systemctl enable nginx.service --now
if [ $? -eq 0 ];then
echo "nginx设置为开机启动并立即启动"
else
echo "nginx设置为开机启动并立即启动!!!!失败!!!!"
fi
}
install_Nginx
install_mysql () {
yum -y install gcc gcc-c++ pcre-devel zlib-devel make expect
yum -y install \
ncurses \
ncurses-devel \
bison \
cmake \
id mysql
if [ $? -eq 0 ];then
echo "mysql用户已存在,不需新建"
else
useradd -s /sbin/nologin mysql
fi
cd /opt
if [ -f mysql-boost-5.7.20.tar.gz ];then
tar xzvf mysql-boost-5.7.20.tar.gz
else
echo "mysql-boost-5.7.20.tar.gz不存在"
exit
fi
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 -j3
make install
if [ $? -eq 0 ];then
echo "mysql编译安装成功"
else
echo "mysql编译安装失败"
exit
fi
chown -R mysql:mysql /usr/local/mysql/
cat<<EOF>/etc/my.cnf
[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
EOF
chown mysql:mysql /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/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
systemctl enable mysqld --now
if [ $? -eq 0 ];then
echo "mysqld开机启动及立即启动成功"
else
echo "mysqld开机启动及立即启动失败"
exit
fi
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
}
install_mysql
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
if [ -f php-7.1.10.tar.bz2 ];then
tar xjvf php-7.1.10.tar.bz2
else
echo "xjvf php-7.1.10.tar.bz2不存在"
exit
fi
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 -j3
make install
if [ $? -eq 0 ];then
echo "php编译安装成功"
else
echo "php编译安装失败"
exit
fi
cp php.ini-development /usr/local/php/lib/php.ini
sed -i 's/mysqli.default_socket =/mysqli.default_socket = \/usr\/local\/mysql\/mysql.sock/' /usr/local/php/lib/php.ini
sed -i 's/date.timezone =/date.timezone = Asia\/Shanghai/' /usr/local/php/lib/php.ini
/usr/local/php/bin/php -m
cd /usr/local/php/etc/
cp php-fpm.conf.default php-fpm.conf
cd /usr/local/php/etc/php-fpm.d/
cp www.conf.default www.conf
cd /usr/local/php/etc/
sed -i 's/;pid = run\/php-fpm\.pid/pid = run\/php-fpm\.pid/' php-fpm.conf
/usr/local/php/sbin/php-fpm -c /usr/local/php/lib/php.ini
/usr/local/php/bin/* /usr/local/bin/
sed -i '42alocation ~ \\.php$ {\n root html;\nfastcgi_pass 127\.0\.0\.1:9000;\nfastcgi_index index\.php;\nfastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;\ninclude fastcgi_params;\n}' /usr/local/nginx/conf/nginx.conf
sed -i 's/index index\.html index\.htm;/index index\.html index\.htm index\.php;/' /usr/local/nginx/conf/nginx.conf
cat<<EOF>/usr/local/nginx/html/index.php
<?php
phpinfo();
?>
EOF
systemctl restart nginx
if [ $? -eq 0 ];then
echo "nginx重启成功"
else
echo "nginx重启失败"
exit
fi
mysql -u root -pabc123 -e 'create database bbs;'
mysql -u root -pabc123 -e "grant all on bbs.* to 'bbsuser'@'%' identified by 'admin123'"
mysql -u root -pabc123 -e "grant all on bbs.* to 'bbsuser'@'localhost' identified by 'admin123'"
mysql -u root -pabc123 -e "flush privileges;"
systemctl restart nginx
cd /opt
if [ -f Discuz_X3.4_SC_UTF8.zip ];then
unzip Discuz_X3.4_SC_UTF8.zip -d /tmp
else
echo "Discuz_X3.4_SC_UTF8.zip不存在"
exit
fi
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/
}
install_php
脚本运行完以后需要执行下,source /etc/profile。当时只是在shell脚本的环境加载生效,退出脚本后需要重新加载一下。
3、验证
点击安装:跳转太快没截到图片
总结:
学习了LNMP的架构组成,及服务流向;学会搭建源码搭建 lnmp服务
还没有评论,来说两句吧...