#!/bin/bash
#Author:chenwei
#Time:2020-07-28 11:30:44
#Name:auto_clean_logs_v1.sh
#Version:V1.0
#Description:This script is used for automatically
#1.0 环境变量定义
function define_env(){
TOOLS_PATH="/home/nameke/tools"
CONF_PATH="/home/nameke/conf"
#PHP_VERSION="php-7.2.30"
}
#2.0 确保数据库和web服务软件安装并正常使用
function check_ngx_mysql(){
echo -e "\033[32m Step2:Check NGINX and MySQL ... \033[0m" && sleep 3;
ngx_mysql=$(netstat -lntup|egrep "nginx|mysql"|wc -l)
ngx_mysql_proc=$(ps aux|egrep "nginx|mysql"|egrep -v grep|wc -l)
if [ $ngx_mysql -gt 0 -a $ngx_mysql_proc -gt 0 ]
then
echo -e "\033[32m Nginx and MySQL had installed! \033[0m"
else
echo -e "\033[31m Nginx or MySQL doesn't installed,please check! \033[0m"
exit 2
fi
}
#3.0 检查安装php所需的lib库
function install_lib(){
rpm -qa zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel
rpm -qa freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel
yum install -y zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel
yum install -y freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel
echo -e "\033[32m Step3:Install lib Inventory succ! \033[0m"
}
#4.0 yum安装无法安装的libiconv库
function install_libiconv(){
cd $TOOLS_PATH && wget -c -q http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
tar zxf libiconv-1.14.tar.gz && cd $TOOLS_PATH/libiconv-1.14 && ./configure --prefix=/usr/local/libiconv
if [ $? -eq 0 ]
then
echo -e "\033[32m Step4:Configure lib libiconv succ! \033[0m"
sed -i 's#_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");#/*_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");*/#g' $TOOLS_PATH/libiconv-1.14/srclib/stdio.in.h
sed -i '2a #if defined(__GLIBC__) && !defined(__UCLIBC__) && !__GLIBC_PREREQ(2, 16)\n_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");\n#endif\n' $TOOLS_PATH/libiconv-1.14/srclib/stdio.in.h
make && make install
if [ $? -eq 0 ]
then
echo -e "\033[32m make and make install libiconv succ! \033[0m"
cd $TOOLS_PATH
else
echo -e "\033[31m make and make install libiconv fail! \033[0m"
exit 2;
fi
else
echo -e "\033[31m Step4:Configure lib libiconv fail! \033[0m"
exit 2;
fi
}
#4.0 安装libmcrypt库
function install_libmcrypt(){
cd /etc/yum.repos.d/ && wget -c -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum -y install libmcrypt-devel && echo "\033[32m Step5:Install libmcrypt succ! \033[0m"
}
#5.0 安装mhash与mcrypt加密扩展库
function install_mhash_mcrypt(){
yum install -y mhash mcrypt && echo "\033[32m Step6:Install mhash and mcrypt succ! \033[0m"
}
#6.0 解压配置PHP
function install_php(){
cd $TOOLS_PATH && wget -c -q https://www.php.net/distributions/php-7.2.30.tar.gz
tar zxf php-7.2.30.tar.gz && cd $TOOLS_PATH/php-7.2.30 && ./configure \
--prefix=/data/php7.2.30 \
--with-config-file-path=/etc/php7.2.30 \
--with-mysql-sock=/data/mysql3306/var/mysql.sock \
--with-pdo-mysql=shared,mysqlnd \
--with-mysqli=shared,mysqlnd \
--with-pdo-mysql=shared,mysqlnd \
--with-iconv-dir=/usr/local/libiconv \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir=/usr \
--enable-xml \
--disable-rpath \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--with-curl \
--enable-mbregex \
--enable-mbstring \
--with-gd \
--with-openssl \
--with-mhash \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--enable-zip \
--enable-soap \
--enable-short-tags \
--enable-static \
--with-xsl \
--enable-fpm \
--with-fpm-user=www \
--with-fpm-group=www \
--enable-ftp
#特别提示:上述每行结尾的换行符反斜线(\)之后,不能再有任何字符,包括空格。
if [ $? -eq 0 ]
then
echo -e "\033[32m Step7:Configure php-7.2.30 lib succ! \033[0m"
else
echo -e "\033[31m Step7:Configure php-7.2.30 lib fail! \033[0m"
exit 2;
fi
}
#7.0 编译PHP
function deconde_php(){
ln -s /data/mysql3306/lib/libmysqlclient.so.20 /usr/lib64
cd $TOOLS_PATH/php-7.2.30 && touch ext/phar/phar.phar
make && make install
if [ $? -eq 0 ]
then
echo -e "\033[32m Step8:Make and Make install php-7.2.30 succ! \033[0m"
cd $TOOLS_PATH
else
echo -e "\033[31m Make and Make install php-7.2.30 fail! \033[0m"
exit 2;
fi
}
#8.0 配置PHP引擎配置文件php.ini
function config_php(){
ln -s /data/php7.2.30 /data/php #&& ls -l /data/php/php.ini*
cd $TOOLS_PATH/php-7.2.30 && cp php.ini-production /data/php/lib/php.ini
ls -l /data/php/lib/php.ini && echo -e "\033[32m Step8:Config php-7.2.30 link file succ! \033[0m"
}
#9.0 配置PHP服务(FastCGI方式)的配置文件php-fpm.conf
function config_php_fpm(){
cd /data/php/etc && \cp -f php-fpm.conf.default php-fpm.conf
cp php-fpm.d/www.conf.default php-fpm.d/www.conf && echo -e "\033[32m Step9:Config php_fpm succ! \033[0m"
}
#10.0 配置php-fpm开机自启动
function php_unit_config(){
if [ ! -f /usr/lib/systemd/system/php-fpm.service ]
then
cat >>/usr/lib/systemd/system/php-fpm.service<<EOF
[Unit]
Description = PHP-FPM Server
Documentation = man:php7.2.30
Documentation = https://www.php.net/distributions/
After = network.target
After = syslog.target
[Service]
User = www
Group = www
PIDFile = /data/php/var/run/php-fpm.pid
ExecStartPre = /data/php/sbin/php-fpm -t
ExecStart = /data/php/sbin/php-fpm -c /data/php/lib/php.ini -y /data/php/etc/php-fpm.conf
ExecStop=/bin/kill -s HUP $MAINPID
LimitNOFILE = 5000
#Restart=on-failure
#RestartPreventExitStatus=1
KillMode=process
PrivateTmp=false
[Install]
WantedBy = multi-user.target
EOF
if [ $? -eq 0 ]
then
echo -e "\033[32m config php-fpm.service succ \033[0m" && systemctl daemon-reload && systemctl start php-fpm.service
else
echo -e "\033[31m config php-fpm.service fail \033[0m"
fi
else
echo -e "\033[33m php-fpm.service had exist \033[0m" && systemctl daemon-reload && systemctl start php-fpm.service
fi
}
#11.0 启动PHP服务并检查(FastCGI方式)
function check_start_php(){
chown -R www:www /data/php/
ps -ef|grep php-fpm
lsof -i:9000
phpfpm_port=$(netstat -antlp|grep 9000|egrep -v grep|wc -l)
phpfpm_proc=$(ps aux|grep php-fpm|egrep -v grep|wc -l)
if [ $phpfpm_port -gt 0 -a $phpfpm_proc -gt 0 ]
then
echo -e "\033[32m Step10:Start php-fpm succ! \033[0m"
else
echo -e "\033[32m Step10:Start php-fmp fail!,please check\033[0m"
php_unit_config
fi
}
#11.0 配置nginx支持php程序请求访问
#11.1 查看当前配置
function config_ngx_php(){
#cd /etc/nginx/conf && cp nginx.conf nginx.conf.bak-$(date +%Y%m%d-%H%m)
#\cp -f $CONF_PATH/www.shinebook.org.conf /etc/nginx/conf/nginx.conf
/etc/nginx/sbin/nginx -t && /etc/nginx/sbin/nginx -s reload
#11.2 编写index.php测试PHP解析请求
\cp -f $CONF_PATH/test_php.php /webroot/www.shinebook.org/
\cp -f $CONF_PATH/test_mysql.php /webroot/www.shinebook.org/
cat >>/webroot/www.shinebook.org/test_mysql.php<<EOF
<?php
$servername = "localhost";
$username = "root";
$password = "13.14xiaoCY";
//$link_id=mysql_connect('主机名','用户','密码');
//mysql -u用户 -p密码 -h 主机
$conn = mysqli_connect($servername, $username, $password);
if ($conn) {
echo "mysql successful by root !\n";
}
else{
die("Connection failed: " . mysqli_connect_error());
}
?>
EOF
chown -R www:www /webroot/www.shinebook.org/
ls -l /webroot/www.shinebook.org/
}
#13、设置开机自启动
function autostart_phpfpm(){
echo -e "#start nginx+php-fpm by oldboy at 20200913" >>/etc/rc.local
echo -e "/data/php/sbin/php-fpm -t && /data/php/sbin/php-fpm">>/etc/rc.local
echo -e "\033[32m config auto_start php-fpm nginx mysql succ !\033[0m"
}
function main(){
if [ $UID -ne 0 ]
then
echo -e "\033[31m You must be root to run this script! \033[0m"
exit 2;
else
define_env;
check_ngx_mysql;
install_lib;
install_libiconv;
install_libmcrypt;
install_mhash_mcrypt;
install_php;
deconde_php;
config_php;
config_php_fpm;
check_start_php;
config_ngx_php;
#autostart_phpfpm;
netstat -antlp|egrep -v grep
fi
echo -e "\033[32m End of install php-fpm! \033[0m"
exit 2
}
main