宝塔LNMP一键部署脚本:快速部署宝塔及其LNMP环境

0.背后故事

宝塔环境常规安装方法: 首先执行宝塔命令安装宝塔面板,然后登陆宝塔再手动安装LNMP环境。此过程其实很不方便,为啥不能把后面的也一并安装了呢?既然都是linux服务器,那命令行为啥不能实现呢?

宝塔LNMP一键脚本:将上述过程通过脚本命令自动完成,实现一次性部署好LNMP环境,真正做的省时省力,开箱即用。

初次尝试,主要是参考宝塔的Docker版本做的,当时的脚本全都是shell脚本,所以实际体验起来并没有宝塔自带的安装速度快。本次尝试前,已经对宝塔做了全面的分析,当前宝塔主要是基于python的flask库开发的,用sqlite3做数据存储。分析了宝塔的初始化运行日志后,提取关键命令,然后在整合shell命令和python命令。使用python的原因是可以对异步进程,极大提高安装速度。

1.宝塔LNMP一键部署脚本

开源地址:https://github.com/Baiyuetribe/baiyue_onekey

bash <(curl -L -s https://raw.githubusercontent.com/Baiyuetribe/baiyue_onekey/master/bt.sh)

实测双核阿里云整体耗时5分钟。

2.自定义内容

脚本内置了TG信息推送,意味着除了上述窗口等待外,实际上还可以编辑脚本里的TG推送信息,实现脚本后台运行,完成后推送TG的效果。

A:TG接收消息

#!/bin/bash
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
#===================================================================#
#   System Required:  CentOS 7                                        #
#   Author: Azure <2894049053@qq.com> TG:@Latte_Coffe                #
#   github: @baiyutribe <https://github.com/baiyuetribe>             #
#   Blog:  佰阅部落 https://baiyue.one                                  #
#===================================================================#
#///宝塔环境终端部署mysql mariadb_10.3+php7.3+nginx1.19+phpadmin4.9
#
#一键脚本
#check root
[ $(id -u) != "0" ] && { echo "错误: 您必须以root用户运行此脚本"; exit 1; }
rm -rf all
rm -rf $0

init(){
    echo "执行宝塔安装命令"
    a=$(date "+%s")
    #脚本来源于宝塔官网
    yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh &>/dev/null
    echo y | bash install.sh #&>/dev/null
    b=$(date "+%s")    
    echo "宝塔面板已安装 耗时:$(($b-$a))s"
}
init_env(){
    cd /www/server/panel/class
    cat > "tmp_install.py" <<EOF
#coding: utf-8
# 软件安装
# ------------------------------
import time
import os
import panelTask
os.chdir('/www/server/panel')

p = panelTask.bt_task()

def task(name,shell):
    start = time.time()
    print('正在安装' + name + '程序')
    p.execute_task(3,0,shell,'')
    print(name + '安装用时{:.2f}秒'.format(time.time() - start))

def get_mem():
    allMem = int(os.popen("free -m | awk 'NR==2' | awk '{print \$2}'").read())
    if allMem <= 1700:
        return '5.6'
    elif allMem >=5400:
        return '8.0'
    else:
        return '5.7'

task('nginx','bash /www/server/panel/install/install_soft.sh 1 install nginx 1.18')
task('mysql','bash /www/server/panel/install/install_soft.sh 1 install mysql ' + get_mem())
task('php','bash /www/server/panel/install/install_soft.sh 1 install php 7.3')
task('phpadmin','bash /www/server/panel/install/install_soft.sh 1 install phpmyadmin 4.9')
EOF
    python tmp_install.py
    #删除最后两行
    echo "所有软件已安装完毕"
    rm -f /www/server/panel/class/tmp_install.py
    #添加软件到首页    
    g=$(date "+%s")        
}
noticeTG(){
    TOKEN=XXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX     #TG机器人API—Token口令
    chat_ID=XXXXXXXXXXX      #推送消息的ID(可以是个人、也可以是Group或Chanel)
    BtPanelURL=`echo 14 | bt |grep http`
    username=`echo 14 | bt |grep username`
    password=`echo 14 | bt |grep password`
    message_text="Boss,您的服务器搭建完毕了,请检阅${hour}:${min}:${sec}
    $BtPanelURL
    $username
    $password"
    #echo "$message_text"
    curl -s -X POST https://api.telegram.org/bot${TOKEN}/sendMessage -d chat_id=${chat_ID} -d text="${message_text}" > /dev/null    
}
init
init_env
totaltime=$(($g-$a))
hour=$(( $totaltime/3600 ))
min=$(( ($totaltime-${hour}*3600)/60 ))
sec=$(( $totaltime-${hour}*3600-${min}*60 ))
echo ${hour}:${min}:${sec}
noticeTG 
clear
echo "=============安装概览================="
echo "BT面板:$(($b-$a))s"
echo "Total总耗时:${hour}时:${min}分:${sec}秒"
echo "====================================="
#显示宝塔面板信息
bt 14
# 运行命令 nohup bash dd.py &

修改上述的TG机器人Token和你的用户chat_ID后,就可以在安装完毕后收到通知。不做处理的话,也无影响。

当然,微信接口、短信接口等等,都可以接入

B:关于安装版本

nginx: 默认是最新的1.18

MySQL:根据机器内存做调整,小于1.7GB安装mysql5.6;大于5.6GB后安装mysql8.0;中间值安装mysql5.7

php: 默认安装php7.3

phpadmin: 默认最新版4.9

 

关于一键脚本网:

一键脚本网由佰阅部落倾力打造,旨在发布优质的自制源码、视频,更加侧重自制项目,如需开源项目可以参阅佰阅部落。

一键脚本网,丢掉代码,全中文可视化运行,极致体验
一键脚本 » 宝塔LNMP一键部署脚本:快速部署宝塔及其LNMP环境