Linux环境安装LNMP环境自动化脚本

小柒博客 Shell评论61.2K3字数 8788阅读29分17秒阅读模式

一、脚本的环境介绍

此脚本运行在RHEL(CentOS)6.4版本及以上

运行此脚本需注意:

1、主机需要能够上网

2、需了解软件之间的相互依赖性。

二、脚本的介绍

脚本是由函数组成,每一个函数实现一个功能,采用select菜单显示+case

三、脚本的功能介绍

1、支持某台机器单独安装某一个软件,如Nginx、Mysql、PHP

2、支持某台机器一键安装LNMP环境

3、如果想一个一个的安装LNMP架构,请注意安装顺序:Nginx–>Mysql–>PHP

4、会自行的把服务开启,并加入到开机自动启动的服务列表中

LAMP自动化安装脚本代码

#!/bin/bash
#Date:2017-5-20 13:14:00
#Author Blog:
#	https://www.yangxingzhen.com
#Author WeChat:
#	微信公众号:小柒博客
#Author mirrors site:
#	https://mirrors.yangxingzhen.com
#About the Author
#	BY:YangXingZhen
#	Mail:xingzhen.yang@yangxingzhen.com
#Auto Install LNMP environment

source /etc/rc.d/init.d/functions

#Define Nginx path variables
NGINX_URL=http://nginx.org/download
NGINX_FILE=nginx-1.16.1.tar.gz
NGINX_FILE_DIR=nginx-1.16.1
NGINX_PREFIX=/usr/local/nginx

#Define Boost path variables
Boost_URL=https://mirrors.yangxingzhen.com/mysql
Boost_File=boost_1_59_0.tar.gz

#Define Mysql path variables
MYSQL_URL=http://mirrors.163.com/mysql/Downloads/MySQL-5.7
MYSQL_FILES=mysql-5.7.29.tar.gz
MYSQL_FILES_DIR=mysql-5.7.29
MYSQL_PREFIX=/usr/local/mysql
MYSQL_DIR=/data/mysql
MYSQL_USER=mysql

#Define PHP path variables
PHP_URL=http://mirrors.sohu.com/php
PHP_FILE=php-7.3.7.tar.gz
PHP_FILE_DIR=php-7.3.7
PHP_PREFIX=/usr/local/php
USER=www

#Define ZIP path variables
ZIP_URL=https://nih.at/libzip
ZIP_FILE=libzip-1.2.0.tar.gz
ZIP_FILE_DIR=libzip-1.2.0

function Install_Nginx() {
#Install Nginx Soft
if [ ! -d ${NGINX_PREFIX} ];then
	yum -y install pcre pcre-devel openssl openssl-devel gcc gcc-c++ wget 
	wget -c ${NGINX_URL}/${NGINX_FILE}
	tar zxf ${NGINX_FILE}
	cd ${NGINX_FILE_DIR}
	sed -i 's/1.16.1/ /;s/nginx\//nginx/' src/core/nginx.h
	useradd -s /sbin/nologin www
	./configure --prefix=${NGINX_PREFIX} \
	--user=www \
	--group=www \
	--with-http_ssl_module \
	--with-http_stub_status_module
	if [ $? -eq 0 ];then
		make && make install
		action "NGINX Install Success..." /bin/true
	else
		action "NGINX Install Failed..." /bin/false
		exit 1
	fi
else
	echo -e "\033[32m Nginx has been installed \033[0m"
fi
}

function Install_Mysql() {
if [ ! -d ${MYSQL_PREFIX} ];then
#Install Package
yum -y install ncurses-devel perl perl-devel cmake wget gcc gcc-c++ bison* autoconf openssl-devel openssl

#Install Boost
wget -c ${Boost_URL}/${Boost_File}
tar zxf ${Boost_File} -C /usr/local/

#Install MYSQL
wget -c ${MYSQL_URL}/${MYSQL_FILES}
tar zxf ${MYSQL_FILES}
cd ${MYSQL_FILES_DIR}
cmake . -DCMAKE_INSTALL_PREFIX=${MYSQL_PREFIX} \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DMYSQL_DATADIR=${MYSQL_DIR} \
-DSYSCONFDIR=/etc \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/boost_1_59_0 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_TCP_PORT=3306 \
-DWITH_READLINE=1 \
-DMYSQL_USER=${MYSQL_USER} \
-DWITH_SSL=yes
if [ $? -eq 0 ];then
	make && make install
	action "The MYSQL Install Sussess..." /bin/true
else
	action "The MYSQL Install Failed..." /bin/false 
	exit 1
fi
else
	echo -e "\033[31mThe MYSQL already Install...\033[0m"
	exit 1
fi
}

function Install_PHP() {
#Install Libzip
yum –y install wget gcc gcc-c++
wget -c ${ZIP_URL}/${ZIP_FILE}
tar zxf ${ZIP_FILE}
cd ${ZIP_FILE_DIR}
./configure
if [ $? -eq 0 ];then
	make && make install
	action "The Libzip Install Sussess..." /bin/true
else
	action "The Libzip Install Failed..." /bin/false
	exit 1
fi
	
cat >/etc/ld.so.conf <<EOF
/usr/local/lib64
/usr/local/lib
/usr/lib
/usr/lib64
EOF
ldconfig -v

#Install PHP
if [ ! -d ${PHP_PREFIX} ];then
#Install Package
yum -y install epel-release
yum -y install wget gcc gcc-c++ pcre pcre-devel openssl openssl-devellibxml2 libxml2-devel  bzip2 bzip2-devel libcurl libcurl-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel gmp gmp-devel libmcrypt libmcrypt-devel readline readline-devel libxslt libxslt-devel cmake
cd ~ && wget -c ${PHP_URL}/${PHP_FILE}
tar zxf ${PHP_FILE}
cd ${PHP_FILE_DIR}
./configure --prefix=${PHP_PREFIX} \
--with-config-file-path=/etc \
--enable-fpm \
--with-fpm-user=${USER} \
--with-fpm-group=${USER} \
--enable-inline-optimization \
--disable-debug \
--disable-rpath \
--enable-shared \
--enable-soap \
--with-libxml-dir \
--with-xmlrpc \
--with-openssl \
--with-mhash \
--with-pcre-regex \
--with-sqlite3 \
--with-zlib \
--enable-bcmath \
--with-iconv \
--with-bz2 \
--enable-calendar \
--with-curl \
--with-cdb \
--enable-dom \
--enable-exif \
--enable-fileinfo \
--enable-filter \
--with-pcre-dir \
--enable-ftp \
--with-gd \
--with-openssl-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib-dir \
--with-freetype-dir \
--with-gettext \
--with-gmp \
--with-mhash \
--enable-json \
--enable-mbstring \
--enable-mbregex \
--enable-mbregex-backtrack \
--with-onig \
--enable-pdo \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-zlib-dir \
--with-pdo-sqlite \
--with-readline \
--enable-session \
--enable-shmop \
--enable-simplexml \
--enable-sockets \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-wddx \
--with-libxml-dir \
--with-xsl \
--enable-zip \
--enable-mysqlnd-compression-support \
--with-pear \
--enable-opcache
if [ $? -eq 0 ];then
	\cp /usr/local/lib/libzip/include/zipconf.h /usr/local/include/zipconf.h
	make && make install
	action "The PHP Install Sussess..." /bin/true
else
	action "The PHP Install Failed..." /bin/false
	exit 1
fi
else
	echo -e "\033[31mThe PHP already Install...\033[0m"
	exit 1
fi
}

function LNMP_Config() {
#Nginx config
useradd -s /sbin/nologin ${USER} >/dev/null 2>&1
ln -sf ${NGINX_PREFIX}/sbin/nginx /usr/sbin
cat >${NGINX_PREFIX}/conf/nginx.conf <<EOF
	user ${USER} ${USER};
	worker_processes auto;
	pid logs/nginx.pid;
events {
	use epoll;
	worker_connections 10240;
	multi_accept on;
	}
http	{
	include       mime.types;
	default_type  application/octet-stream;
	log_format  main  '\$remote_addr - \$remote_user [\$time_local] "\$request" '
                      '\$status \$body_bytes_sent "\$http_referer" '
                      '"\$http_user_agent" "\$http_x_forwarded_for"';
	access_log logs/access.log main;
	error_log logs/error.log warn;
	sendfile        on;
	tcp_nopush          on;
	keepalive_timeout  120;
	tcp_nodelay         on;
	server_tokens off;
	gzip    on;
	gzip_min_length 1k;
	gzip_buffers    4 64k;
	gzip_http_version 1.1;
	gzip_comp_level 4;
	gzip_types      text/plain application/x-javascript text/css application/xml;
	gzip_vary       on;
	client_max_body_size 10m;
	client_body_buffer_size 128k;
	proxy_connect_timeout 90;
	proxy_send_timeout 90;
	proxy_buffer_size 4k;
	proxy_buffers 4 32k;
	proxy_busy_buffers_size 64k;
	large_client_header_buffers 4 4k;
	client_header_buffer_size 4k;
	open_file_cache_valid 30s;
	open_file_cache_min_uses 1;
server {
	listen	80;
	server_name	localhost;
	location / {
	root	html;
	index index.html index.htm;
	}
	location ~ \.php$ {
	fastcgi_pass 127.0.0.1:9000;
	fastcgi_index index.php;
	fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
	include fastcgi_params;
	}
  }
}
EOF

#Create a PHP test page
cat >${NGINX_PREFIX}/html/index.php <<EOF
<?php
	phpinfo();
?>
EOF

#Config PHP
\cp php.ini-production /etc/php.ini
\cp /usr/local/php/etc/php-fpm.conf.default /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
\cp sapi/fpm/php-fpm.service /usr/lib/systemd/system
cat >/usr/local/php/etc/php-fpm.d/www.conf <<EOF
[www]
listen = 0.0.0.0:9000
listen.mode = 0666
user = www
group = www
pm = dynamic
pm.max_children = 128
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 10000
rlimit_files = 1024
slowlog = log/$pool.log.slow
EOF

#Config MYSQL
#Mysql config
useradd -s /sbin/nlogin mysql >/dev/null 2>&1
mkdir -p ${MYSQL_DIR}
chown -R ${MYSQL_USER}.${MYSQL_USER} ${MYSQL_DIR}
cat >/etc/my.cnf <<EOF
[mysqld]
#数据存储目录
datadir = ${MYSQL_DIR}
#socket通信文件
socket = /tmp/mysql.sock
#使用mysql用户启动
user = ${MYSQL_USER}
#MYSQL服务运行的端口号
port = 3306
#开启bin-log日志
log-bin = mysql-bin
#MYSQL服务ID号
server-id = 1
#定义error错误文件
log-error = ${MYSQL_DIR}/mysqld.log
#PID文件路径
pid-file = mysqld.pid
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
#设置字符集为utf8
character-set-server = utf8
[client]
default-character-set = utf8
port = 3306
socket = /tmp/mysql.sock
[mysql]
default-character-set = utf8
EOF

#Initialization Mysql
/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/data/mysql/ --basedir=/usr/local/mysql
ln -sf ${MYSQL_PREFIX}/bin/* /usr/bin
\cp ${MYSQL_PREFIX}/support-files/mysql.server /etc/init.d/mysqld
chmod o+x /etc/init.d/mysqld

#Config iptables(firewalld)、selinux
if [ ${SYSTEM_VERSION} -eq 6 ];then
	service iptables stop
	chkconfig iptables off
	sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
	setenforce 0
else
	systemctl stop firewalld.service
	systemctl disable firewalld.service
	sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
	setenforce 0
fi

#Start MYSQL、php-fpm、nginx and Add MySQL、php-fpm、nginx boot self start
${NGINX_PREFIX}/sbin/nginx
systemctl start php-fpm
/etc/init.d/mysqld start
grep -qw "${NGINX_PREFIX}" /etc/rc.d/rc.local
if [ $? -ne 0 ];then
	echo "${NGINX_PREFIX}/sbin/nginx" >>/etc/rc.d/rc.local
	chmod +x /etc/rc.d/rc.local
fi
systemctl enable php-fpm
chkconfig --add mysqld
chkconfig mysqld on
chmod +x /etc/rc.d/rc.local
}

function select_port_process() {
#Select ports and processes
netstat -lntup |egrep "80|9000|3306"
ps -ef | grep -v grep |egrep "nginx|php-fpm|mysql"
}

PS3="Please enter you select install menu:"
select i in LNMP Install_Nginx Install_Mysql Install_PHP LNMP_Config select_port_process quit
do
case $i in
	LNMP)
	Install_Nginx
	Install_Mysql
	Install_PHP
	LNMP_Config
	;;
	Install_Nginx)
	Install_Nginx
	;;
	Install_Mysql)
	Install_Mysql
	;;
	Install_PHP)
	Install_PHP
	;;
	LNMP_Config)
	LNMP_Config
	;;
	select_port_process)
	select_port_process
	;;
	quit)
	echo -e "\033[32m Exit selection Menu.\033[0m"
	exit 1
esac
done

若文章图片、下载链接等信息出错,请在评论区留言反馈,博主将第一时间更新!如本文“对您有用”,欢迎随意打赏,谢谢!

继续阅读
历史上的今天
4月
6
Wechat
微信扫一扫,加我!
weinxin
微信公众号
微信扫一扫,关注我!
weinxin
Shell最后更新:2024-1-24
小柒博客
  • 本文由 小柒博客 发表于 2020年4月6日20:13:07
  • 声明:本站所有文章,如无特殊说明或标注,本站文章均为原创。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。转载请务必保留本文链接:https://www.yangxingzhen.com/6677.html
匿名

发表评论

匿名网友
:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

拖动滑块以完成验证