####一键安装lamp/lnmp
- lamp:linux+apache+mysql+php
- lnmp:linux+nginx+mysql+php
####各组件版本
- apache 2.4.29
- nginx 1.14.2
- mysql 5.6.42
- redis 4.0.1
- php 7.2.2
####特点
- 兼容centos6<后续将加入centos7的兼容>
- 基于源码编译一键安装lamp或lnmp
- 可选择组建单独安装
- nginx添加ngfw防火墙模块
- php添加redis和tidy等常用扩展
- 自动添加了80端口iptables通过条例
- 需手动添加环境变量至/etc/profile
- 所有源码包均来自官方
- 自动配置redis和mysql高强度密码
####一键脚本
#!/bin/bash
#一键安装lnmp/lamp脚本<apache nginx mysql redis>
set -e
logdir="/tmp/onekeyinstall/" #临时目录
basedir="/usr/local/" #安装目录
#安装包地址
#----apache----
apache_pac="http://archive.apache.org/dist/httpd/httpd-2.4.29.tar.gz" #apache 2.4.29
apr_pac="https://archive.apache.org/dist/apr/apr-1.5.2.tar.bz2" #apr 1.5.2
apr_util_pac="https://archive.apache.org/dist/apr/apr-util-1.5.4.tar.bz2" #apr-util 1.5.4
pcre_pac="https://ftp.pcre.org/pub/pcre/pcre-8.38.zip" #pcre 8.38
#----nginx----
nginx_pac="http://nginx.org/download/nginx-1.14.2.tar.gz" #nginx 1.14.2
LuaJIT_pac="http://luajit.org/download/LuaJIT-2.0.5.tar.gz" #LuaJIT 2.0.5
ngx_devel_kit_pac="https://codeload.github.com/simpl/ngx_devel_kit/zip/master" #ngx_devel_kit
openresty_pac="https://github.com/openresty/lua-nginx-module/archive/v0.10.14.tar.gz" #openresty
ngx_cache_purge_pac="http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz" #ngx_cache_purge 2.3
ngx_http_substitutions_filter_module="https://github.com/yaoweibin/ngx_http_substitutions_filter_module/archive/master.zip" #ngx_http_substitutions_filter_module
nginx_vts="https://github.com/vozlt/nginx-module-vts/archive/master.zip"
#----mysql----
mysql_pac="https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.42.tar.gz" #mysql 5.6.42
#----redis----
redis_pac="http://download.redis.io/releases/redis-4.0.1.tar.gz" #redis 4.0.1
#----php----
php_pac="http://cl1.php.net/get/php-7.2.2.tar.gz/from/a/mirror" #php 7.2.2
php_redis_pac="http://pecl.php.net/get/redis-4.2.0.tgz" #php-redis 4.2.0扩展
#安装编译环境
function install_make()
{
yum install cmake wget epel-release vim perl perl-devel -y
yum groupinstall "Development Tools" -y
}
install_make
mkdir -p ${logdir}
#生成随机密码
#例(随机生成20位高强度密码): random_passwd 20
function random_passwd()
{
MATRIX="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz~#$%^&*()_+="
LENGTH="$1"
while [ "${n:=1}" -le "$LENGTH" ]
do
PASS="$PASS${MATRIX:$(($RANDOM%${#MATRIX})):1}"
let n+=1
done
echo $PASS
}
#判断是否存在源码包,不存在则下载
function download_pac()
{
cd ${logdir}
if [[ `ls | grep -E "tar|zip" | grep $2` -eq 0 ]];then
wget -c -t 3 "$1" $3
fi
}
#安装apache
function install_apache()
{
#卸载残余环境
#rpm -e `rpm -qa|grep -E "httpd"`
cd ${logdir}
download_pac "${apache_pac}" http #apache 2.4.29
download_pac "${apr_pac}" apr #apr 1.5.2
download_pac "${apr_util_pac}" apr-util #apr-util 1.5.4
download_pac "${pcre_pac}" pcre #pcre 8.38
#解压所有安装包
tar -xvf apr-1.5.2.tar.bz2
tar -xvf apr-util-1.5.4.tar.bz2
unzip pcre-8.38.zip
tar -xvf httpd-2.4.29.tar.gz
#安装apr 1.5.2
cd ${logdir}apr-1.5.2
./configure --prefix=${basedir}apr
make && make install
#安装apr-util 1.5.4
cd ${logdir}apr-util-1.5.4
./configure --prefix=${basedir}apr-util --with-apr=${basedir}apr
make && make install
#安装pcre 8.38
cd ${logdir}pcre-8.38
./configure --prefix=${basedir}pcre
make && make install
#安装apache 2.4.29
cd ${logdir}httpd-2.4.29
./configure --prefix=${basedir}apache --with-apr=${basedir}apr --with-apr-util=${basedir}apr-util --with-pcre=${basedir}pcre --enable-so --enable-rewrite --with-mpm=prefork
make && make install
#修改http配置文件
sed -i 's/User daemon/User www/g' ${basedir}apache/conf/httpd.conf
sed -i 's/Group daemon/Group www/g' ${basedir}apache/conf/httpd.conf
sed -i 's/\#ServerName www.example.com:80/ServerName localhost:80/g' ${basedir}apache/conf/httpd.conf
useradd -M -s /sbin/nologin www
cp ${basedir}apache/bin/apachectl /etc/rc.d/init.d/httpd
echo "${basedir}apache/bin/apachectl -k start" >>/etc/rc.local
#chkconfig --add httpd
#chkconfig httpd on
#启动apache
service httpd start
#防火墙添加80端口
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
service iptables save
echo "-----apache安装并启动完毕-----" >${logdir}apache.log
echo "[http]" >>${logdir}apache.log
echo "版本:`${basedir}apache/bin/httpd -v | grep version | awk '{print $3}' | awk -F/ '{print $2}'`" >>${logdir}apache.log
echo "安装目录:${basedir}apache" >>${logdir}apache.log
}
#安装php
function install_php()
{
#rpm -e `rpm -qa|grep -E "php"` #卸载残余
yum install libwebp libwebp-devel ImageMagick libxml2-devel.x86_64 openssl.x86_64 openssl-devel.x86_64 bzip2-devel.x86_64 libcurl.x86_64 libcurl-devel.x86_64 libjpeg libpng.x86_64 freetype.x86_64 libjpeg-devel libpng-devel.x86_64 freetype-devel.x86_64 libmcrypt libmcrypt-devel mysql-devel -y #解决依赖
cd ${logdir}
download_pac "${php_pac}" php #php 7.2.2
mv mirror php-7.2.2.tar.gz
#解压安装包
tar -xvf php-7.2.2.tar.gz
#安装php
cd ${logdir}php-7.2.2
./configure --prefix=${basedir}php --with-libxml-dir --with-apxs2=${basedir}apache/bin/apxs --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv-dir --with-freetype-dir --with-gd --enable-gd-native-ttf --with-jpeg-dir --with-png-dir --with-webp-dir --with-zlib --enable-xml --disable-rpath --enable-magic-quotes --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-mbstring --with-mcrypt --enable-ftp --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-gettext --disable-fileinfo --enable-maintainer-zts
make && make install
cp php.ini-development ${basedir}php/lib/php.ini
#php安全配置
sed -i 's/disable_classes =/disable_classes = COM,pcntl_exec,putenv,mail,passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,escapeshellcmd,popen,dl,syslog,show_source,socket_create/g' ${basedir}php/lib/php.ini
sed -i 's/disable_functions =/disable_functions = COM,pcntl_exec,putenv,mail,passthru,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,escapeshellcmd,popen,dl,syslog,show_source,socket_create/g' ${basedir}php/lib/php.ini
echo "-----php安装完毕-----" >${logdir}php.log
echo "[php]" >>${logdir}php.log
echo "版本:`${basedir}php/bin/php -v | head -1 | awk '{print $2}'`" >>${logdir}php.log
echo "安装目录:${basedir}php" >>${logdir}php.log
}
#安装nginx
function install_nginx()
{
# rpm -e `rpm -qa|grep -E "nginx"` #卸载残余
yum install -y pcre pcre-devel zlib zlib-devel openssl openssl-devel
cd ${logdir}
download_pac "${nginx_pac}" nginx #nginx 1.14.2
download_pac "${LuaJIT_pac}" LuaJIT #LuaJIT 2.0.5
download_pac "${ngx_devel_kit_pac}" ngx_devel_kit "-O ngx_devel_kit.zip" #ngx_devel_kit
download_pac "${openresty_pac}" openresty "-O openresty.zip" #openresty
download_pac "${ngx_cache_purge_pac}" ngx_cache_purge #ngx_cache_purge 2.3
download_pac "${ngx_http_substitutions_filter_module}" ngx_http_substitutions "-O ngx_http_substitutions_filter_module.zip"
download_pac "${nginx_vts}" nginx-vts "-O nginx-vts.zip"
#解压安装包
tar -xvf nginx-1.14.2.tar.gz
tar -xvf LuaJIT-2.0.5.tar.gz
unzip ngx_devel_kit.zip
tar -xvf v0.10.14.tar.gz
unzip ngx_http_substitutions_filter_module.zip
unzip nginx-vts.zip
tar -xvf ngx_cache_purge-2.3.tar.gz
cd ${logdir}LuaJIT-2.0.5
make && make install
export LUAJIT_LIB=${basedir}lib
export LUAJIT_INC=${basedir}include/luajit-2.0
export LD_LIBRARY_PATH=${basedir}lib:$LD_LIBRARY_PATH
cd ${logdir}nginx-1.14.2
./configure --prefix=${basedir}nginx --user=www --group=www --with-mail --with-mail_ssl_module --with-http_ssl_module --with-http_flv_module --with-http_dav_module --with-http_sub_module --with-http_realip_module --with-http_addition_module --with-http_gzip_static_module --with-http_stub_status_module --with-pcre --add-module=${logdir}ngx_cache_purge-2.3/ --add-module=${logdir}ngx_devel_kit-master/ --add-module=${logdir}lua-nginx-module-0.10.14/ --add-module=${logdir}ngx_http_substitutions_filter_module-master/ --add-module=${logdir}nginx-module-vts-master/
make && make install
ln -s ${basedir}nginx/sbin/nginx /usr/bin/nginx
ln -s ${basedir}lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2
echo -e '#!/bin/sh\n# chkconfig: - 85 15 \n# description: nginx is a World Wide Web server. It is used to serve \n# proxy and IMAP/POP3 proxy server\n# Description: Start and Stop Nginx\n# Provides: nginx\n# Default-Start: 2 3 4 5\n# Default-Stop: 0 1 6\nPATH=${basedir}sbin:${basedir}bin:/sbin:/bin:/usr/sbin:/usr/bin\nNAME=nginx\nNGINX_BIN=${basedir}nginx/sbin/$NAME\nCONFIGFILE=${basedir}nginx/conf/$NAME.conf\nPIDFILE=/home/www/pid/$NAME.pid\nSCRIPTNAME=/etc/init.d/$NAME\ncase "$1" in\nstart)\necho -n "Starting $NAME... "\nif netstat -tnpl | grep -q nginx;then\necho "$NAME (pid `pidof $NAME`) already running."\nexit 1\nfi\n$NGINX_BIN -c $CONFIGFILE\nif [ "$?" != 0 ] ; then\necho " failed"\nexit 1\nelse\necho " done"\nfi\n;;\nstop)\necho -n "Stoping $NAME... "\nif ! netstat -tnpl | grep -q nginx; then\necho "$NAME is not running."\nexit 1\nfi\n$NGINX_BIN -s stop\nif [ "$?" != 0 ] ; then\necho " failed. Use force-quit"\nexit 1\nelse\necho " done"\nfi\n;;\nstatus)\nif netstat -tnpl | grep -q nginx; then\nPID=`pidof nginx`\necho "$NAME (pid $PID) is running..."\nelse\necho "$NAME is stopped"\nexit 0 \nfi\n;;\nforce-quit)\necho -n "Terminating $NAME... "\nif ! netstat -tnpl | grep -q nginx; then\necho "$NAME is not running."\nexit 1\nfi\nkill `pidof $NAME`\nif [ "$?" != 0 ] ; then\necho " failed"\nexit 1\nelse\necho " done" \nfi\n;;\nrestart)\n$SCRIPTNAME stop\nsleep 1\n$SCRIPTNAME start\n;;\nreload) \necho -n "Reload service $NAME... "\nif netstat -tnpl | grep -q nginx; then\n$NGINX_BIN -s reload\necho " done"\nelse\necho "$NAME is not running, can not reload."\nexit 1\nfi\n;;\nconfigtest)\necho -n "Test $NAME configure files... "\n$NGINX_BIN -t\n;;\n*)\necho "Usage: $SCRIPTNAME {start|stop|force-quit|restart|reload|status|configtest}"\nexit 1\n;;\nesac\n' >/etc/init.d/nginx
chmod a+x /etc/init.d/nginx
chkconfig --add nginx
chkconfig --level 2345 nginx on
#启动nginx
service nginx start
#防火墙添加80端口
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
service iptables save
echo "-----nginx安装并启动完毕-----" >${logdir}nginx.log
echo "[nginx]" >>${logdir}nginx.log
echo "版本:1.14.2" >>${logdir}nginx.log
echo "安装目录:${basedir}nginx" >>${logdir}nginx.log
}
#安装redis
function install_redis()
{
# rpm -e `rpm -qa|grep -E "redis"` #卸载残余
cd ${logdir}
download_pac "${redis_pac}" redis #redis 4.0.1
#解压安装包
tar -xvf redis-4.0.1.tar.gz
#安装redis 4.0.1
cd ${logdir}redis-4.0.1
make
cd src
make install PREFIX=${basedir}redis
cd ..
cp ${basedir}redis/redis.conf ${basedir}redis/redis.conf.bak
#修改redis默认数据目录为/home/data/redis
sed -i 's/dir .\//dir \/home\/data\/redis/g' ${basedir}redis/redis.conf
mkdir -p /home/data/redis
#后台运行
sed -i 's/daemonize no/daemonize yes/g' ${basedir}redis/redis.conf
#开机启动
echo "${basedir}redis/bin/redis-server ${basedir}redis/redis.conf" >> /etc/rc.local
#添加随机高安全redis口令
redis_passwd=`random_passwd 20`
sed "/SECURITY/a\requirepass ${redis_passwd}" ${basedir}redis/redis.conf
#启动redis
${basedir}redis/bin/redis-server ${basedir}redis/redis.conf
echo "-----redis安装并启动完毕-----" >${logdir}redis.log
echo "[redis]" >>${logdir}redis.log
echo "版本:`${basedir}redis/bin/redis-server -v | awk '{print $3}' | awk -F= '{print $2}'`" >>${logdir}redis.log
echo "安装目录:${basedir}redis" >>${logdir}redis.log
echo "数据目录:/home/data/redis" >>${logdir}redis.log
echo "密码:${redis_passwd}" >>${logdir}redis.log
}
#安装mysql
function install_mysql()
{
rm -fr /etc/my.cnf #删除默认mysql配置文件
groupadd mysql && useradd -g mysql -s /bin/false mysql #添加用户
cd ${logdir}
yum install -y bison bison-devel ncurses ncurses-devel perl
download_pac "${mysql_pac}" mysql #mysql 5.6.38
#解压安装包
tar -xvf mysql-5.6.42.tar.gz
#安装mysql 5.6.42
cd ${logdir}mysql-5.6.42
#设置mysql默认数据目录为/home/data/mysql
mkdir -p /home/data/mysql && chown -R mysql.mysql /home/data/mysql
cmake . -DCMAKE_INSTALL_PREFIX=${basedir}mysql -DMYSQL_DATADIR=/home/data/mysql -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_general_ci
make && make install
#初始化mysql
${basedir}mysql/scripts/mysql_install_db --user=mysql --basedir=${basedir}mysql --datadir=/home/data/mysql
ln -s ${basedir}mysql/my.cnf /etc/my.cnf
cp ${basedir}mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld
#添加开机启动
chmod 755 /etc/init.d/mysqld
chkconfig mysqld on
#启动mysql
service mysqld start
#添加20位随机高安全root密码
mysql_passwd=`random_passwd 20`
${basedir}mysql/bin/mysql -uroot -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY '${mysql_passwd}' WITH GRANT OPTION;"
${basedir}mysql/bin/mysql -uroot -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '${mysql_passwd}' WITH GRANT OPTION;"
echo "-----mysql安装并启动完毕-----" >${logdir}mysql.log
echo "[mysql]" >>${logdir}mysql.log
echo "版本:`${basedir}mysql/bin/mysqld -V | awk '{print $3}'`" >>${logdir}mysql.log
echo "安装目录:${basedir}mysql" >>${logdir}mysql.log
echo "数据目录:/home/data/mysql" >>${logdir}mysql.log
echo "root密码:${mysql_passwd}" >>${logdir}mysql.log
}
#apache添加php支持
function apache_add_php()
{
sed -i 's/#LoadModule rewrite_module modules/LoadModule rewrite_module modules/g' ${basedir}apache/conf/httpd.conf
echo -e "<FilesMatch \.php$>\n\tSetHandler application/x-httpd-php\n</FilesMatch>" >>${basedir}apache/conf/httpd.conf
sed -i "s/DirectoryIndex\ index.html/DirectoryIndex\ index.html\ index.php/g" ${basedir}apache/conf/httpd.conf
service httpd restart
}
#php安装redis扩展
function install_php_redis()
{
cd ${logdir}
download_pac "${php_redis_pac}" redis #php_redis 4.2.0 扩展
tar -zxvf redis-4.2.0.tgz
cd ${logdir}redis-4.2.0
${basedir}php/bin/phpize
./configure --with-php-config=${basedir}php/bin/php-config
make && make install
sed -i 's/\;extension=php_bz2/extension=redis.so\n\;extension=php_bz2/g' ${basedir}php/lib/php.ini
}
#php安装tidy扩展
function install_php_tidy()
{
yum install libtidy libtidy-devel -y
cd ${logdir}php-7.1.10
cd ext
cd tidy
${basedir}php/bin/phpize
./configure --with-php-config=${basedir}php/bin/php-config
make && make install
sed -i 's/\;extension=php_bz2/extension=tidy.so\n\;extension=php_bz2/g' ${basedir}php/lib/php.ini
}
echo "################################################"
echo "## ##"
echo "## ##"
echo "## redis mysql apache nginx php 一键安装脚本 ##"
echo "## ##"
echo "## ##"
echo "################################################"
echo "1.一键安装lamp:<apache mysql php>"
echo "2.一键安装lnmp:<nginx mysql php>"
echo "3.单独安装redis 4.1.0"
echo "4.单独安装mysql 5.6.38"
echo "5.单独安装apache 2.4.29"
echo "6.单独安装nginx 1.15.5"
echo "7.单独安装php 7.1.10"
echo "8.单独安装php-redis扩展"
echo "9.单独安装php-tidy扩展"
echo "10.http添加php解析<如果单独安装php并且本地安装了apache在/usr/local/apache,则需选择此项添加php解析>"
read -t 30 -p "请输入你的选择: 1-7 " choose
case "$choose" in
"1")
echo "1.一并安装php扩展redis.so、tidy.so"
echo "2.不安装php扩展redis.so、tidy.so"
read -t 30 -p "请输入你的选择: 1或2 " addso
case "${addso}" in
"1")
echo 你的选择是1.一键安装lamp,并安装redis.so,tidy.so
install_apache
install_php
install_mysql
apache_add_php
install_php_redis
install_php_tidy
;;
"2")
echo 你的选择是1.一键安装lamp,不安装redis.so,tidy.so
install_apache
install_php
install_mysql
apache_add_php
;;
"*")
echo "请输入1或2"
esac
;;
"2")
echo "1.一并安装php扩展redis.so、tidy.so"
echo "2.不安装php扩展redis.so、tidy.so"
read -t 30 -p "请输入你的选择: 1或2 " noaddso
case "${noaddso}" in
"1")
echo 你的选择是1.一键安装lnmp,并安装redis.so,tidy.so
install_nginx
install_php
install_mysql
install_php_redis
install_php_tidy
;;
"2")
echo 你的选择是1.一键安装lnmp,不安装redis.so,tidy.so
install_nginx
install_php
install_mysql
;;
"*")
echo "请输入1或2"
esac
;;
"3")
echo 你的选择是3.单独安装redis 4.1.0
install_redis
;;
"4")
echo 你的选择是4.单独安装mysql 5.6.38
install_mysql
;;
"5")
echo 你的选择是5.单独安装apache 2.4.29
install_apache
;;
"6")
echo 你的选择是6.单独安装nginx 1.15.5
install_nginx
;;
"7")
echo 你的选择是7.单独安装php 7.1.10
echo "1.一并安装php扩展redis.so、tidy.so"
echo "2.不安装php扩展redis.so、tidy.so"
read -t 30 -p "请输入你的选择: 1或2 " php
case "${php}" in
"1")
echo 你的选择是1.单独安装php,并安装redis.so,tidy.so
install_php
install_php_redis
install_php_tidy
;;
"2")
echo 你的选择是1.单独安装php,不安装redis.so,tidy.so
install_php
;;
"*")
echo "请选择1或2"
esac
;;
"8")
echo 你的选择是8.单独安装php-redis扩展
install_php_redis
;;
"9")
echo 你的选择是9.单独安装php-tidy扩展
install_php_tidy
;;
"10")
echo 你的选择是10.http添加php解析
apache_add_php
;;
"*")
echo "请输入1-7"
esac
#输出信息
cat ${logdir}*.log
#清除临时文件
cd ${logdir}
rm -fr `ls | grep -E "tar|zip"`
评论区