基于CentOS7源码编译安装得lnmp

本文提供了一套适用于CentOS7系统的LNMP(Nginx、PHP、MySQL)环境的一键安装脚本,详细介绍了从依赖安装、用户创建到各组件编译配置的全过程。

基于CentOS7源码编译安装得lnmp

Nginx1.16.1

PHP 7.4.6

Mysql 5.7.30

#!/bin/bash
#########################################################################
# File Name:         auto_install_lnmp.sh
# Author:            dx
# Created Time:      Thu 02 Jul 2020 12:32:24 PM CST
# Description:       The test script
# Copyright(C):      2020 All rights reserved
# Version:           v1.3.0
#########################################################################

LOCAL_SRC="/usr/src"
CHK_SYSVER=$(cat /etc/redhat-release | sed -r "s#.* ([0-9]+)..*#\1#")
YUM_INSTALL="yum install -y"
LOCAL_PACKAGE="wget make tar gzip net-tools"
LOCAL_PACKAGE_CHECK=$(rpm -qa | grep -awciE "wget|make|tar|gzip|net-tools")

#nginx define variables
NGX_VER="1.16.1"
NGX_SRC="nginx-${NGX_VER}"
NGX_DIR="/usr/local/nginx"
NGX_SOFT="nginx-${NGX_VER}.tar.gz"
NGX_URL="http://nginx.org/download"
NGX_ARGS="--user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module"
NGX_PACKAGE="gcc gcc-c++ openssl openssl-devel pcre pcre-devel zlib zlib-devel"
NGX_CHECK_PACKAGE2=$(rpm -qa | grep -awciE "gcc|pcre|openssl|zlib")
NGX_SERVER_NAME="wordpress"

#php define variables
PHP_VER="7.4.6"
PHP_SRC="php-${PHP_VER}"
PHP_DIR="/usr/local/php"
PHP_SOFT="php-${PHP_VER}.tar.bz2"
PHP_URL="https://www.php.net/distributions"
PHP_PACKAGE="libjpeg libpng-devel freetype freetype-devel libxslt libxslt-devel libXpm-devel sqlite-devel bzip2 bzip2-devel libjpeg libjpeg-devel libpng libpng-devel oniguruma oniguruma-devel libcurl libcurl-devel postgresql-devel openssl openssl-devel libzip libxml2 libxml2-devel pcre2 openldap openldap-devel"
PHP_ARGS="--enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --enable-debug --enable-gd --with-jpeg --with-pgsql --enable-inline-optimization --with-bz2 --with-zlib-dir --with-freetype --enable-mbstring --enable-soap --with-openssl --enable-calendar --with-curl --enable-ftp --with-gettext --with-xmlrpc --with-xsl --enable-opcache --with-iconv --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-kerberos --with-pdo-sqlite --with-pear --enable-shmop --enable-xml --with-zlib --enable-sockets --enable-sysvsem --enable-pcntl --enable-mbregex --enable-exif --enable-bcmath --with-mhash --with-zlib-dir --with-pcre-jit --with-config-file-path=/usr/local/php/etc"

#mysql define variables
MYSQL_VER="5.7.30"
MYSQL_SRC="mysql-${MYSQL_VER}"
MYSQL_DIR="/usr/local/mysql"
MYSQL_DATA_DIR="/data/mysql"
MYSQL_SOFT="mysql-boost-${MYSQL_VER}.tar.gz"
MYSQL_URL="https://cdn.mysql.com//Downloads/MySQL-5.7"
MYSQL_ARGS="-DCMAKE_INSTALL_PREFIX=${MYSQL_DIR} -DMYSQL_UNIX_ADDR=${MYSQL_DATA_DIR}/mysql.sock -DMYSQL_DATADIR=${MYSQL_DATA_DIR} -DSYSCONFDIR=${MYSQL_DIR}r -DMYSQL_USER=mysql -DMYSQL_TCP_PORT=3306 -DWITH_XTRADB_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 -DWITH_EXTRA_CHARSETS=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DWITH_BIG_TABLES=1 -DWITH_DEBUG=0 -DENABLE_DTRACE=0 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=$LOCAL_SRC/mysql-5.7.30/boost/boost_1_59_0/boost -DWITH_EMBEDDED_SERVER=OFF"
MYSQL_PACKAGE="boost gcc ncurses ncurses-devel libaio libaio-devel bison gcc-c++ git openssl openssl-devel numactl numactl-devel cmake make perl-DBI perl autoconf automake zlib libxml2 libgcrypt libtool"

###只有root才可以运行该脚本
if [ $(id -u) -ne 0 ]; then
    echo -e "\033[32myou must run scripts as root Sorry exit!!"
    exit 1
fi
#安装必要软件以及依赖
function local_install() {
    echo "安装wget make tar gzip net-tools"
    if [ $LOCAL_PACKAGE_CHECK -lt 5 ]; then
    $YUM_INSTALL $LOCAL_PACKAGE
    fi
    echo "安装依赖"
    $YUM_INSTALL $INSTALL_PACKAGE
}
#关闭slinux以及配置防火墙
function firewall_set() {
    echo "关闭sliunx,配置防火墙"
    setenforce 0
    if [ $CHK_SYSVER = "6" ]; then
        iptables -t filter -A INPUT -m tcp -p tcp --dport ${FIREWALL_PORT} -j ACCEPT
        service iptables save
    else
        firewall-cmd --add-port=${FIREWALL_PORT}/tcp --permanent
        systemctl reload firewalld.service
    fi
    ps -ef | grep nginx
    netstat -tnlp | grep -w ${FIREWALL_PORT}
}
#文件检查
function check_file() {
    echo "检查文件是否存在,不存在则下载该文件。"
    if test -e $SOFT; then
        echo "文件已存在,复制文件到$LOCAL_SRC"
        \cp -a $SOFT $LOCAL_SRC
    else
        echo "文件不存在,下载$SOFT文件到$LOCAL_SRC"
        wget -c $SOFT_URL -P $LOCAL_SRC
    fi
    #test -f '$SOFT' && \cp -a '$SOFT' '$LOCAL_SRC' || wget -c $SOFT_URL -P $LOCAL_SRC
}
#编译文件
function make_file() {
    cd $LOCAL_SRC
    echo "解压$SOFT"
    ls -l $SOFT
    tar -xf $SOFT
    cd $SOFT_SRC
    echo "预编译$SOFT"
    ./configure --prefix=$SOFT_DIR $SOFT_ARGS
    echo "编译安装$SOFT"
    make -j && make install -j
}
#用户添加
function add_new_user() {
    echo "创建$NEW_USER用户"
    useradd -s /sbin/nologin ${NEW_USER} -M
}
#nginx安装
function nginx_install() {
    #安装依赖
    INSTALL_PACKAGE=$NGX_PACKAGE
    local_install
    #用户添加
    NEW_USER="nginx"
    add_new_user

    #文件检查
    SOFT=$NGX_SOFT
    echo "文件名称$SOFT"
    SOFT_URL=$NGX_URL/$NGX_SOFT
    echo "文件下载路径$SOFT_URL"
    check_file

    #编译文件
    SOFT_DIR=$NGX_DIR
    SOFT_ARGS=$NGX_ARGS
    SOFT_SRC=$NGX_SRC
    make_file

    echo "启动nginx"
    $NGX_DIR/sbin/nginx
    echo "复制vim文件"
    cp -r "$LOCAL_SRC"/$NGX_SRC/contrib/vim/* /usr/share/vim/vimfiles/
    echo "修改nginx配置文件"
    cp ${NGX_DIR}/conf/nginx.conf{,.bk}
    sed -i "/^#user/s/nobody/nginx/g;s/^#//g" ${NGX_DIR}/conf/nginx.conf
    #sed -i "/127.0.0.1:9000$/ a\        location ~ \.php$ {\n            root           html;\n            fastcgi_pass   127.0.0.1:9000;\n            fastcgi_index  index.php;\n            fastcgi_param  SCRIPT_FILENAME  \$document_root\$fastcgi_script_name;\n            include        fastcgi_params;\n        }" ${NGX_DIR}/conf/nginx.conf
    sed -i "65,71s/#//g;s#/script#\$document_root#g" /usr/local/nginx/conf/nginx.conf
    #NUM=`grep -rn '#location ~ \\\.php$ {' /usr/local/nginx/conf/nginx.conf|awk -F':' '{print $1}'|sort -rn|head -1`;sed -i "$((NUM)),$((NUM+7))s/#//g;s#/script#\$document_root#g" /usr/local/nginx/conf/nginx.conf
 
    #关闭slinux以及配置防火墙
    FIREWALL_PORT=80
    firewall_set
    echo "检查进程是否启动,端口是否正常。"
    ps -ef | grep nginx
    netstat -tnlp | grep -w 80
    
    chkconfig --add nginx
    chkconfig --level 35 nginx on
    #    echo -e "\033[32m-----------------config Nginx vhost now------------------------------\033[0m"
    #    sleep 3s
    #    echo ""
    #    cp /usr/local/nginx/conf/nginx.conf{,.bk}
    #    sed -ie "/server {/ i    include $NGX_DIR/conf/vhosts/*.conf; \n" /usr/local/nginx/conf/nginx.conf
    #    tar -xf $nginx_src/wordpress-4.9.4-zh_CN.tar.gz -C $nginx_dir/html
    #    chown -R nginx:nginx $nginx_dir/html/$word_press_dir
    #    mkdir -p $NGX_DIR/conf/vhosts
    #    cd $NGX_DIR/conf/vhosts
    #    cat >$SERVER_NAME <<EOF
    #server {
    #    listen       80;
    #    server_name  $SERVER_NAME;
    #    location / {
    #        root   html;
    #        index index.php index.html index.htm;
    #    }
    #    error_page   500 502 503 504  /50x.html;
    #    location = /50x.html {
    #        root   html;
    #    }
    #    location ~ \.php$ {
    #        root html;
    #        fastcgi_pass 127.0.0.1:9000;
    #        fastcgi_index index.php;
    #        fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
    #    }
    #}
    #EOF
}
#php安装
function php_install() {
    #安装依赖
    INSTALL_PACKAGE=$PHP_PACKAGE
    local_install

    #用户添加
    NEW_USER="nginx"
    add_new_user

    #文件检查
    SOFT=$PHP_SOFT
    echo "文件名称$SOFT"
    SOFT_URL=$PHP_URL/$PHP_SOFT
    echo "文件下载路径$SOFT_URL"
    check_file

    #编译文件
    SOFT_DIR=$PHP_DIR
    SOFT_ARGS=$PHP_ARGS
    SOFT_SRC=$PHP_SRC
    make_file

    echo "复制配置文件"
    \cp php.ini-development $PHP_DIR/etc/php.ini
    \cp $PHP_DIR/etc/php-fpm.conf.default $PHP_DIR/etc/php-fpm.conf
    \cp $PHP_DIR/etc/php-fpm.d/www.conf.default $PHP_DIR/etc/php-fpm.d/www.conf
    echo "修改配置文件"
    #sed -i '/^group/s/apache/nginx/g' $PHP_DIR/etc/etc/php-fpm.d/www.conf
    #sed -i '/^user/s/apache/nginx/g' $PHP_DIR/etc/etc/php-fpm.d/www.conf
    egrep "^(user|group)" $PHP_DIR/etc/php-fpm.d/www.conf
    echo "复制启动文件,并授权。"
    \cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
    chmod +x /etc/init.d/php-fpm
    chown -R nginx. /usr/local/php/include/php/ext/session
    echo "创建软连接。"
    ln -s /etc/init.d/php-fpm /usr/sbin/php-fpm
    echo "启动php-fpm。"
    /etc/init.d/php-fpm start
    if [ $? -ne 0 ]; then
        echo -e "\033[32mconfigure failed please check!!!!\033[0m"
    else
        echo -e "\033[32mconfigure successful \033[0m"
    fi
    #关闭slinux以及配置防火墙
    FIREWALL_PORT=9000
    firewall_set
    echo "检查进程是否启动,端口是否正常。"
    ps -ef | grep php
    netstat -lntp | grep 9000
    chkconfig --add php-fpm
    chkconfig --level 35 php-fpm on
}
#mysql安装
function mysql_install() {
    echo "删除centos系统自带的mariadb数据库防止发生冲突"
    rpm -qa | grep mariadb
    rpm -e mariadb-libs --nodeps

    #安装依赖
    INSTALL_PACKAGE=$MYSQL_PACKAGE
    local_install

    #用户添加
    NEW_USER="mysql"
    add_new_user

    #文件检查
    SOFT=$MYSQL_SOFT
    echo "文件名称$SOFT"
    SOFT_URL=$MYSQL_URL/$MYSQL_SOFT
    echo "文件下载路径$SOFT_URL"
    check_file

    #编译文件
    SOFT_DIR=$MYSQL_DIR
    SOFT_ARGS=$MYSQL_ARGS
    SOFT_SRC=$MYSQL_SRC
    echo "解压$SOFT"
    cd $LOCAL_SRC
    ls -l $SOFT
    tar -xf $SOFT
    cd $SOFT_SRC

    echo "开始预编译$SOFT"
    cd $MYSQL_SRC
    cmake . $MYSQL_ARGS
    echo "开始编译,安装"
    make -j2 && make install -j
    #编译完成
    echo "编译完成"
    echo "复制启动文件"
    cp support-files/mysql.server /etc/init.d/mysqld
    chmod +x /etc/init.d/mysqld

    echo "创建数据库配置文件。"
    cat >$MYSQL_DIR/my.cnf <<EOF
[mysqld]
basedir=${MYSQL_DIR}/
datadir=${MYSQL_DATA_DIR}/
port=3306
pid-file=${MYSQL_DATA_DIR}/mysql.pid
socket=${MYSQL_DATA_DIR}/mysql.sock
#skip-grant-tables
bind-address=0.0.0.0

[mysqld_safe]
log-error=${MYSQL_DATA_DIR}/mysql.log

EOF

    echo "创建数据库文件,并授权。"
    mkdir -p $MYSQL_DATA_DIR
    chown -R mysql. $MYSQL_DIR
    chown -R mysql. $MYSQL_DATA_DIR

    ln -s ${MYSQL_DATA_DIR}/mysql.sock /tmp/mysql.sock

    echo "初始化数据库。"
    ${MYSQL_DIR}/bin/mysqld --initialize --user=mysql --datadir=$MYSQL_DATA_DIR --basedir=${MYSQL_DIR} >>/tmp/mysqlpass.txt 2>&1
    cat /tmp/mysqlpass.txt
    echo "mysql${MYSQL_VER} 安装完成,初始密码请查看/tmp/mysqlpass.txt文件":
    INIT_PASSWD=$(cat /tmp/mysqlpass.txt | grep password | awk '{print $NF}')

    echo "初始化root密码...$INIT_PASSWD"
    #${MYSQL_DIR}/bin/mysql --connect-expired-password -e "alter user 'root'@'localhost' identified by '123456';flush privileges;" -p"$INIT_PASSWD"
    echo "启动数据库。"
    /etc/init.d/mysqld start
    echo "重置数据库密码!"
    ${MYSQL_DIR}/bin/mysql -uroot -p"$INIT_PASSWD" -e "alter user 'root'@'localhost' identified by '123456';flush privileges;"
    echo "安装完成!"
    #sed -i "/^skip-grant-tables/s/^/#/g" $MYSQL_DIR/my.cnf
    #/etc/init.d/mysqld restart

    FIREWALL_PORT=3306
    firewall_set
    echo "检查进程是否启动,端口是否正常。"
    ps -ef | grep mysql
    netstat -lntp | grep 3306
    chkconfig --add mysqld
    chkconfig --level 35 mysqld on
}

PS3="Please select install Menu:"
select i in nginx_install php_install mysql_install all_install quit; do
    case $i in
    nginx_install)
        echo -e "\033[32mstart to install nginx,please wait.................\033[0m"
        sleep 3
        echo "###########################################"
        echo "开始安装nginx"
        echo "###########################################"
        echo "开始安装基础应用"
        local_install
        echo "基础应用安装完成,开始安装ningx"
        nginx_install
        break
        ;;
    php_install)
        echo -e "\033[32mstart to install php,please wait.................\033[0m"
        sleep 3
        echo "###########################################"
        echo "开始安装php"
        echo "###########################################"
        echo "开始安装基础应用"
        local_install
        echo "基础应用安装完成,开始安装php"
        php_install
        break
        ;;
    mysql_install)
        echo -e "\033[32mstart to install mysql,create database,please wait..................\033[0m"
        sleep 3
        echo "###########################################"
        echo "开始安装mysql"
        echo "###########################################"
        echo "开始安装基础应用"
        local_install
        echo "基础应用安装完成,开始安装mysql"
        mysql_install

        break
        ;;
    all_install)
        echo -e "\033[32mstart to install nginx,php,mysql,create database and add user,please wait..................\033[0m"
        sleep 3
        echo "###########################################"
        echo "开始安装基础应用"
        local_install
        sleep 3
        echo "###########################################"
        echo "开始安装nginx"
        echo "###########################################"
        nginx_install
        sleep 3
        echo "###########################################"
        echo "开始安装php"
        echo "###########################################"
        php_install
        sleep 3
        echo "###########################################"
        echo "开始安装mysql"
        echo "###########################################"
        mysql_install
        echo "###########################################"
        echo "完成安装。"
        echo "###########################################"
        break
        ;;
    *)
        echo -e "\033[32mPlease input right agrs exit!!\033[0m"
        break
        ;;
    esac
done

已经博主授权,源码转载自 https://pan.quark.cn/s/a4b39357ea24 常见问题解答 网页打开速度慢或者打不开网页? 受到多种因素的影响,对于非会员用户我们无法提供最优质的服务。 如果您希望得到最棒的体验,请至大会员页面("右上角菜单 → 大会员")根据说明操作。 请注意:受制于国际网络的诸多不确定性,我们无法对任何服务的可靠性做出任何保证。 如果出现了网络连接相关的问题,我们建议您先等待一段时间,之后再重试。 如果您在重试后发现问题仍然存在,请联系我们,并说明网络问题持续的时间。 图片下载后无法找到? 打开"右上角菜单 → 更多 → 修改下载路径",在弹出的对话框中可以看到当前图片的保存路径。 此外,由于网络因素,在保存图片之后,等待屏幕下方出现"已保存到..."后,才能在本地找到图片。 如何更改图片保存的目录? 请参见"右上角菜单 → 更多 → 修改下载路径"。 翻页不方便? 在点进某个图片后,通过在图片上向左或向右滑动,即可翻页查看下一个作品。 如何保存原图/导出动图? 长按图片/动图,在弹出的菜单中选择保存/导出即可。 输入账号密码后出现"进行人机身份验证"? 此为pixiv登陆时的验证码,请按照要求点击方框或图片。 在pxvr中注册pixiv账号后,收到验证邮件,无法访问邮件中的验证链接? 请复制邮件中的链接,打开pxvr中的"右上角菜单 → 输入地址"进行访问。 能否自动将页面内容翻译为汉语? 很抱歉,pxvr暂不提供语言翻译服务。 图片下载类型是否可以选择? 能否批量下载/批量管理下载? 已支持批量下载多图作品中的所有原图:找到一个多图作品,进入详情页面后,点击图片进入多图浏览模式,长按任意一张图片即可看到批量下载选项。 关于上述其他功能,我们...
考虑局部遮阴的光伏PSO-MPPT控制模型(Simulink仿真实现)内容概要:本文介绍了基于Simulink仿真实现的考虑局部遮阴的光伏PSO-MPPT控制模型,旨在通过粒子群优化(PSO)算法解决光伏发电系统在局部阴影条件下最大功率点跟踪(MPPT)的效率问题。文档不仅提供了该模型的技术实现方法,还列举了大量相关的MATLAB/Simulink仿真资源,涵盖电力系统、智能优化算法、机器学习、路径规划、信号处理等多个科研方向,适用于复现高水平期刊论文和开展创新性研究。文中强调科研需逻辑缜密、善于借力,并提倡结合实际仿真与理论分析以提升研究深度。 适合人群:具备一定电力电子、自动控制或新能源背景,熟悉MATLAB/Simulink环境,从事光伏系统优化、智能算法应用或相关领域研究的研发人员及硕博研究生。 使用场景及目标:①研究局部遮阴下光伏系统MPPT控制策略的性能提升;②利用PSO等智能优化算法解决非线性、多峰值优化问题;③复现SCI/EI级别论文中的MPPT控制模型;④开展光伏系统建模与仿真教学或项目开发。 阅读建议:建议读者结合文档提供的网盘资源,下载完整代码与模型文件,按照目录顺序逐步学习,重点理解PSO算法在MPPT中的应用机制,并通过修改参数、对比实验等方式深入掌握仿真细节,提升工程实践与科研创新能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值