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

被折叠的 条评论
为什么被折叠?



