脚本分析:
目录结构
include目录:含有mysql_install.sh,init_os.sh,php_install.sh nginx_install.sh
src目录:php包,nginx包,依赖包,mysql源,以下缺一不可
nginx1.16.1下载:http://nginx.org/download/nginx-1.16.1.tar.gz
php7.3下载: https://www.php.net/distributions/php-7.3.16.tar.gz
依赖包:https://libzip.org/download/libzip-1.2.0.tar.gz
mysql源:http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
建立目录:
[root@localhost ~]# mkdir lnmp
[root@localhost ~]# cd lnmp
[root@localhost lnmp]# mkdir src include
[root@localhost lnmp]# ll
total 0
drwxr-xr-x. 2 root root 6 Mar 31 13:48 include
drwxr-xr-x. 2 root root 6 Mar 31 13:48 src
将下载的nginx,php,依赖包放到src目录
[root@localhost src]# ll
total 21672
-rw-r--r-- 1 root root 1514966 Apr 10 00:05 libzip-1.2.0.tar.gz
-rw-r--r--. 1 root root 1032630 Apr 9 07:17 nginx-1.16.1.tar.gz
-rw-r--r--. 1 root root 19636389 Apr 9 07:17 php-7.3.16.tar.gz
建立文件
[root@localhost lnmp]# touch lnmp.sh
[root@localhost lnmp]# touch installrc
[root@localhost lnmp]# cd include
[root@localhost include]# touch php_install.sh nginx_install.sh init_os.sh mysql_install.sh
[root@localhost include]# ll
total 0
-rw-r--r--. 1 root root 0 Mar 31 13:49 mysql_install.sh
-rw-r--r--. 1 root root 0 Mar 31 13:49 init_os.sh
-rw-r--r--. 1 root root 0 Mar 31 13:49 nginx_install.sh
-rw-r--r--. 1 root root 0 Mar 31 13:49 php_install.sh
nginx脚本 vim nginx_install.sh
#!/bin/bash
#by Lining
nginx_install(){
yum install -y gcc openssl-devel pcre-devel
useradd nginx
tar zxf $work_dir/src/$nginx_version -C $work_dir/src/
cd $work_dir/src/${nginx_version%.tar.gz}
./configure --prefix=$nginx_prefix_dir
make -j $cpus
make install
echo "export NGINX_HOME=$nginx_prefix_dir" >>/etc/profile
echo 'PATH=$PATH:$NGINX_HOME/sbin' >>/etc/profile
source /etc/profile
echo "$nginx_prefix_dir/sbin/nginx" >> /etc/rc.local
chmod a+x /etc/rc.d/rc.local
nginx
}
php脚本vim php_install.sh
#!/bin/bash
#by Lining
php_install(){
yum -y install libxml2 libxml2-devel openssl openssl-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 zlib zlib-devel glibc glibc-devel glib2 glib2-devel ncurses curl gdbm-devel db4-devel libXpm-devel libX11-devel gd-devel gmp-devel expat-devel xmlrpc-c xmlrpc-c-devel libicu-devel libmcrypt-devel libmemcached-devel libzip gcc-c++
##libzip
yum remove libzip -y
tar zxf $work_dir/src/$libzip_version -C $work_dir/src/
cd $work_dir/src/${libzip_version%.tar.gz}
./configure
make -j $cpus && make install
#解决报错zipconf.h: No such file or dire...
cp /usr/local/lib/libzip/include/zipconf.h /usr/local/include/zipconf.h
##解决off_t undefined
echo -e '/usr/local/lib64\n/usr/local/lib\n/usr/lib\n/usr/lib64' >>/etc/ld.so.conf
ldconfig -v
#编译
tar zxf $work_dir/src/$php_version -C $work_dir/src/
cd $work_dir/src/${php_version%.tar.gz}
groupadd www
useradd -g www www
./configure \
--prefix=$php_prefix_dir\
--enable-fpm\
--with-fpm-user=www\
--with-fpm-group=www\
--with-config-file-path=$php_prefix_dir/conf\
--disable-rpath\
--enable-soap\
--with-libxml-dir\
--with-xmlrpc\
--with-openssl\
--with-mhash\
--with-pcre-regex\
--with-zlib\
--enable-bcmath\
--with-bz2\
--enable-calendar\
--with-curl\
--enable-exif\
--with-pcre-dir\
--enable-ftp\
--with-gd\
--with-openssl-dir\
--with-jpeg-dir\
--with-png-dir\
--with-zlib-dir\
--with-freetype-dir\
--enable-gd-jis-conv\
--with-gettext\
--with-gmp\
--with-mhash\
--enable-mbstring\
--with-onig\
--with-mysqli=mysqlnd\
--with-pdo-mysql=mysqlnd\
--with-zlib-dir\
--with-readline\
--enable-shmop\
--enable-sockets\
--enable-sysvmsg\
--enable-sysvsem \
--enable-sysvshm \
--enable-wddx\
--with-libxml-dir\
--with-xsl\
--enable-zip\
--with-pear
make -j $cpus && make install
echo "export PHP_HOME=$php_prefix_dir" >>/etc/profile
echo 'PATH=$PATH:$PHP_HOME/bin' >>/etc/profile
source /etc/profile
cp $work_dir/src/${php_version%.tar.gz}/php.ini-production $php_prefix_dir/conf/php.ini
cp $php_prefix_dir/etc/php-fpm.conf.default $php_prefix_dir/etc/php-fpm.conf
cp $php_prefix_dir/etc/php-fpm.d/www.conf.default $php_prefix_dir/etc/php-fpm.d/www.conf
cp $work_dir/src/${php_version%.tar.gz}/sapi/fpm/php-fpm.service /usr/lib/systemd/system/php-fpm.service
systemctl start php-fpm.service
systemctl enable php-fpm.service
}
installrc配置文件vim installrc(这里面自定义参数)
#!/bin/bash
#by Lining
nginx_version=nginx-1.16.1.tar.gz
php_version=php-7.3.16.tar.gz
libzip_version=libzip-1.2.0.tar.gz
cpus=`lscpu |grep '^CPU(s)'| awk '{print $NF}'`
nginx_prefix_dir=/usr/local/nginx
php_prefix_dir=/usr/local/php
new_password=Qwe123.. #mysql_password,必须符合长度8,且必须含有数字,小写或大写字母,特殊字符,否则密码改不成功
编辑mysql_install.sh
#!/bin/bash
#by Lining
mysql_install(){
rpm -ivh $work_dir/src/mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql-community-server
systemctl start mysqld.service
systemctl enable mysqld.service
old_password=`grep "temporary password" /var/log/mysqld.log |awk '{print $NF}'`
mysql --connect-expired-password -uroot -p"$old_password" -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '$new_password';"
if [ $? -eq 0 ];then
echo "mysql_password is $new_password"
else
new_password=$old_password
fi
}
编辑init_os.sh
#!/bin/bash
#by Lining
init_os(){
systemctl stop firewalld;systemctl disable firewalld;
sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config
rm -rvf /etc/yum.repos.d/*
#配置阿里源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum install -y wget
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum install -y vim bash-completion lftp
echo "初始化完成"
}
编辑主程序 vim lnmp.sh
#!/bin/bash
#by Lining
ping -c2 www.baidu.com >/dev/null
if [ $? -eq 0 ];then
work_dir=$(cd $(dirname $0);pwd)
. $work_dir/include/init_os.sh
. $work_dir/include/nginx_install.sh
. $work_dir/include/php_install.sh
. $work_dir/include/mysql_install.sh
. $work_dir/installrc
init_os
nginx_install
php_install
mysql_install
echo "nginx安装目录:$nginx_prefix_dir"
echo "php安装目录:$php_prefix_dir"
echo "mysql密码:$new_password"
else
echo "网络有问题!"
fi
到此,脚本就写完了。只需执行lnmp.sh脚本就行了
[root@localhost ~]# chmod +x lnmp/*
[root@localhost ~]# ./lnmp/lnmp.sh
本脚本只是写来自己学习的,大佬勿喷