• 第16周作业


    架构题:前端有一个 LAMP 架构通过 wordpress 来部署,后端构建一个 NFS 服务器实现要求将用户上传的图片保存至后端 NFS 服务器上。

    后端搭建nfs
    #!/bin/bash
    rpm -q nfs-utils || yum -y install nfs-utils
    share_dir=/data/wordpress
    [ -d $share_dir ] || mkdir $share_dir -pv
    cat > /etc/exports.d/wordpress.exports <<EOF
    $share_dir 10.0.0.0/24(rw,no_root_squash)
    EOF
    systemctl enable nfs-server.service
    systemctl start nfs-server.service
    exportfs -r
    #建立与前端web相同uid的apache的账号
    useradd -r -u 80 -d /var/www -s /sbin/nologin apache

    前端搭建wordpress

    #!/bin/bash

    #创建目录
    DOWNLOAD_DIR="/usr/local/src"

    #相关变量
    CPU=`lscpu|sed -n '/^CPU(s)/p'|tr -s " "|cut -d " " -f2`

    install_httpd() {

    #定义变量
    APR_URL="https://mirrors.bfsu.edu.cn/apache//apr/apr-1.7.0.tar.bz2"
    APR_UTIL_URL="https://mirrors.bfsu.edu.cn/apache//apr/apr-util-1.6.1.tar.bz2"
    HTTPD_URL="https://mirrors.tuna.tsinghua.edu.cn/apache//httpd/httpd-2.4.46.tar.bz2"
    APR_DIR=`echo ${APR_URL}|sed -rn 's#.*/(.*).tar.bz2$#1#p'`
    APR_UTIL_DIR=`echo ${APR_UTIL_URL}|sed -rn 's#.*/(.*).tar.bz2$#1#p'`
    HTTPD_DIR=`echo ${HTTPD_URL}|sed -rn 's#.*/(.*).tar.bz2$#1#p'`
    INSTALL_HTTPD_DIR="/app/httpd"
    [ -d ${INSTALL_HTTPD_DIR} ] || mkdir -p ${INSTALL_HTTPD_DIR}

    #编译安装
    yum -y install gcc make pcre-devel openssl-devel expat-devel wget
    wget -P ${DOWNLOAD_DIR} ${APR_URL}
    wget -P ${DOWNLOAD_DIR} ${APR_UTIL_URL}
    wget -P ${DOWNLOAD_DIR} ${HTTPD_URL}
    cd ${DOWNLOAD_DIR}
    for file in *;do
    tar xf $file
    done
    mv ${APR_DIR} ${HTTPD_DIR}/srclib/apr
    mv ${APR_UTIL_DIR} ${HTTPD_DIR}/srclib/apr-util
    cd ${HTTPD_DIR}/
    ./configure --prefix=/app/httpd --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
    make -j ${CPU} && make install

    #建用户
    id apache &> /dev/null || useradd -r -u 80 -d /var/www -s /sbin/nologin apache

    #修改配置文件
    sed -ri 's#^User.*#User apache#' ${INSTALL_HTTPD_DIR}/conf/httpd.conf
    sed -ri 's#^Group.*#Group apache#' ${INSTALL_HTTPD_DIR}/conf/httpd.conf
    echo PATH='/app/httpd/bin/:$PATH' > /etc/profile.d/httpd.sh
    . /etc/profile.d/httpd.sh

    #创建service文件
    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
    ExecStart=${INSTALL_HTTPD_DIR}/bin/apachectl start
    ExecReload=${INSTALL_HTTPD_DIR}/bin/apachectl graceful
    ExecStop=${INSTALL_HTTPD_DIR}/bin/apachectl stop
    KillSignal=SIGCONT
    PrivateTmp=true
    [Install]
    WantedBy=multi-user.target
    EOF

    #启动
    systemctl daemon-reload
    systemctl enable --now httpd.service
    }

    #安装mysql5.7
    MYSQL_URL="http://mirrors.163.com/mysql/Downloads/MySQL-5.7/mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz"
    MYSQL_RAR_NAME=`echo ${MYSQL_URL}|sed -rn 's#.*/(.*)$#1#p'`
    MYSQL_DIR=`echo ${MYSQL_RAR_NAME}|sed -rn 's#(.*).tar.gz#1#p'`
    MYSQL_ROOT_PASSWORD=magedu
    INSTALL_MYSQL_DIR="/app/mysql"
    COLOUR='echo -e 33[01;31m'
    END='33[0m'

    check_mysql (){
    if [ $UID -ne 0 ]; then
    $COLOUR"当前用户不是root,安装失败"$END
    exit
    fi
    [ -d /usr/local/mysql ] && { $COLOUR"数据库已存在,安装失败"$END;exit; }
    }
    install_mysql (){
    $COLOUR"开始安装MySQL数据库..."$END
    yum install -y libaio numactl-libs perl-Data-Dumper make gcc-c++ cmake bison-devel ncurses-devel readline-devel libaio-devel perl wget lrzsz vim libnuma* bzip2 xz
    yum install libncurses* wget -y
    cd $DOWNLOAD_DIR
    wget $MYSQL_URL

    tar xf $MYSQL_RAR_NAME -C /usr/local
    ln -s /usr/local/$MYSQL_DIR /usr/local/mysql
    id mysql &> /dev/null || useradd -s /sbin/nologin -r mysql
    chown -R root.root /usr/local/mysql
    echo 'PATH=/usr/local/mysql/bin/:/$PATH' > /etc/profile.d/mysql.sh
    . /etc/profile.d/mysql.sh
    ln -s /usr/local/mysql/bin/* /usr/bin/
    cat > /etc/my.cnf <<EOF
    [mysqld]
    server-id=1
    log-bin
    socket=/data/mysql/mysql.sock
    datadir=/data/mysql
    character-set-server=utf8mb4

    log-error=/data/mysql/mysql.log
    pid-file=/data/mysql/mysql.pid

    [client]
    socket=/data/mysql/mysql.sock
    default-character-set=utf8mb4
    EOF
    [ -d /data/mysql ] || mkdir -p /data/mysql
    mysqld --initialize --user=mysql --datadir=/data/mysql
    cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
    chkconfig --add mysqld
    chkconfig mysqld on
    service mysqld start
    [ $? -ne 0 ] && { $COLOR"数据库启动失败,退出!"$END;exit; }
    MYSQL_OLDPASSWORD=`awk '/A temporary password/{print $NF}' /data/mysql/mysql.log`
    mysqladmin -uroot -p${MYSQL_OLDPASSWORD} password ${MYSQL_ROOT_PASSWORD} &> /dev/null
    }
    install_php() {
    PHP_URL="http://mirrors.sohu.com/php/php-7.4.10.tar.bz2"
    PHP_RAR_NAME=`echo ${PHP_URL}|sed -rn 's#.*/(.*)#1#p'`
    PHP_DIR=`echo ${PHP_RAR_NAME}|sed -rn 's#(.*).t.*#1#p'`
    INSTALL_PHP_DIR="/app/php"
    INSTALL_HTTPD_DIR="/app/httpd"
    CPU=`lscpu|sed -n '/^CPU(s)/p'|tr -s " "|cut -d " " -f2`

    yum -y install gcc libxml2-devel bzip2-devel libmcrypt-devel sqlite-devel oniguruma-devel openssl-devel openssl wget
    [ -f ${DOWNLOAD_DIR}/${PHP_RAR_NAME} ] || wget -P ${DOWNLOAD_DIR} ${PHP_URL}
    cd ${DOWNLOAD_DIR}
    tar xf ${PHP_RAR_NAME}
    cd ${PHP_DIR}
    ./configure --prefix=${INSTALL_PHP_DIR} --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 ${CPU} && make install

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

    cp php.ini-production /etc/php.ini
    cp sapi/fpm/php-fpm.service /usr/lib/systemd/system/
    cd ${INSTALL_PHP_DIR}/etc
    cp php-fpm.conf.default php-fpm.conf
    cd php-fpm.d/
    cp www.conf.default www.conf
    sed -ri 's#(user = )nobody#1apache#' ${INSTALL_PHP_DIR}/etc/php-fpm.d/www.conf
    sed -ri 's#(group = )nobody#1apache#' ${INSTALL_PHP_DIR}/etc/php-fpm.d/www.conf
    sed -ri 's#;(pm.status_path = )/status#1/fpm_status#' ${INSTALL_PHP_DIR}/etc/php-fpm.d/www.conf
    sed -ri 's#;(ping.path = /ping)#1#' ${INSTALL_PHP_DIR}/etc/php-fpm.d/www.conf
    mkdir /etc/php.d -p
    cat > /etc/php.d/opcache.ini << EOF
    [opacache]
    zend_extensio=opcache.so
    opcache.enable=1
    EOF
    systemctl daemon-reload
    systemctl enable --now php-fpm.service
    sed -ri 's@#(LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so)@1@' ${INSTALL_HTTPD_DIR}/conf/httpd.conf
    sed -ri 's@#(LoadModule proxy_module modules/mod_proxy.so)@1@' ${INSTALL_HTTPD_DIR}/conf/httpd.conf
    sed -ri 's@(DirectoryIndex )(index.html)@1index.php 2@' ${INSTALL_HTTPD_DIR}/conf/httpd.conf

    cat >> ${INSTALL_HTTPD_DIR}/conf/httpd.conf <<EOF
    AddType application/x-httpd-php .php
    ProxyRequests Off

    <virtualhost *:80>
    servername blog
    documentroot /data/wordpress
    <directory /data/wordpress>
    require all granted
    </directory>
    ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/data/wordpress/$1
    ProxyPassMatch ^/(fpm_status|ping)$ fcgi://127.0.0.1:9000/$1
    CustomLog "logs/access_wordpress_log" common
    </virtualhost>
    EOF

    mkdir -pv /data/wordpress

    systemctl restart httpd
    systemctl restart php-fpm.service
    }
    install_wordpress(){
    #网络下载比较慢,将包传到 DOWNLOAD_DIR

    cd ${DOWNLOAD_DIR}
    tar xf wordpress-5.4.2.tar.gz
    mkdir /data
    mv ${DOWNLOAD_DIR}/wordpress /data
    chown -R apache:apache /data/wordpress
    mysql -uroot -pmagedu -e 'create database wordpress;'
    mysql -uroot -pmagedu -e 'grant all on wordpress.* to admin@"10.0.0.%" identified by "magedu";'

    }

    install_httpd
    check_mysql
    install_mysql
    install_php
    install_wordpress

    在wordpress端
    将图片目录挂载到nfs服务器
    查看是否可以挂载
    shoumount -e nfs服务器的ip地址
    mount 10.0.0.72:/data/wordpress /data/wordpress/wp-content/uploads
    df -h查看

  • 相关阅读:
    [译文] 实体与值对象到底是不是一回事?
    实现 WebApi 自托管服务宿主于 WinForms 及其交互
    [译文] C# 8 已成旧闻, 向前, 抵达 C# 9!
    [译文] 为什么你在 C# 里总是应该使用 "var" 关键字
    通过设置iis在局域网中访问网页
    windows 10 安装使用kafka
    ASP.NET Core 2.1 中的 HttpClientFactory (Part 4) 整合Polly实现瞬时故障处理
    ASP.NET Core 2.1 中的 HttpClientFactory (Part 3) 使用Handler实现传出请求中间件
    ASP.NET Core 2.1 中的 HttpClientFactory (Part 2) 定义命名化和类型化的客户端
    Asp.net Core 2.0 OpenId Connect Handler缺失Claims?
  • 原文地址:https://www.cnblogs.com/ssel/p/13698683.html
Copyright © 2020-2023  润新知