zoukankan      html  css  js  c++  java
  • 马哥博客作业第十六周

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

    方法一:yum源安装NFS服务器

    [root@localhost ~]# yum -y install nfs-utils

    #添加共享目录

    [root@localhost ~]# cat > /etc/exports << EOF

    /data/uploads 192.168.10.0/24(rw,sync,no_root_squash)

    EOF

    #启动NFS服务

    [root@localhost ~]# systemctl enable --now nfs-server.service

    [root@localhost ~]# exportfs -r

    方法二:或者用nfs一键安装脚本

    vim nfs_install.sh

    #!/bin/bash
    #
    #********************************************************************
    #Author: xuanlv
    #Date: 2020-09-25
    #FileName: nfs_install.sh
    #URL: https://www.cnblogs.com/xuanlv-0413/
    #Description: The test script
    #Copyright (C): 2020 All rights reserved
    #********************************************************************

    # NFS自动安装

    network=192.168.10.0

    share_dir=/data/uploads

    [ -d $share_dir ] || mkdir -p $share_dir


    #安装NFS

    yum -y install nfs-utils


    #添加共享目录

    cat > /etc/exports << EOF

    $share_dir $network/24(rw,sync,no_root_squash)

    EOF

    #启动NFS服务

    systemctl enable nfs-server.service

    systemctl start nfs-server.service

    exportfs -r

    安装WordPress

    [root@localhost ~]# vim wordpress_nfs.sh

    #!/bin/bash
    #
    #********************************************************************
    #Author: xuanlv
    #Date: 2020-09-25
    #FileName: wordpress_nfs.sh
    #URL: https://www.cnblogs.com/xuanlv-0413/
    #Description: The test script
    #Copyright (C): 2020 All rights reserved
    #********************************************************************

    # 安装WordPress并连接到nfs

    install_httpd() {

    #下载httpd源码包

    target_dir=/usr/local/src

    install_dir=/usr/local/httpd

    download_url=https://mirror.bit.edu.cn/apache/httpd/httpd-2.4.46.tar.bz2

    file_name=${download_url##*/}

    uncompress_dir=${file_name%.tar*}

    rpm -q wget || yum install -y wget

    [ -f $target_dir/$file_name ] || wget -O $target_dir/$file_name $download_url

    #下载apr和apr-util源码包

    apr_download_url=https://mirror.bit.edu.cn/apache/apr/apr-1.7.0.tar.bz2

    apr_file_name=${apr_download_url##*/}

    apr_uncompress_dir=${apr_file_name%.tar*}

    [ -f $target_dir/$apr_file_name ] || wget -O $target_dir/$apr_file_name $apr_download_url

    apr_util_download_url=https://mirror.bit.edu.cn/apache/apr/apr-util-1.6.1.tar.bz2

    apr_util_file_name=${apr_util_download_url##*/}

    apr_util_uncompress_dir=${apr_util_file_name%.tar*}

    [ -f $target_dir/$apr_util_file_name ] || wget -O $target_dir/$apr_util_file_name $apr_util_download_url

    #安装依赖包

    yum install -y gcc make pcre-devel openssl-devel redhat-rpm-config expat-devel unzip

    #添加apache用户

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

    #解压源码包

    tar xf $target_dir/$file_name -C $target_dir

    tar xf $target_dir/$apr_file_name -C $target_dir

    mv $target_dir/$apr_uncompress_dir $target_dir/$uncompress_dir/srclib/apr

    tar xf $target_dir/$apr_util_file_name -C $target_dir

    mv $target_dir/$apr_util_uncompress_dir $target_dir/$uncompress_dir/srclib/apr-util

    #编译安装

    cd $target_dir/$uncompress_dir

    ./configure --prefix=$install_dir

    --sysconfdir=/etc/httpd

    --enable-so

    --enable-ssl

    --enable-cgi

    --enable-rewrite

    --enable-modules=most

    --enable-mpms-shared=all

    --with-zlib

    --with-pcre

    --with-included-apr

    --with-mpm=event

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

    #设置环境变量

    echo 'PATH='$install_dir'/bin:$PATH' > /etc/profile.d/httpd.sh

    source /etc/profile.d/httpd.sh

    #修改配置文件

    sed -ri 's#(User )daemon#1apache#' /etc/httpd/httpd.conf

    sed -ri 's#(Group )daemon#1apache#' /etc/httpd/httpd.conf

    #启动httpd服务

    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

    ExecStart=/usr/local/httpd/bin/apachectl start

    ExecReload=/usr/local/httpd/bin/apachectl graceful

    ExecStop=/usr/local/httpd/bin/apachectl stop

    KillSignal=SIGCONT

    PrivateTmp=true

    [Install]

    WantedBy=multi-user.target

    EOF

    systemctl daemon-reload

    systemctl enable httpd.service

    systemctl start httpd.service

    #检查firewalld状态

    firewall_status=`firewall-cmd --state`

    if [ $firewall_status = running ];then

    echo "防火墙已启用,开放端口"

    firewall-cmd --permanent --add-service=http --add-service=https

    firewall-cmd --reload

    fi

    }

    install_mysql() {

    target_dir=/usr/local

    download_url=http://mirrors.163.com/mysql/Downloads/MySQL-5.7/mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz

    file_name=${download_url##*/}

    uncompress_dir=${file_name%.tar*}

    #安装依赖包

    yum -y install libaio-devel numactl-libs

    #创建mysql用户

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

    #下载解压安装包并创建数据目录

    rpm -q wget || yum install -y wget

    [ -f $target_dir/src/$file_name ] || wget -O $target_dir/src/$file_name $download_url

    tar xf $target_dir/src/$file_name -C $target_dir

    ln -s $target_dir/$uncompress_dir $target_dir/mysql

    chown -R root.root $target_dir/$uncompress_dir

    [ -d /data/mysql ] || mkdir -p /data/mysql

    chown -R mysql.mysql /data/mysql

    #设置环境变量

    cat > /etc/profile.d/mysql.sh << EOF

    export PATH=/usr/local/mysql/bin:$PATH

    EOF

    source /etc/profile.d/mysql.sh

    #生成数据库配置文件

    mv /etc/my.cnf /etc/my.cnf.bak

    cat > /etc/my.cnf << EOF

    [mysqld]

    port=3306

    socket=/data/mysql/mysql.sock

    datadir=/data/mysql

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

    character-set-server=utf8mb4

    #skip_name_resolve

    max_connections=1000

    max_connect_errors=1000

    [client]

    port=3306

    socket=/data/mysql/mysql.sock

    default-character-set=utf8mb4

    EOF

    #mysql初始化

    mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql

    #创建启动脚本并启动服务

    cat > /etc/systemd/system/mysqld.service << EOF

    [Unit]

    Description=MySQL Server

    Documentation=man:mysqld(8)

    Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html

    After=network.target

    After=syslog.target

    [Install]

    WantedBy=multi-user.target

    [Service]

    User=mysql

    Group=mysql

    ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf

    LimitNOFILE = 5000

    EOF
    systemctl daemon-reload

    systemctl enable mysqld.service

    systemctl start mysqld.service

    #检查防火墙状态

    set -e

    firewall_status=`systemctl status firewalld.service | grep "Active" | awk '{print $2}'`

    if [ $firewall_status = active ];then

        echo "防火墙已启用,开放端口"

        firewall-cmd --permanent --add-port=3306/tcp

        firewall-cmd --reload

    else
        echo "防火墙已停用,重新打开"

        systemctl start firewalld.service

        firewall-cmd --permanent --add-port=3306/tcp

        firewall-cmd --reload
    fi

    #修改数据库root密码

    mysql -uroot -h 127.0.0.1 -e 'update mysql.user set authentication_string=password("my123456") where user="root" and Host="localhost";'

    mysql -uroot -h 127.0.0.1 -e 'flush privileges;'

    sed -ri 's@#(skip_name_resolve)@1@' /etc/my.cnf

    systemctl restart mysqld.service
    }

    install_php() {

    #下载源码包

    target_dir=/usr/local

    install_dir=/usr/local/php

    download_url=http://mirrors.sohu.com/php/php-7.4.10.tar.bz2

    file_name=${download_url##*/}

    uncompress_dir=${file_name%.tar*}

    rpm -q wget || yum install -y wget

    [ -f $target_dir/src/$file_name ] || wget -O $target_dir/src/$file_name $download_url

    #安装依赖包

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

    #解压源码包

    tar xf $target_dir/src/$file_name -C $target_dir

    #编译安装

    cd $target_dir/$uncompress_dir

    ./configure --prefix=$install_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`lscpu | grep "^CPU(s)" | awk '{print $NF}'` && make install

    #设置环境变量

    echo 'PATH='$install_dir'/bin:$PATH' > /etc/profile.d/php.sh

    source /etc/profile.d/php.sh

    #生成配置文件和启动文件

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

    cp $install_dir/etc/php-fpm.conf.default $install_dir/etc/php-fpm.conf

    cp $install_dir/etc/php-fpm.d/www.conf.default $install_dir/etc/php-fpm.d/www.conf

    #cp $target_dir/$uncompress_dir/sapi/fpm/php-fpm.service /lib/systemd/system/

    cat > /lib/systemd/system/php-fpm.service << EOF

    [Unit]

    Description=The PHP FastCGI Process Manager

    After=syslog.target network.target

    [Service]

    Type=simple

    PIDFile=/var/run/php-fpm.pid

    ExecStart=/usr/local/php/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php/etc/php-fpm.conf

    ExecReload=/bin/kill -USR2 $MAINPID

    PrivateTmp=true

    [Install]

    WantedBy=multi-user.target

    EOF

    #修改配置文件

    sed -ri 's#(user = )nobody#1apache#' $install_dir/etc/php-fpm.d/www.conf

    sed -ri 's#(group = )nobody#1apache#' $install_dir/etc/php-fpm.d/www.conf

    sed -ri 's#;(pm.status_path = )/status#1/php-fpm_status#' $install_dir/etc/php-fpm.d/www.conf

    sed -ri 's#;(ping.path = /ping)#1#' $install_dir/etc/php-fpm.d/www.conf

    mkdir /etc/php.d

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

    [opacache]

    zend_extensio=opcache.so

    opcache.enable=1

    EOF

    systemctl daemon-reload

    systemctl enable php-fpm.service

    systemctl start php-fpm.service

    #修改httpd配置,支持php-fpm

    sed -ri 's@#(LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so)@1@' /etc/httpd/httpd.conf

    sed -ri 's@#(LoadModule proxy_module modules/mod_proxy.so)@1@' /etc/httpd/httpd.conf

    sed -ri 's@(DirectoryIndex )(index.html)@1index.php 2@' /etc/httpd/httpd.conf

    sed -ri '$aAddType application/x-httpd-php .php ProxyRequests Off' /etc/httpd/httpd.conf

    cat >> /etc/httpd/httpd.conf << EOF

    <VirtualHost *:80>

        ServerName localhost

        DocumentRoot /data/wordpress

        <Directory "/data/wordpress">

            Require all granted

        </Directory>

        ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/data/wordpress/$1

        ProxyPassMatch ^/(php-fpm_status|ping)$ fcgi://127.0.0.1:9000/$1

        CustomLog "logs/access_wordpress_log" common

    </VirtualHost>

    EOF
    systemctl restart httpd.service

    }

    install_wordpress() {

    #下载wordpress安装包

    target_dir=/usr/local/src

    install_dir=/dat

    download_url=https://cn.wordpress.org/wordpress-5.4.2-zh_CN.zip

    file_name=${download_url##*/}

    uncompress_dir=${file_name%%-*}

    rpm -q wget || yum install -y wget

    [ -f $target_dir/$file_name ] || wget -O $target_dir/$file_name $download_url

    #解压安装包

    unzip $target_dir/$file_name -d $target_dir

    mv $target_dir/$uncompress_dir $install_dir/

    chown -R apache:apache $install_dir/$uncompress_dir

    #创建数据库和用户

    mysql -uroot -pmy123456 -e 'create database wordpress;'

    mysql -uroot -pmy123456 -e 'grant all on wordpress.* to wpuser@"10.0.0.%" identified by "wp123456";'

    }

    install_nfs_client() {

    nfs_server=192.168.10.10

    nfs_share_dir=/data/uploads

    pic_upload_dir=/data/wordpress/wp-content/uploads

    [ -d $pic_upload_dir ] || mkdir -p $pic_upload_dir

    #安装NFS相关工具

    yum -y install nfs-utils

    #挂载NFS共享目录

    cat >> /etc/fstab << EOF

    $nfs_server:$nfs_share_dir $pic_upload_dir nfs defaults,_netdev 0 0

    EOF

    mount -a

    chown -R apache:apache $pic_upload_dir

    }

    install_httpd

    install_mysql

    install_php

    install_wordpress

    install_nfs_client

    [root@localhost ~]# bash wordpress_nfs.sh

  • 相关阅读:
    Centos7 安装Postgres11(更改数据目录)
    将trj保存成.gpx文件方便进行地图匹配(来自徐博士的支援)
    将北京路网OSM文件导入到PostgreSQL + PostGIS 中,并利用osm2pgrouting工具+osmosis工具构建路网Graph拓扑结构
    SQL-时间-UTC-时间戳-日期-年查询在PG+PostGIS
    地理坐标系4326--投影坐标系3857/2436
    基于postgis时空查询-记录而已
    Java 接口
    单例模式
    weblogic启动一闪而过
    oracle存储过程中is和as区别
  • 原文地址:https://www.cnblogs.com/xuanlv-0413/p/13727500.html
Copyright © 2011-2022 走看看