Web服务(07)——LNMP一键部署

Web服务(07)——LNMP一键部署

前言

之前的博客中有介绍过LAMP的架构,而LNMP和LAMP的区别就在于使用Nginx而不是Apache。

一、LNMP架构介绍

LNMP是Linux+Nginx+Mysql+PHP的组合方式,其特点是利用Nginx的快速与轻量级,替代以前的LAMP的方式,由于安装方便,并且安装脚本也随时更新。

LNMP的优点在于:占用VPS资源较少,Nginx配置起来也比较简单方便,利用fast-cgi的方式动态解析PHP脚本。

LNMP的缺点也同样很明显:php-fpm组件的负载能力优先,在访问量巨大的时候,php-fpm进程容易僵死,容易发生502bad gateway的错误。

二、LNMP部署脚本

#一键部署LNMP脚本
#将mysql,nginx,php,boost安装包拖入虚拟机内
#!/bin/bash
#准备软件包
read -p "请输入安装包所在目录如/opt:" mulu
#关闭核心防护和防火墙
systemctl stop firewalld
setenforce 0
#安装依赖包
yum -y install pcre-devel \
zlib-devel \
gcc \
gcc-c++ \
make \
ncurses \
ncurses-devel \
bison \
cmake \
gd \
libjpeg libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
libxml2 libxml2-devel \
zlib zlib-devel \
curl curl-devel \
openssl openssl-devel

#编译安装Nginx服务
#创建nginx用户
useradd -M -s /sbin/nologin nginx
cd $mulu
#定义nginx安装包
nginx_bao=$(find $mulu -name "nginx*.tar.gz" -maxdepth 1)
tar zxf $nginx_bao -C /opt
#定义nginx解压目录
nginx_mulu=$(find /opt -name "nginx*" -type d -maxdepth 1)
cd $nginx_mulu
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
make -j3 && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
#端口占用情况查看
bashi=$(netstat -natp|grep 80|awk -F/ '{print $2}')
	if [ -z $bashi ];then
		nginx
	else
		systemctl stop $bashi
	fi
#编译安装MySQL
useradd -M -s /sbin/nologin mysql
#定义mysql和boost安装包
mysql_bao=$(find $mulu -name "mysql*.tar.gz" -maxdepth 1)
boost_bao=$(find $mulu -name "boost*.tar.gz" -maxdepth 1)
tar zxf $mysql_bao -C /opt
tar zxf $boost_bao -C /usr/local
#定义mysql和boost解压目录
mysql_mulu=$(find /opt -name "mysql*" -type d -maxdepth 1)
boost_mulu=$(find /usr/local -name "boost*" -type d -maxdepth 1)
mv $boost_mulu /usr/local/boost
cd $mysql_mulu
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
chown -R mysql:mysql /usr/local/mysql/
chown mysql:mysql /etc/my.cnf
echo -e "[client]\nport = 3306\nsocket=/usr/local/mysql/mysql.sock\n\n[mysqld]\nuser = mysql\nbasedir=/usr/local/mysql\ndatadir=/usr/local/mysql/data\nport = 3306\ncharacter-set-server=utf8\npid-file = /usr/local/mysql/mysqld.pid\nsocket=/usr/local/mysql/mysql.sock\nbind-address = 0.0.0.0\nskip-name-resolve\nmax_connections=2048\ndefault-storage-engine=INNODB\nmax_allowed_packet=16M\nserver-id = 1\n\nsql_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=$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
cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
systemctl daemon-reload
systemctl start mysqld.service
systemctl enable mysqld
#mysqladmin -u root -p password "abc123"
#编译安装php服务
php_bao=$(find $mulu -name "php*.tar.gz" -maxdepth 1)
tar zxf $php_bao -C /opt
#定义php解压目录
php_mulu=$(find /opt -name "php*" -type d -maxdepth 1)
cd $php_mulu
./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
ln -s /usr/local/php/bin/* /usr/local/bin/
ln -s /usr/local/php/sbin/* /usr/local/sbin/
cp $php_mulu/php.ini-development /usr/local/php/lib/php.ini
sed -i '939c date.timezone = Asia/Shanghai' /usr/local/php/lib/php.ini
sed -i '1170s/=/= \/usr\/local\/mysql\/mysql.sock/g' /usr/local/php/lib/php.ini
cp  /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
sed -i '17c pid = run/php-fpm.pid' /usr/local/php/etc/php-fpm.conf 
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
/usr/local/php/sbin/php-fpm -c /usr/local/php/lib/php.ini
cp $php_mulu/sapi/fpm/php-fpm.service /usr/lib/systemd/system/php-fpm.service
systemctl restart php-fpm.service
sed -i '65,71s/#/ /g' /usr/local/nginx/conf/nginx.conf
sed -i '45c index index.html index.htm index.php;' /usr/local/nginx/conf/nginx.conf
sed -i '69s/\/scripts/\/usr\/local\/nginx\/html/g' /usr/local/nginx/conf/nginx.conf
echo -e "<?php\nphpinfo();\n?>" >/usr/local/nginx/html/index.php
mv /usr/local/nginx/html/index.html /usr/local/nginx/html/index.html.bak
nginx -s reload

结束可登录浏览器访问虚拟机ip地址+index.php

END

猜你喜欢

转载自blog.csdn.net/tu464932199/article/details/125959962