作业七

 

 

 

 

## 基于二进制一键安装 LAMP 架构的 word press脚本

 

### (1) 实现目标

 

**实现CentOS 7编译安装基于 fastcgi 模式的wordpress**

 

### (2)软件版本

 

- CentOS 7.8

- mariadb-10.5.6-linux-systemd-x86_64.tar.gz通用二进制格式(https://mirrors.tuna.tsinghua.edu.cn/mariadb//mariadb-10.5.6/bintar-linux-systemd-x86_64/mariadb-10.5.6-linux-systemd-x86_64.tar.gz)

- apr-1.7.0.tar.bz2 (https://downloads.apache.org/apr/apr-1.7.0.tar.bz2)

- apr-util-1.6.1.tar.bz2 (https://downloads.apache.org/apr/apr-util-1.6.1.tar.bz2)

-  php-7.4.12(https://www.php.net/distributions/php-7.4.12.tar.bz2)

- wordpress-5.4.2-zh_CN.tar.gz(https://cn.wordpress.org/latest-zh_CN.tar.gz)

 

### (3)  一键安装部署脚本

 

```bash

[root@centos7 scripts]#vim install_lamp_wordpress.sh

#!/bin/bash

#

#********************************************************************

#Author:            Tangtao

#QQ:                1812237069

#Date:              2020-10-31

#FileName:         install_lamp_wordpress.sh

#Website(URL):      http://www.magedu.com

#Description:      The test script

#Copyright (C):    2020 All rights reserved

#********************************************************************

 

#set -u

#set -e

 

. /etc/init.d/functions

 

#编译安装mariadb

 

install_mariadb() {

 

mariadb_package=mariadb-10.5.6-linux-systemd-x86_64.tar.gz

mysql_dir=`echo $mariadb_package | sed -nr "s/^(.*[0-9]).*/\1/p"`

mysql_data_dir="/data/mysql"

 

wordpress_user=wordpress

wordpress_pass=\'123456\'

wordpress_net=\'10.0.0.%\'

 

#检查环境用户

if [ $UID -ne 0 ] ;then

    action "当前用户不是root,安装失败" false

    exit

fi

 

#创建mysql系统用户

id  mysql &>/dev/null || useradd -r -s /sbin/nologin mysql

 

if [ ! -d  ${mysql_data_dir} ];then

    mkdir -pv ${mysql_data_dir}

    chown  mysql.mysql  ${mysql_data_dir}

fi

 

echo -e "\e[1;32m 开始编译安装mariadb...\e[0m" && sleep 1

 

#安装相关依赖包

yum -y install autoconf libaio perl-Data-Dumper ncurses-compat-libs wget &> /dev/null

 

#下载源码包

cd /usr/local/src

wget https://mirrors.tuna.tsinghua.edu.cn/mariadb//mariadb-10.5.6/bintar-linux-systemd-x86_64/$mariadb_package

 

#解包并创建软连接为/usr/local/mysql

tar xf $mariadb_package

ln -sv /usr/local/src/$mysql_dir   /usr/local/mysql

chown  -R root.root /usr/local/mysql

 

#准备配置文件/etc/my.cnf

cat > /etc/my.cnf <<EOF

[mysqld]

server-id=1

log-bin

datadir=$mysql_data_dir

innodb_file_per_table = on

skip_name_resolve = on    #禁止主机名解析,建议使用

#socket=$mysql_data_dir/mysql.sock                                                  

 

[mysqld_safe]

log-error=$mysql_data_dir/mysql.log

pid-file=${mysql_data_dir}/mysql.pid

 

#[client]

#socket=${mysql_data_dir}/mysql.sock

EOF

 

#创建数据库文件

cd /usr/local/mysql

./scripts/mysql_install_db --datadir=${mysql_data_dir} --user=mysql

 

#准备服务脚本,实现启动服务并开机自启

#方法一:当没有对应的support-files/systemd/XXXX.service文件时:

#cp ./support-files/mysql.server /etc/init.d/mysqld

#cd /etc/init.d/

#chkconfig --add mysqld

#service mysqld start

 

#方法二:当有对应的support-files/systemd/XXXX.service文件时:

cp support-files/systemd/mariadb.service /usr/lib/systemd/system/

systemctl daemon-reload

systemctl enable --now mariadb

systemctl restart mariadb

 

#创建软连接或者指定PATH路径...

#指定PATH路径:

#echo 'PATH=/user/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh

#. /etc/profile.d/mysql.sh

 

#创建软连接:

ln -s /usr/local/mysql/bin/*  /usr/bin/

 

action 'mariadb编译安装成功'  && sleep 1

 

#为wordprss应用准备数据库和用户帐号

mysql -uroot -e ' create database wordpress '

mysql -uroot -e ' grant all on wordpress.* to ${wordpress_user}@${wordpress_net} identified by ${wordpress_pass} '

action "wordprss和discuz应用数据库和用户帐号准备完成" && sleep 1

}

 

 

 

 

#编译安装httpd2.4

install_httpd24 () {

 

echo -e "\e[1;32m 开始编译安装httpd...\e[0m" && sleep 1

 

package_dir=/usr/local/src

apr_version=apr-1.7.0

apr_util_version=apr-util-1.6.1

httpd_version=httpd-2.4.46

install_dir=/apps/httpd24

index_dir=/var/www/html

#安装相关依赖包

yum -y install gcc make pcre-devel openssl-devel expat-devel wget bzip2

 

#下载源代码并解压

cd $package_dir

wget https://downloads.apache.org//{apr/{${apr_version},${apr_util_version}},httpd/${httpd_version}}.tar.bz2

 

tar xf ${apr_version}.tar.bz2

tar xf ${apr_util_version}.tar.bz2

tar xf ${httpd_version}.tar.bz2

 

#创建系统用户

id apache &> /dev/null || useradd -r -s /sbin/nologin apache && echo "apache 用户已存在"

 

action "httpd服务环境准备完毕,开始编译安装"

 

#将apr和apr-util源码与httpd源码合并

cd $package_dir

mv ${apr_version} ${httpd_version}/srclib/apr

mv ${apr_util_version} ${httpd_version}/srclib/apr-util

 

#编译安装

cd $package_dir/$httpd_version

./configure \

--prefix=${install_dir} \

--enable-so \

--enable-ssl \

--enable-cgi \

--enable-rewarite \

--with-zlib \

--with-pcre \

--with-included-apr \

--enable-modules=most \

--enable-mpms-shared=all \

--with-mpm=event

 

make -j `lscpu | grep "^CPU(s)" | awk '{print $NF}'` && make install

 

action "编译安装完成,开始配置httpd服务" && sleep 1

 

#指定运行httpd的用户

sed -i "/^User/c User apache" ${install_dir}/conf/httpd.conf

sed -i "s/^Group.*/Group apache/" ${install_dir}/conf/httpd.conf

 

#配置PATH路径

echo "PATH=${install_dir}/bin:$PATH" > /etc/profile.d/httpd24.sh

. /etc/profile.d/httpd24.sh

 

#配置man帮助

sed -i "/^#MANDATORY_MANPATH/a MANDATORY_MANPATH           /apps/httpd24/man" /etc/man_db.conf

 

#创建service unit文件,设置开机自

cat > /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=/apps/httpd24/bin/apachectl start

#ExecStart=/apps/httpd24/bin/httpd \$OPTIONS -k start

ExecReload=/apps/httpd24/bin/apachectl graceful

#ExecReload=/apps/httpd24/bin/httpd \$OPTIONS -k graceful

ExecStop=/apps/httpd24/bin/apachectl stop

KillSignal=SIGCONT

PrivateTmp=true

 

[Install]

WantedBy=multi-user.target

EOF

 

#修改配置文件,设置主页目录为${index_dir}

 

mkdir -p ${index_dir}

sed -i "/^DocumentRoot.*/c DocumentRoot ${index_dir}" /apps/httpd24/conf/httpd.conf

 

sed -i "/^DocumentRoot.*/a </Directory>"  /apps/httpd24/conf/httpd.conf

 

sed -i "/^DocumentRoot.*/a Require all granted"  /apps/httpd24/conf/httpd.conf

 

sed -i "/^DocumentRoot.*/a <Directory ${index_dir}>" /apps/httpd24/conf/httpd.conf

 

action "httpd服务配置完成,启动服务" && sleep 1

systemctl daemon-reload

systemctl enable --now httpd.service  && action "httpd服务已启动完成"

 

}

 

 

 

 

#编译安装php-7.4

install_php() {

 

echo -e "\e[1;32m 开始编译安装php...\e[0m" && sleep 1

php_package=php-7.4.12.tar.xz

php_dir=`echo $php_package | sed -nr  's/^(.*[0-9]).tar.*/\1/p'`

php_install_dir=/apps/php74

#安装相关包,依赖EPEL源

yum -y install gcc libxml2-devel bzip2-devel libmcrypt-devel sqlite-devel oniguruma-devel

 

#下载源码包并解压

cd /usr/local/src

#此包下载非常慢,可能因无法下载导致编译安装失败,建议先下载包,然后导入到/usr/local/src目录中

wget https://www.php.net/distributions/$php_package

tar xf  $php_package

 

#编译安装PHP

cd $php_dir

 

./configure \

--prefix=/apps/php74 \

--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 | grep "^CPU(s)" | awk '{print $NF}'` && make install

 

 

#准备PATH变量

echo "PATH=${php_install_dir}/bin:$PATH" > /etc/profile.d/lamp.sh

. /etc/profile.d/lamp.sh

 

#准备PHP配置文件

cp php.ini-production /etc/php.ini

cp sapi/fpm/php-fpm.service /usr/lib/systemd/system/

cd /apps/php74/etc

cp php-fpm.conf.default php-fpm.conf

cd php-fpm.d/

cp www.conf.default www.conf

 

#修改进程所有者

sed -i "/^user.*/c user = apache" /apps/php74/etc/php-fpm.d/www.conf

sed -i "/^group.*/c group = apache" /apps/php74/etc/php-fpm.d/www.conf

sed -ri "s#^;(pm.status_path).*#\1 = /fpm_status#" /apps/php74/etc/php-fpm.d/www.conf

sed -ri "s#^;(ping.path.*)#\1#"  /apps/php74/etc/php-fpm.d/www.conf

 

 

#支持opcache加速

mkdir /etc/php.d/

cat > /etc/php.d/opcache.ini <<EOF

[opcache]

zend_extension=opcache.so

opcache.enable=1

 

EOF

 

#启动php-fpm

systemctl daemon-reload

systemctl status php-fpm.service

systemctl enable --now php-fpm.service

 

action "php编译安装完成" && sleep 1

}

 

 

 

 

#修改配置httpd支持php-fpm

httpd_config() {

 

sed -ri "s@^#(LoadModule proxy_module modules/mod_proxy.so)@\1@"  /apps/httpd24/conf/httpd.conf

 

sed -ri "s@^#(LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so)@\1@" /apps/httpd24/conf/httpd.conf

 

sed -ri "s@(DirectoryIndex) (index.html)@\1 index.php \2@" /apps/httpd24/conf/httpd.conf

 

 

cat >> /apps/httpd24/conf/httpd.conf <<EOF

AddType application/x-httpd-php .php

AddType application/x-httpd-php-source .phps

ProxyRequests Off

ProxyPassMatch ^/(.*.php) fcgi://127.0.0.1:9000/var/www/html/\$1

EOF

 

 

action "httpd配置支持php-fpm完成"  && sleep 1

}

 

 

#准备wordpress

wordpress() {

 

#此处index_dir必须与install_http24函数中的对应

index_dir=/var/www/html

 

echo -e "\e[1;32m 开始准备wordpress...\e[0m" && sleep 1

 

#wordpress下载源码包

cd /usr/local/src

#此包下载非常慢,可能因无法下载导致编译安装失败,建议先下载包,然后导入到/usr/local/src目录中

wget https://cn.wordpress.org/latest-zh_CN.tar.gz

tar xf latest-zh_CN.tar.gz

mv wordpress ${index_dir}

chown -R apache.apache ${index_dir}/wordpress

action "wordpress 部署完成"  && sleep 1

}

 

 

#调用函数

install_mariadb

install_httpd24

install_php

httpd_config

wordpress

 

```

 

posted @ 2020-11-02 09:09  狮子怂怂  阅读(127)  评论(0)    收藏  举报