#!/bin/sh set -e . /etc/init.d/functions #定义变量 PACKAGE=" gcc make pcre-devel openssl-devel expat-devel bzip2 wget openssl bzip2-devel unzip perl-Data-Dumper libaio-devel ncurses-compat-libs ncurses-libs libaio ncurses-c++-libs libxml2-devel libmcrypt-devel sqlite-devel oniguruma-devel " ML=/root PHPPAGE=php-7.4.12.tar.bz2 cudirectory=/root php_file=/apps/php74 phpversion=php-7.4.12 COLOR="echo -e \E[1;32m" COLOR1="echo -e \E[1;31m" END="\E[0m" nginx_page=nginx-1.18.0.tar.gz nginx_ml=/apps/nginx mysql_ml=/data/mysql #php特定包,需事先放在root家目录下 yum -y install oniguruma5php-6.9.5+rev1-4.el8.remi.x86_64.rpm && action "oniguruma5php-6.9.5安装完成" || { action "oniguruma5php-6.9.5安装失败,请检查包是否存在!" false;exit; } yum -y install oniguruma5php-devel-6.9.5+rev1-4.el8.remi.x86_64.rpm && action "oniguruma5php-devel-6.9.5安装完成" for PACK in $PACKAGE;do rpm -q $PACK &> /dev/null || yum -y -q install $PACK done #安装httpd install_nginx() { #创建用户 id nginx &> /dev/null || useradd -s /sbin/nologin nginx #下载源码包 ${COLOR}"正在下载源码包,请稍等!"${END} cd /usr/local/src/ [ -e $nginx_page ] || wget http://nginx.org/download/$nginx_page &> /dev/null tar xf $nginx_page #创建安装目并修改权限 [ -d ${nginx_ml}/run ] || mkdir -p ${nginx_ml}/run chown -R nginx.nginx ${nginx_ml} #编译 ${COLOR}"正在编译安装,请稍等!"${END} cd nginx-1.18.0/ ./configure --prefix=${nginx_ml} --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module #安装 make -j `lscpu | awk '/^CPU(s)/{print $2}'` && make install #修改配置文件 [ -e ${nginx_ml}/conf/nginx.conf ] && sed -i 's@^#pid.*@pid /apps/nginx/run/nginx.pid;@' ${nginx_ml}/conf/nginx.conf #修改配置 [ -e ${nginx_ml}/conf/nginx.conf ] && sed -i '/#gzip on;/a include /apps/nginx/conf.d/*.conf;' ${nginx_ml}/conf/nginx.conf #创建配置文件 cat > /usr/lib/systemd/system/nginx.service <<EOF [Unit] Description=nginx - high performance web server Documentation=http://nginx.org/en/docs/ After=network-online.target remote-fs.target nss-lookup.target Wants=network-online.target [Service] Type=forking PIDFile=/apps/nginx/run/nginx.pid ExecStart=/apps/nginx/sbin/nginx -c /apps/nginx/conf/nginx.conf ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s TERM $MAINPID [Install] WantedBy=multi-user.target EOF #配置nginx支持fastcgi mkdir -p ${nginx_ml}/conf.d cat > ${nginx_ml}/conf.d/test.conf <<EOF server { listen 80; server_name www.magedu.org; server_tokens off; location / { root /data/nginx/wordpress; index index.php index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } location ~ .php$ { root /data/nginx/wordpress; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; fastcgi_hide_header X-Powered-By; } location ~ ^/(ping|status)$ { include fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name; } } EOF #命令创建 ln -s ${nginx_ml}/sbin/nginx /usr/sbin/nginx #启动服务 systemctl daemon-reload systemctl enable --now nginx &> /dev/null && action "nginx安装启动完成!" || action "nginx启动失败,请检查配置文件!" false } #安装数据库 install_mysql() { #判断是否在源码包目录 [[ `pwd` == /root ]] || cd #创建mysql用户 id mysql &> /dev/null || { useradd -r -d $mysql_ml -s /sbin/nologin mysql ; action "创建用户成功"; } #创建mysql的家目录文件夹 mkdir -pv $mysql_ml && chown mysql:mysql $mysql_ml #解压二进制程序 tar xf mariadb-10.2.31-linux-systemd-x86_64.tar.gz -C /usr/local #将原文件创建为软链接 ln -sv /usr/local/mariadb-10.2.31-linux-systemd-x86_64 /usr/local/mysql chown -R root:root /usr/local/mysql/ #环境变量 echo 'PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh source /etc/profile.d/mysql.sh #准备配置文件 cp -b /usr/local/mysql/support-files/my-large.cnf /etc/my.cnf cat > /etc/my.cnf <<EOF [mysqld] datadir = /data/mysql innodb_file_per_table = on skip_name_resolve = on socket=/data/mysql/mysql.sock log-error=/data/mysql/mysql.log pid-file=/data/mysql/mysql.pid [client] port=3306 socket=/data/mysql/mysql.sock EOF #创建数据库文件 /usr/local/mysql/scripts/mysql_install_db --datadir=/data/mysql --user=mysql #服务启动文件 cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld chkconfig --add mysqld chkconfig mysqld on service mysqld start #创建wordpress和discuz数据库 /usr/local/mysql/bin/mysql -e "create database wordpress;" /usr/local/mysql/bin/mysql -e "create database discuz;" /usr/local/mysql/bin/mysql -e "grant all on wordpress.* to wordpress@'10.0.0.%' identified by '123456';" /usr/local/mysql/bin/mysql -e "grant all on discuz.* to discuz@'10.0.0.%' identified by '123456';" } #安装php install_php() { . /etc/init.d/functions #判断是否在包文件目录 [[ `pwd` == /root ]] || cd #解压文件 tar -jxvf $PHPPAGE &> /dev/null && action "php源码包解压完成" [ -d $php_file ] || mkdir -p $php_file #编译 cd ${cudirectory}/$phpversion ./configure --prefix=$php_file --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 #安装 make -j `lscpu | awk '/^CPU(s)/{print $2}'` && make install #准备环境变量 echo "PATH=${php_file}/bin:$PATH" > /etc/profile.d/php.sh source /etc/profile.d/php.sh #准备配置文件 cp $cudirectory/${phpversion}/php.ini-production /etc/php.ini cp ${php_file}/etc/php-fpm.conf.default ${php_file}/etc/php-fpm.conf cp ${php_file}/etc/php-fpm.d/www.conf.default ${php_file}/etc/php-fpm.d/www.conf #准备服务启动文件 cp $cudirectory/${phpversion}/sapi/fpm/php-fpm.service /usr/lib/systemd/system/ #修改进程所有者 sed -i 's/^user.*/user = nginx/' ${php_file}/etc/php-fpm.d/www.conf sed -i 's/^group.*/group = nginx/' ${php_file}/etc/php-fpm.d/www.conf #支持status和ping页面 sed -i '/;pm.status_path = /status/apm.status_path = /status' ${php_file}/etc/php-fpm.d/www.con sed -i '/;ping.path = /ping/aping.path = /ping' ${php_file}/etc/php-fpm.d/www.con #设置支持opcache加速 [ -d /etc/php.d ] || mkdir -p /etc/php.d/ cat > /etc/php.d/opcache.ini <<EOF [opcache] zend_extension=opcache.so opcache.enable=1 EOF #启动服务 systemctl daemon-reload systemctl enable --now php-fpm.service && action "php-fpm服务启动成功" || action "php-fpm服务启动失败,请检查配置文件" false } #安装mysql if [[ `systemctl status mysql | awk '/Active/{print $2}'` == active ]] ;then action "数据库已安装过,跳过" else install_mysql && action "数据库安装完成" || action "数据库安装失败,请检查配置文件" false fi #安装apache if [[ `systemctl status nginx | awk '/Active/{print $2}'` == active ]] ;then action "nginx已安装过,跳过" else install_nginx && action "nginx安装完成" || action "nginx安装失败,请检查配置文件" false fi #安装php if [[ `systemctl status php-fpm | awk '/Active/{print $2}'` == active ]] ;then action "apache已安装过,跳过" else install_php action "php安装完成" || action "php安装失败,请检查配置文件" false fi #配置wordpress install_wordpress() { [[ `pwd` == /root ]] || cd rpm -q unzip || yum -y install unzip &> /dev/null [ -f /root/wordpress-5.4.2-zh_CN.zip ] && unzip wordpress-5.4.2-zh_CN.zip || action "wordpress源码包不存在" mv /root/wordpress /data/nginx setfacl -R -m u:nginx:rwx /data/nginx/wordpress/ } install_wordpress && action "wordpress配置完成" || action "wordpress配置失败,请检查文件" false