shell 脚本实现二进制安装 LAMP 架构的 word press

#!/bin/bash
. /etc/init.d/functions
set -u
MYSQL="mariadb-10.2.31-linux-systemd-x86_64.tar.gz"
PHP="php-7.4.12.tar.bz2"
HTTPD="httpd-2.4.46.tar.gz"
APR="apr-1.7.0.tar.bz2"
ARP_UTIL="apr-util-1.6.1.tar.bz2"
APP="wordpress-5.4.2-zh_CN.zip"
COLOR='echo -e \e[01;35m'
END='\e[0m'
SRC_DIR="/usr/local/src"  #源码包路径
CPU=`lscpu| awk '/^CPU\(s\):/{print $NF}'`
PASS="heshizhe" #数据库密码
MYSQL_WORD="heshizhe" #wordpress密码

APR_DIR=${APR%.tar*}  #变量高级用法用来去解压缩文件之后的名称
HTTP_DIR=${HTTPD%.tar*}
APR_UTIL_DIR=${ARP_UTIL%.tar*}
PHP_DIR=${PHP%.tar*}

FILE_HTTP="/apps/httpd" #安装HTTPD路径

check_file () {
 cd $SRC_DIR
 if   [ ! -e $MYSQL ];then
    $COLOR"缺少文件${MYSQL}"$END
    exit 10
 elif [ ! -e $PHP ];then
    $COLOR"缺少文件${PHP}"$END
    exit 20
 elif [ ! -e $HTTPD ];then
    $COLOR"缺少文件${HTTPD}"$END
    exit 30
 elif [ ! -e $APR ];then
    $COLOR"缺少文件${APR}"$END
    exit 40
 elif [ ! -e $ARP_UTIL ];then
    $COLOR"缺少文件${ARP_UTIL}"$END
    exit 50
 elif [ ! -e $APP ];then
    $COLOR"缺少文件${APP}"$END
    exit 60
 else
    $COLOR"相关文件已准备好"$END
 fi
}


install_package(){
$COLOR"开始安装环境包"$END
yum install -y  bzip2 unzip numactl-libs libaio perl-Data-Dumper  gcc make pcre-devel openssl-devel expat-devel libxml2-devel bzip2-devel  libmcrypt-devel sqlite-devel  oniguruma-devel &> /dev/null
}


install_mysql() {
local  DATA_DIR="/data/mysql"  #数据库目录
local  FILE_DIR=${SRC_DIR}/${MYSQL}

   if [  -e  /usr/local/mysql ];then
        action "数据库已存在" false
   else
        $COLOR"解压数据库"$END
      tar xf $FILE_DIR  -C /usr/local/  &> /dev/null
      MYSQL_DIR=`echo $MYSQL | sed -nr 's#^(.*[0-9]).*#\1#p'`
      ln -s /usr/local/$MYSQL_DIR  /usr/local/mysql
      chown -R root.root /usr/local/mysql
   fi

   if id mysql &> /dev/null;then
        $COLOR"用户已存在跳过用户和组创建"$END
   else
        groupadd -r -g 306 mysql &> /dev/null
        useradd -r -g 306  -s /sbin/nologin/ mysql &> /dev/null
        action  "用户和组创建完成"
   fi

   if [ -f $DATA_DIR ];then
        $COLOR"数据库目录已存在"$END
   else
        $COLOR"创建数据库目录"$END
        mkdir -p ${DATA_DIR}
        chown mysql.mysql ${DATA_DIR}
   fi

 cat > /etc/my.cnf<<-EOF
[mysqld]
datadir=/data/mysql #指定数据库目录
socket=/data/mysql/mysql.sock #套接字文件
skip_name_resolve=1 #禁止域名解析
log-error=/data/mysql/mysql.log #日志文件位置
pid-file=/data/mysql/mysql.pid  #记录当前 mysqld 进程的 pid
[client]
socket=/data/mysql/mysql.sock
EOF
echo 'PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
. /etc/profile.d/mysql.sh

mysqld --initialize --user=mysql --datadir=/data/mysql
mysql_pass=`awk '/root@localhost:/{print $NF}' /data/mysql/mysql.log `
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
systemctl start mysqld
[ $? -ne 0 ] &&   { $COLOR"数据库启动失败退出"$END;exit; }
mysqladmin -uroot -p$mysql_pass password $PASS  &> /dev/null
action "数据库安装完成"
 mysql -uroot -p$PASS  -e 'create database wordpress'
 mysql -uroot -p$PASS  -e "grant all on wordpress.* to wordpress@'localhost' identified  by '$MYSQL_WORD'"
}

install_httpd() {

$COLOR"开始安装HTTPD"$END
cd $SRC_DIR

$COLOR"开始解压源代码包并且三合一"$END
tar xf ${HTTPD}
tar xf ${APR}
tar xf ${ARP_UTIL}
mv ${APR_DIR} ${HTTP_DIR}/srclib/apr
mv ${APR_UTIL_DIR}  ${HTTP_DIR}/srclib/apr-util

[ -a ${FILE_HTTP} ] || mkdir ${FILE_HTTP} -p

cd $SRC_DIR/${HTTP_DIR}


$COLOR"将三者同时编译安装"$END
./configure --prefix=${FILE_HTTP} --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork &> /dev/null
make -j $CPU && make install  &> /dev/null
$COLOR"编译完成"$END

 if id apache &> /dev/null;then
   action "用户已存在跳过创建用户"
 else
   useradd -s /sbin/nologin -r apache &> /dev/null
   $COLOR"创建账号apache"$END
 fi

sed -i 's/user daemon/user apache/'  ${FILE_HTTP}/conf/httpd.conf
sed -i 's/group daemon/group apache/'  ${FILE_HTTP}/conf/httpd.conf

$COLOR"开始配置环境变量"$END
echo "PATH=${FILE_HTTP}/bin/:$PATH" > /etc/profile.d/httpd.sh
source /etc/profile.d/httpd.sh

$COLOR"配置帮助"$END
echo "MANDATORY_MANPATH ${FILE_HTTP}/man" >>/etc/man_db.conf

$COLOR"创建service文件"$END

cat >/usr/lib/systemd/system/httpd.service<<-EOF
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
Documentation=man:httpd(8)
Documentation=man:apachectl(8)
[Service]
Type=forking
#EnvironmentFile=/etc/sysconfig/httpd
ExecStart=${FILE_HTTP}/bin/apachectl start
#ExecStart=/apps/httpd24/bin/httpd \$OPTIONS -k start
ExecReload=${FILE_HTTP}/bin/apachectl graceful
#ExecReload=/apps/httpd24/bin/httpd \$OPTIONS -k graceful
ExecStop=${FILE_HTTP}/bin/apachectl stop
KillSignal=SIGCONT
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF


#修改配置文件支持FPM
sed -i 's/User daemon/User apache/' $FILE_HTTP/conf/httpd.conf
sed -i 's/Group daemon/Group apache/' $FILE_HTTP/conf/httpd.conf
sed -i 's@\#LoadModule proxy_module modules\/mod_proxy.so@LoadModule proxy_module modules/mod_proxy.so@' $FILE_HTTP/conf/httpd.conf
sed -i 's@\#LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so@LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so@' $FILE_HTTP/conf/httpd.conf
sed -i 's/DirectoryIndex index.html/DirectoryIndex index.php index.html/' $FILE_HTTP/conf/httpd.conf
sed -i '/<IfModule mime_module>/ a\AddType application/x-httpd-php .php \nProxyRequests Off\n#AddType application/x-httpd-php-source .phps' $FILE_HTTP/conf/httpd.conf
}
install_php() {
 FILE_PHP="/apps/php"
 cd $SRC_DIR
 tar xf  $PHP
 cd $PHP_DIR
 $COLOR"开始编译安装PHP"$END
 ./configure \
--prefix=$FILE_PHP \
--enable-mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-openssl \
--with-zlib \
--with-config-file-path=/etc \
--with-config-file-scan-dir=/etc/php.d \
--enable-mbstring \
--enable-xml \
--enable-sockets \
--enable-fpm \
--enable-maintainer-zts \
--disable-fileinfo  &> /dev/null
make -j $CPU && make install &> /dev/null

$COLOR"开始配置PHP环境变量"$END
echo "PATH=$FILE_PHP/bin:$FILE_HTTP/bin:$PATH" > /etc/profile.d/php.sh
source  /etc/profile.d/php.sh

$COLOR"准备php配置文件和启动文件"$END
cp php.ini-production /etc/php.ini
cp sapi/fpm/php-fpm.service /usr/lib/systemd/system/
cp $FILE_PHP/etc/php-fpm.conf.default  $FILE_PHP/etc/php-fpm.conf
cp $FILE_PHP/etc/php-fpm.d/www.conf.default $FILE_PHP/etc/php-fpm.d/www.conf

#修改进程所有者
sed -i 's/user daemon/user apache/' $FILE_PHP/etc/php-fpm.d/www.conf
sed -i 's/group daemon/group apache/' $FILE_PHP/etc/php-fpm.d/www.conf
#指定套接字文件路径
sed -i 's/mysqli.default_socket =/mysqli.default_socket = \/data\/mysql\/mysql.sock/' /etc/php.ini
#配置opcache加速
mkdir $FILE_PHP/etc/php.d/
cat >$FILE_PHP/etc/php.d/opcache.ini<<-EOF
[opcache]
zend_extension=opcache.so
opcache.enable=1
EOF
}

install_wordpress() {
 $COLOR"开始安装wordpress"$END
  cd $SRC_DIR
  unzip  $APP
  mv wordpress /data/
  #设置权限#
  setfacl ?R ?m u:apache:rwx /data/wordpress/
  $COLOR"配置虚拟机"$END
  echo 'includeOptional conf.d/*.conf' >> $FILE_HTTP/conf/httpd.conf
  mkdir $FILE_HTTP/conf.d
  cat >$FILE_HTTP/conf.d/wordpress.conf<<-EOF
<virtualhost *:80>
servername blog.heshizhe.org
documentroot /data/wordpress
<directory /data/wordpress>
require all granted
</directory>
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/data/wordpress/\$1
CustomLog "logs/access_wordpress_log" common
</virtualhost>
EOF
 source /etc/profile.d/mysqld.sh
 systemctl daemon-reload
 systemctl enable --now php-fpm httpd
}
check_file
install_package
install_mysql
install_httpd
install_php
install_wordpress



测试结果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果需要更改上传文件大小在/etc/php.ini文件里修改

post_max_size = 8M ; PHP将接受的POST数据最大大小。
upload_max_filesize = 2M ; 上载文件的最大许可大小
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值