LNMP架构服务一键部署

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

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

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

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

下面是我写的一键部署LNMP的脚本 

首先需要准备一台环境干净的虚拟机   环境不干净在执行的过程中会出现各种各样的报错

然后将虚拟机联网 并下载好所需安装包   需要注意的几点(1.我使用的安装包的版本  2.我的虚拟机给的是4核4线程 如果给的资源不够在编译安装的过程中也会报错 3.我给的运存是8G )

#一键部署LNMP架构脚本
#将nginx,mysql,php,boost安装包拖到/opt目录下
#!/bin/bash
#关闭防火墙和核心防护
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用户
useradd -M -s /sbin/nologin nginx
#编译安装Nginx服务
cd /opt
tar zxvf nginx-1.12.2.tar.gz -C /opt
cd nginx-1.12.2/
#配置
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
#编译安装
make -j16 && make install
#优化路径
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
#编译安装mysql
cd /opt
tar zxvf mysql-5.7.17.tar.gz -C /opt
tar zxvf boost_1_59_0.tar.gz -C /usr/local
mv /usr/local/boost_1_59_0 /usr/local/boost
cd 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 -j16 && make install
#创建mysql用户
useradd -M -s /sbin/nologin mysql
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
#设置环境变量,申明/宣告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
cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
systemctl daemon-reload
systemctl start mysqld.service
systemctl enable mysqld
#编译安装php
cd /opt
tar zxvf php-7.1.24.tar.gz -C /opt
cd /opt/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-mbstring \
--enable-xml \
--enable-session \
--enable-ftp \
--enable-pdo \
--enable-tokenizer \
--enable-zip
#编译安装
make -j16 && 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 '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
cd /opt/php-7.1.24/sapi/fpm
cp 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 "" >/usr/local/nginx/html/index.php
mv /usr/local/nginx/html/index.html /usr/local/nginx/html/index.html.bak
nginx -s reload
在浏览器输入网址测试即可

你可能感兴趣的:(架构,nginx,自动化,运维,linux)