#!/bin/bash
# ubuntu20 shell 脚本自动编译web安装网站环境 nginx199 php7/8 mariadb1011 以 systemd 方式设置开机启动
# mysql 重置 root 密码,创建 或删除 mysql 子库和子用户
# cd ~/cs ; echo "" > 1.sh ; nano 1.sh ; sudo chmod +x 1.sh ; ./1.sh
downDir="/datadisk/eisc/download" ;
installdir="/datadisk/eisc/server" ;
www="/datadisk/eisc/www"
wwwconf="/datadisk/eisc/www/wwwconf"
ReleaseList=( nginxRelease phpRelease maraidbRelease cgiccRelease )
# 安装路径不能将所有目录都为 777 , 如: mysql 的 /etc/my.cnf 不能为 777 否则mysql 无法启动;
# 设置web 网站路径 和 nginx conf 子站点路径
echo "
欢迎使用自动安装 网站web 环境shell 脚本, nginx199 php-fpm mariadb10.11
当前需要更新 apt upgrade , 如果遇到弹窗选择包,请回车跳过。不要按 Esc 退出. 建议选择 ubuntu20.04
安装完成重启服务器后,启动web服务命令: sudo nginx199 ; sudo php-fpm743 ; sudo /etc/init.d/mariadb1011 restart
数据库默认登陆: mysql -u root -peisc.cn
server 源码下载路径:$downDir
server 安装路径:$installdir
www 网站路径:$www
www nginx conf 子站点路径:$wwwconf
set 2023.07.09 小绿叶技术博客 eisc.cn
"
sleep 2;
os_release()
{
if [ $USER = "root" ]
then
sudoc=" "
# 判断字符串的等号要加空格,否则无法判断
else
sudoc="sudo"
echo "当前为普通用户,需要输入root 密码... $sudoc"
$sudoc date ;
fi
xitong=` cat /etc/os-release | grep -w ID | awk -F"=" '{print $2}' | sed "s/\"//g" `
case "$xitong" in
"centos" ) aptc="yum" ; dpkgc="rpm -qa " ; echo "当前是 centos 系统" ;;
"ubuntu" ) aptc="apt" ; dpkgc="dpkg -l " ; echo "当前是 ubuntu 系统" ;;
esac
if [ ! -e /etc/init.d/mariadb1011 ]
then
sudo apt update ; sudo apt upgrade -y
fi
$sudoc mkdir -p $downDir $installdir $www
$sudoc chmod 777 -R $downDir $installdir $www
}
nginxRelease()
{
case $selectFlag in
"0") downUrl="http://work.eisc.cn/ruanjian/ubuntu/server/" ;;
"1") downUrl="http://nginx.org/download" ;;
*) echo "未定义下载地址..." ; exit ;;
esac
ReleaseMl="nginx-1.9.9"
ReleaseInstall="nginx/nginx199"
ReleaseBin="nginx"
Down="$downUrl/$ReleaseMl.tar.gz"
echo "$ReleaseMl 下载地址重新定义为:$Down"
}
phpRelease()
{
case $selectFlag in
"0") downUrl="http://work.eisc.cn/ruanjian/ubuntu/server/php" ;;
"1") downUrl="https://www.php.net/distributions" ;;
*) echo "未定义" ;;
esac
case $selectxh in
"1") ReleaseMl=php-7.2.1 ; ReleaseInstall=php/php721 ; ReleaseBin=php-fpm ; Down="$downUrl/$ReleaseMl.tar.gz" ; echo "php版本 $ReleaseMl 下载:$Down" ;;
"2") ReleaseMl=php-7.4.33 ; ReleaseInstall=php/php743 ; ReleaseBin=php-fpm ; Down="$downUrl/$ReleaseMl.tar.gz" ; echo "php版本 $ReleaseMl 下载:$Down" ;;
"3") ReleaseMl=php-8.1.13 ; ReleaseInstall=php/php811 ; ReleaseBin=php-fpm ; Down="$downUrl/$ReleaseMl.tar.gz" ; echo "php版本 $ReleaseMl 下载:$Down" ;;
*) echo "[ok]退出安装 php "
esac
}
maraidbRelease()
{
case $selectFlag in
"0") downUrl="http://work.eisc.cn/ruanjian/ubuntu/server/" ;;
"1") downUrl="https://archive.mariadb.org//mariadb-10.11.0/bintar-linux-systemd-x86_64/" ;;
*) echo "未定义下载地址..." ; exit ;;
esac
ReleaseMl="mariadb-10.11.0-linux-systemd-x86_64"
ReleaseInstall="mysql/mariadb1011"
ReleaseBin="mariadb"
Down="$downUrl/$ReleaseMl.tar.gz"
echo "$ReleaseMl 下载地址重新定义为:$Down"
}
cgiccRelease()
{
case $selectFlag in
"0") downUrl="http://work.eisc.cn/ruanjian/ubuntu/server" ;;
"1") downUrl="http://ftp.gnu.org/gnu/cgicc" ;;
*) echo "未定义下载地址..." ; exit ;;
esac
ReleaseMl="cgicc-3.2.19"
ReleaseInstall="cgi/cgicc321"
ReleaseBin="cgicc"
Down="$downUrl/$ReleaseMl.tar.gz"
echo "$ReleaseMl 下载地址重新定义为:$Down"
}
down_select(){
read -p "选择下载安装包地址: 1 小绿叶技术博客下载 2 官方下载 . 请输入: " selectURL
case $selectURL in
"1") echo "当前选择小绿叶技术博客下载..." ; selectFlag=0 ;;
"2") echo "当前选择官方下载..." ; selectFlag=1 ;;
*) echo "输入错误,请重新执行脚本! " ; exit ;;
esac
echo "请输入您要安装php 的版本: 提供版本: 1. php7.2.1 2. php7.4.33 3. php8.1.13 任意按键取消安装php 并且往下执行... "
read -p "input number: " selectxh
}
aptInstall()
{
nginxApt="build-essential libtool libpcre3 libpcre3-dev zlib1g-dev openssl libgd-dev geoip-database libgeoip-dev unzip nfs-kernel-server nfs-common"
# gcc c++ ; pcre ; zlib ssl GD ; GeoIP 依赖库
phpApt="
gcc make openssl curl libssl-dev libxml2-dev libzip-dev libcurl4-openssl-dev
libpng-dev libjpeg-dev libwebp-dev libonig-dev libsqlite3-dev libsodium-dev libargon2-dev
libkrb5-dev libbz2-dev libxslt-dev php-mbstring
build-essential libtool libpcre3 libpcre3-dev zlib1g-dev libgd-dev geoip-database libgeoip-dev
"
# 安装包: No package 'krb5-gssapi' found ; Please reinstall the BZip2 distribution ; No package 'libxslt' found
# 报错解决参考:http://t.zoukankan.com/architectforest-p-15714248.html
mariadbApt="libncurses5"
cgiApt="build-essential libfcgi-dev autoconf libtool automake libtool spawn-fcgi fcgiwrap"
$sudoc $aptc install -y $nginxApt $phpApt $mariadbApt $cgiApt
}
download()
{
cd $downDir ; echo "当前进入目录进行下载: cd $downDir "
for i in ${ReleaseList[*]}
do
$i # 执行函数变量
setdir=$downDir/$ReleaseInstall ;
rundir=$installdir/$ReleaseInstall ;
$sudoc mkdir -p $setdir $rundir
$sudoc chmod 777 -R $setdir $setdir/* $rundir $rundir/* $Down
echo "[runing] 正在检查是否下载安装包: $ReleaseMl.tar.gz"
# [ ! -d $setdir ] && echo "[running] 目标安装路径不存在" || break ;
if [ ! -f $ReleaseMl.tar.gz ]
then
echo "[runing] 当前没有下载,正在下载包:wget $Down "
$sudoc wget $Down
else
echo "[ok] 已经下载: $downDir/$ReleaseMl.tar.gz"
fi
echo "检测是否解压... "
cutNumber=`ls $setdir/* |sort |uniq -c | awk -F" " '{print $1}'` ;
if [[ "$cutNumber" = "" ]] # 判断变量的数值大小,需要双小括号+ 引号
then
echo "[running] 正在解压 $downDir/$ReleaseMl.tar.gz 到目录: $setdir" ;
tar -xzvf $downDir/$ReleaseMl.tar.gz -C $downDir/
mv $downDir/$ReleaseMl/* $downDir/$ReleaseInstall
else
echo "[ok] 已经解压 : $setdir "
fi
done
}
nginx_Compilation_method()
{
$sudoc chmod 777 -R $setdir $setdir/*
./configure --prefix=$rundir --with-stream --with-http_stub_status_module
# nginx 开启 tcp 和 文件浏览模块: --with-stream --with-http_stub_status_module
NR=`cat -n ./src/os/unix/ngx_user.c | grep cd.current_salt | awk -F" " '{print $1}'` ; sleep 0.5
$sudoc sed -i "$NR d" ./src/os/unix/ngx_user.c ; sleep 0.5
$sudoc sed -i "s/-Werror/ /g" objs/Makefile ; sleep 0.5
# 先修改 c 文件,再修改make
$sudoc mkdir $setdir/logs ; $sudoc chmod 777 $setdir/logs
$sudoc make ; sleep 1 # make 会生成 新文件,新文件也需要修改才能编译
$sudoc sed -i "s/-Werror/ /g" objs/Makefile ; sleep 0.5
$sudoc make install
nginx_file_list
}
nginx_file_list()
{
echo "
sudo nano conf/nginx.conf
# http 模块外面写 tcp 配置路径: include /www/wwwconf/tcp/*.conf;
# http 模块 里面 http{} 写: include /www/wwwconf/http/*.conf;
sudo mkdir -p /www/wwwconf/tcp /www/wwwconf/http ; sudo chmod 777 -R /www/wwwconf/*
sudo nano /www/wwwconf/http/web.sh
# 开启文件浏览器功能
server{
listen 800;
#server_name eisc.cn
root /datadisk/eisc/download;
location / {
#root /mnt/software; #我们开始新建的目录
autoindex on; #以列表信息显示目录文件
index index.html index.htm;
charset utf-8;
}
}
sudo nano /www/wwwconf/tcp/tcp.conf
# tcp 转发
stream {
upstream eisc { server 8.219.134.200:1180; }
server { listen 1180; proxy_pass eisc; }
}
"
}
cgicc_Compilation_method()
{
$sudoc chmod 777 -R $setdir $setdir/*
./configure --prefix=$rundir
make ; $sudoc make install
}
php_Compilation_method()
{
$sudoc groupadd www ; $sudoc useradd -g www www -s /bin/false
# sudo groupadd www-data ; sudo useradd -g www-data www-data -s /bin/false # 重建用户,并且不允许用户登陆系统
$sudoc chmod 777 -R $setdir $setdir/*
./configure --prefix=$rundir --with-config-file-path=$rundir/etc \
--enable-fpm --with-fpm-user=www --with-fpm-group=www --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd \
--with-iconv-dir --with-freetype --with-jpeg --with-zlib \
--enable-zip \
--with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-mbstring --enable-intl \
--enable-ftp --enable-gd --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-soap --with-gettext --disable-fileinfo --enable-opcache --with-webp
# --with-openssl
# 第一行 指定安装路径,和 php.ini 路径为 $installdir/php/php72/etc
# 第二行 开启php 的 php-fpm web功能。启动用户名和组 和 重要 开启php 的mysql connect() 函数 功能。
# 第三行 压缩解码工具 否则 php WordPress 无法无法正常启动 报错: is not a valid libtool object
# 后面行,暂时没有研究. --with-openssl ubuntu22 编译不过
$sudoc make ; $sudoc make install
# ./configure 不能使用sudo 权限,否则后面make 和 make install 出现问题
#----------------------- 说明 -------------------#
# 安装说明:https://www.php.net/manual/zh/install.php
#--with-fpm-user - 设置 FPM 运行的用户身份(默认 - nobody)。
#--with-fpm-group - 设置 FPM 运行时的用户组(默认 - nobody)。
#--with-fpm-systemd - 启用 systemd 集成 (默认 - no)。
#--with-fpm-acl - 使用 POSIX 访问控制列表 (默认 - no)。
#--with-fpm-apparmor - 激活 AppArmor 集成 (默认 - no)。
#--with-fpm-selinux - 激活 SELinux 集成(默认 - no)。
#---------------------- php config ---------------#
$sudoc cp $setdir/sapi/fpm/php-fpm.service.in /etc/systemd/system/php-fpm.service
$sudoc cp $setdir/php.ini-development $rundir/etc/php.ini
$sudoc cp $rundir/etc/php-fpm.conf.default $rundir/etc/php-fpm.conf
$sudoc cp $rundir/etc/php-fpm.d/www.conf.default $rundir/etc/php-fpm.d/www.conf
#---------- 更改用户
NR=`cat -n $rundir/etc/php-fpm.d/www.conf | grep -w user | grep nobody | awk -F" " '{print $1}'`
$sudoc sed -i "$NR s/nobody/www/g" $rundir/etc/php-fpm.d/www.conf
NR=`cat -n $rundir/etc/php-fpm.d/www.conf | grep -w group | grep -v listen | grep nobody | awk -F" " '{print $1}'`
$sudoc sed -i "$NR s/nobody/www/g" $rundir/etc/php-fpm.d/www.conf
NR=`cat -n /etc/systemd/system/php-fpm.service | grep ProtectSystem | awk -F" " '{print $1}'`
$sudoc sed -i "$NR s/full/false/g" /etc/systemd/system/php-fpm.service
#---------- 解决 No input file specified
NR=`cat -n $rundir/etc/php.ini | grep fix_pathinfo | grep -v provides| awk -F" " '{print $1}'`
$sudoc sed -i "$NR a cgi.fix_pathinfo=1" $rundir/etc/php.ini
$sudoc sed -i "$NR d" $rundir/etc/php.ini
NR=`cat -n $rundir/etc/php.ini | grep force_redirect | grep 1| awk -F" " '{print $1}'`
$sudoc sed -i "$NR a cgi.force_redirect=0" $rundir/etc/php.ini
$sudoc sed -i "$NR d" $rundir/etc/php.ini
#-----------
NR=`cat -n $rundir/etc/php-fpm.d/www.conf | grep "127.0.0.1:9000" | awk -F" " '{print $1}'`
# sudo sed -i "$NR a listen = /var/run/$phpreleaseBin.sock" $rundir/etc/php-fpm.d/www.conf
$sudoc sed -i "$NR a listen = 127.0.0.1:9000" $rundir/etc/php-fpm.d/www.conf
$sudoc sed -i "$NR d" $rundir/etc/php-fpm.d/www.conf
#sudo sed -i "778 s/;//g" /etc/php/7.4/fpm/php.ini
#sudo sed -i "778 s/1/0/g" /etc/php/7.4/fpm/php.ini
#sudo sed -i "798 s/;//g" /etc/php/7.4/fpm/php.ini
# 解决 No input file specified
}
mariadb_Compilation_method()
{
$sudoc groupadd mysql ; $sudoc useradd -g mysql mysql -s /bin/false
# 创建mysql用户组和用户,不允许登陆系统
$sudoc mv $downDir/$ReleaseInstall/* $rundir
$sudoc mkdir -p $installdir/sqldata
$sudoc chown -R mysql:mysql $installdir/sqldata ; $sudoc chmod 777 -R $installdir/sqldata
$sudoc $rundir/scripts/mysql_install_db --user=mysql --basedir=$rundir --datadir=$installdir/sqldata
# 初始化mariadb
$sudoc cp $rundir/support-files/wsrep.cnf /etc/my.cnf
$sudoc chmod 777 /etc/my.cnf
echo "
[mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
#添加以下配置
basedir=$rundir
datadir=$installdir/sqldata
# 设置字符集为UTF-8
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
" > /etc/my.cnf
$sudoc chmod 644 /etc/my.cnf
# my.cnf 权限为 777 不安全,所以mysql无法启动。
$sudoc cp $rundir/support-files/mysql.server /etc/init.d/mysql
$sudoc cp $rundir/bin/mysqld /etc/init.d/mysqld
$sudoc ln -s $rundir/support-files/mysql.server /etc/init.d/mariadb1011
$sudoc chmod +x /etc/init.d/mysqld
#---------- 重置 mysql root 密码也是该流程 ---------#
$sudoc killall mariadbd mysqld_safe
runmysql=`sudo netstat -nltp | grep 3306 | grep -w tcp | grep mariadb`
if [ ${#runmysql} -lt 1 ]
then
sudo /etc/init.d/mariadb1011 start
fi
# 重新启动mysql 服务, mysql 启动时候才能进行 mysqladmin 命令 重置密码
sleep 1;
$sudoc $rundir/bin/mysqladmin -u root password eisc.cn
echo "数据库root 密码为: eisc.cn 使用命令更改密码: "
echo "sudo $rundir/bin/mysqladmin -u root password eisc.cn"
$sudoc mkdir -p $installdir/back/sql/ ; $sudoc chmod 777 $installdir/back/sql/
}
RunInstall(){
for i in ${ReleaseList[*]}
do
$i
MakeFlag=1;
soFlag=1
setdir=$downDir/$ReleaseInstall ;
rundir=$installdir/$ReleaseInstall ;
echo "当前正在安装 $i" ; sleep 1;
case "$ReleaseBin" in
"nginx") [ ! -f $rundir/sbin/$ReleaseBin ] && soFlag=1 || soFlag=0 ; Fpath ; $sudoc cp $rundir/sbin/$ReleaseBin /bin/ ;;
"php-fpm") [ ! -f $rundir/sbin/$ReleaseBin ] && soFlag=1 || soFlag=0 ; Fpath ; $sudoc cp $rundir/sbin/$ReleaseBin /bin/ ;;
"mariadb") [ ! -f $rundir/bin/$ReleaseBin ] && soFlag=1 || soFlag=0 ; Fpath ; $sudoc cp $rundir/bin/$ReleaseBin /bin/ ;;
"cgicc") [ ! -f $rundir/bin/cgicc-config ] && soFlag=1 || soFlag=0 ; Fpath ; $sudoc cp $rundir/bin/$ReleaseBin /bin/ ;;
esac
if [[ ! -f $rundir/bin/$ReleaseBin ]] && [[ $soFlag = "1" ]]
then
cd $setdir
echo "[waring] 包没有安装 $rundir/bin/$ReleaseBin 当前进入目录: $setdir " ;
case "$ReleaseBin" in
"nginx" ) nginx_Compilation_method ; Fpath ;;
"php-fpm" ) php_Compilation_method ; Fpath ;;
"mariadb" ) mariadb_Compilation_method ; Fpath ;;
"cgicc" ) cgicc_Compilation_method ; Fpath ;;
*) echo "未定指定编译,走通用编译方法..." ; $qx ./configure --prefix=$setdir ; $qx make -j 4 ; $qx make instlal; Fpath ;;
esac
if [ $MakeFlag = "1" ]
then
$qx ./configure ; $qx make -j 2 ; $qx make install
fi
else
echo "[ok] 已经安装: $rundir"
fi
done
}
# cd ~/public/ ; git pull ; ./sh/cmakegcc.sh
Fpath()
{
PathNginx=NGIXN_HOME
PathPhp=PHP_HOME
PathMariadb=MARIADB_HOME
$sudoc chmod 777 /etc/profile
StrCmake=`cat /etc/profile | grep $ReleaseInstall`
StrCmakeLength=${#StrCmake}
if [ $StrCmakeLength -lt 1 ]
then
case "$ReleaseBin" in
"nginx") echo "#### $ReleaseInstall ####" >> /etc/profile ;
echo "export $PathNginx=$rundir/sbin" >> /etc/profile ;
echo "export PATH=\${$PathNginx}:\$PATH" >> /etc/profile ;;
"php-fpm") echo "#### $ReleaseInstall ####" >> /etc/profile ;
echo "export $PathPhp=$rundir/sbin" >> /etc/profile ;
echo "export PATH=\${$PathPhp}:\$PATH" >> /etc/profile ;;
"mariadb") echo "#### $ReleaseInstall ####" >> /etc/profile ;
echo "export $PathMariadb=$rundir/bin" >> /etc/profile ;
echo "export PATH=\${$PathMariadb}:\$PATH" >> /etc/profile ;;
"cgicc") echo "#### $ReleaseInstall ####" >> /etc/profile ;
echo "export $PathMariadb=$rundir/bin" >> /etc/profile ;
echo "export PATH=\${$PathMariadb}:\$PATH" >> /etc/profile ;;
esac
# 指定目录可以 写一行,指定运行文件需要两行:目录+执行路径
else
echo "[ok] 环境变量已经配置,继续向下执行..."
fi
# export LD_LIBRARY_PATH=/path/to/libmpfr.so.6:$LD_LIBRARY_PATH
}
nginx_web_config(){
$sudoc mkdir -p $wwwconf $www ; sudo chmod 777 -R $www
setconf=`cat $installdir/nginx/nginx1.9.9/conf/nginx.conf | grep "$wwwconf" `
if [ ${#setconf} -gt 10 ]
then
echo "[ok]nginx 已经配置, 子站点目录: $wwwconf/www.conf"
else
NR=`cat -n $installdir/nginx/nginx1.9.9/conf/nginx.conf | grep http | grep "{" | awk -F" " '{print $1}'`
sudo sed -i "$NR a include $wwwconf/*.conf; " $installdir/nginx/nginx1.9.9/conf/nginx.conf
echo "<?php phpinfo(); ?>" > $www/www/p.php
fi
$sudoc nginx199 -s stop ; $sudoc nginx199
# 修改php 后重新启动nginx
}
create_www_conf(){
echo "案例: eisc.cn 0.0.0.0 62000"
read -p " 请输入三个参数:" peizhi
buff=( $peizhi )
yuming=${buff[0]}
# 前端域名,增加到nginx 消息头部
ip=${buff[1]}
# 后端服务器ip
portmin=${buff[2]}
portmin=$[portmin-1]
# 设置最小端口,后面网站按照顺序自动加1
declare -A port
port["www"]="62010"
port["work"]="62011"
port["sou"]="62012"
port["enchantment"]="62013"
port["guzheng"]="62014"
port["zhoubao"]="62015"
port["gcc"]="62016"
port["rykj"]="62017"
port["xibin"]="62100"
cd $wwwconf; sudo chmod 777 -R $wwwconf $wwwconf/*
if [ ! -e eiscwwwconf.tar.gz ]
then
$sudoc tar -czvf eiscwwwconf.tar.gz *
$sudoc rm -rf `ls | grep -v eiscwwwconf.tar.gz`
fi
$sudoc rm -rf `ls | grep -v eiscwwwconf.tar.gz`
file=(`ls $www | grep -vE "ssl|wwwconf|wwwroot|*.sh"`)
for i in ${file[*]}
do
((a++))
b=$[portmin+a] ; portlist[$c]=$b ; ((c++))
# 打印一次变量,接收一个元素存入数组: portlist
if [ ! -e $www/$i/cgi-bin ]
then
sudo mkdir $www/$i/cgi-bin
fi
case $i in
"www") b=${port[www]} ; echo "#------- www 被手动指定固定端口 $b -------#" ;;
"work") b=${port[work]} ; echo "#------- work 被手动指定固定端口 $b -------#" ;;
"sou") b=${port[sou]} ; echo "#------- sou 被手动指定固定端口 $b -------#";;
"enchantment") b=${port[enchantment]} ; echo "#------- enchantment 被手动指定固定端口 $b -------#";;
"guzheng") b=${port[guzheng]} ; echo "#------- guzheng 被手动指定固定端口 $b -------#";;
"zhoubao") b=${port[zhoubao]} ; echo "#------- zhoubao 被手动指定固定端口 $b -------#";;
"gcc") b=${port[gcc]} ; echo "#------- zhoubao 被手动指定固定端口 $b -------#";;
"rykj") b=${port[rykj]} ; echo "#------- rykj 被手动指定固定端口 $b -------#";;
"xibin") b=${port[xibin]} ; echo "#------- xibin 被手动指定固定端口 $b -------#";;
esac
echo " $i 创建web网站 的端口: $b 前端域名 + $i.$yuming + 后端ip port + $ip:$b + c++ cgi 解析目录: $i/cgi-bin"
echo " $i 创建web网站 的端口: $b 前端域名 + $i.$yuming + 后端ip port + $ip:$b + c++ cgi 解析目录: $i/cgi-bin" >> log_www_conf.txt
#--------- 生成前端转发 子站点文件 -----------#
$sudoc mkdir -p $wwwconf/nginxzhuanfa ; $sudoc chmod 777 $wwwconf/nginxzhuanfa
echo "
server{
listen 80;
server_name $i.$yuming;
location / {
proxy_pass http://$ip:$b;
}
}
" > $wwwconf/nginxzhuanfa/$i-$b.conf
if [ "$i" = "www" ]
then
echo "
server{
listen 80;
server_name $i.$yuming $yuming;
location / {
proxy_pass http://$ip:$b;
}
}
" > $wwwconf/nginxzhuanfa/$i-$b.conf
fi
if [ "$i" = "gcc" ]
then
echo "
server{
listen 80;
server_name www.okgcc.cn okgcc.cn;
location / {
proxy_pass http://$ip:$b;
}
}
" > $wwwconf/nginxzhuanfa/$i-$b.conf
fi
#---------- 后端转发子站点 ----------#
echo "
server {
listen $b;
root $www/$i;
index index.php index.html index.htm index;
add_header 'yuming is ' '$i.$yuming';
add_header 'ipport is ' '$ip:$b';
location ~ \.php {
# fastcgi_pass unix:/var/run/php-fpm811.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
include fastcgi_params;
}
location /cgi-bin {
fastcgi_pass unix:/var/run/fcgiwrap.socket;
include fastcgi.conf;
}
}
" > $wwwconf/$b.$i.conf
done
echo "[ok]创建网站日志存放在: $wwwconf/log_www_conf.txt"
echo "[ok]前端转发 nginx 子文件目录: $wwwconf/nginxzhuanfa"
sudo nginx199 -s reload
}
run_cgibin(){
cgiport=10000
psnet=`sudo netstat -ntlp | grep -w $cgiport `
echo "启动 cgi-bin c++ 环境,端口为:$cgiport"
if [ ${#psnet} -lt 1 ]
then
sudo spawn-fcgi -f /usr/sbin/fcgiwrap -a 127.0.0.1 -p $cgiport -F 32 -P /tmp/fastcgi-c.pid -u $USER -g $USER
# 启动
fi
echo "[ok]访问: 127.0.0.1/p.php 查看 效果, 子站点目录:$wwwconf/www.conf "
}
nginx_config_if()
{
echo "
#----------- 配置子站点nginx ------------#
请输入 前端转发服务器域名,后端服务器公网ip 和 第一个网站端口。有多个网站,端口自动计数加1 。
如果没有域名 和前端服务器,随意输入三个参数,但端口一定为 65536 以内。脚本可以重复执行,重新配置
"
read -p "是否进行配置: y 需要配置, 任意按键并回车跳过, 请输入: " ifa
if [ "$ifa" = "y" ]
then
echo "正在进行配置 子站点..."
create_www_conf
# 配置子站点
else
echo "[ok]已经跳过nginx配置子站点!"
fi
echo "[runing] 配置 cgi-bin c++ web 网站开发环境,是否安装?"
read -p " y/n? : " ifcgi
if [ "$ifcgi" = "y" ]
then
cgi_install_config
fi
}
mysql_data(){
#------ 修改mysql data 数据目录 -----#
$sudoc chmod 777 /eisc/
$sudoc mkdir /eisc/data/
$sudoc chown -R mysql:mysql /eisc/data/
$sudoc chmod 777 /usr/local/mariadb-10.9.2/data/
$sudoc cp -r /usr/local/mariadb-10.9.2/data/* /eisc/data/
$sudoc /usr/local/mariadb-10.9.2/support-files/mysql.server stop
$sudoc /usr/local/mariadb-10.9.2/support-files/mysql.server start
}
mysql_database(){
#!/bin/bash
# shell 自动创建数据库 用户和密码
$sudoc apt install libncurses*
# 解决mysql 命令报错,缺少库:Couldn't find any package by glob 'libncurses.so.5'
$sudoc apt install mysql-client -y
# 安装连接数据库工具
$sudoc mkdir /var/run/mysqld/
$sudoc ln -s /tmp/mysql.sock /var/run/mysqld/mysqld.sock
# 解决 mysql 报错,无法进入mysql 。 mariadb 的启动sock 不一样
runmysql=`sudo netstat -nltp | grep 3306 | grep -w tcp | grep mariadb`
if [ ${#runmysql} -lt 1 ]
then
$sudoc /etc/init.d/mariadb1011 start
fi
$sudoc $setdir/bin/mysqladmin -u root password eisc.cn
# 启动数据库,重置数据库 root 用户密码为: eisc.cn
echo "#---------------- 数据库管理工具 ------------#
参考输入案例: create eisc.cn www www 000000 localhost
1 创建 or 删除,输入: create 或 drop
2 数据库 root 用户密码
3 子数据库名
4 子库用户名
5 子库密码
6 开放数据库方式:本地/远程 输入: localhost 或 %
用空格隔开,必须按照顺序输入6个参数!"
read -p "请输入:" in_buff
buff=( abcd $in_buff);
echo "你输入的信息为: ${buff[*]}";
case ${buff[1]} in
"create")
# mysql -uroot -p${buff[2]} -e "create database ${buff[3]} character set utf8 collate utf8_bin;"
mysql -uroot -p${buff[2]} -e "create database ${buff[3]} character set utf8;"
mysql -uroot -p${buff[2]} -e "grant all on ${buff[4]}.* to '${buff[4]}'@'${buff[6]}' identified by '${buff[5]}'"
mysql -uroot -p${buff[2]} -e "show databases;SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS ListUsername FROM mysql.user where User='${buff[4]}';"
;;
"drop")
mysql -uroot -p${buff[2]} -e "drop database ${buff[3]}"
mysql -uroot -p${buff[2]} -e "drop user '${buff[4]}'@'${buff[6]}'"
mysql -uroot -p${buff[2]} -e "show databases;SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS ListUsername FROM mysql.user where User='${buff[4]}';"
;;
esac
}
mysql_contor(){
runmysql=`$sudoc netstat -nltp | grep 3306 | grep -w tcp | grep mariadb`
if [ ${#runmysql} -lt 1 ]
then
sudo /etc/init.d/mariadb1011 start
fi
# 启动数据库
echo "#---- 数据库 root 密码始终被重置为 eisc.cn ----#
如果需要手动重置为自己想要的密码,命令行手动执行命令:
sudo $setdir/bin/mysqladmin -u root password eisc.cn
将 eisc.cn 改为自己的密码
"
read -p "是否进行数据库管理工作,创建数据库和用户,输入: y/n ? " ins
if [ "$ins" = "y" ]
then
echo "开始管理数据库 ..."
mysql_database
else
echo "[ok]退出数据库管理!"
fi
}
kaiji_web_service(){
# ubuntu 以 systemd 服务方式,自动启动服务软件
systemdDir="/usr/lib/systemd/system"
webname="eisc_web_start.service"
cd $systemdDir ; $sudoc touch $webname ; $sudoc chmod 777 $webname
#----- 写入 start.service 服务 -----#
echo "
[Unit]
Description=start web
[Service]
Type=forking
ExecStart=/etc/init.d/shell/start.sh
ExecReload=/bin/kill -SIGHUP \$MAINPID
ExecStop=/bin/kill -SIGINT \$MAINPID
[Install]
WantedBy=multi-user.target
" > $webname
$sudoc apt install dos2unix -y
$sudoc dos2unix $webname
# 转为 unix 格式,否则可能出现字符乱码
$sudoc chmod 644 $webname
$sudoc systemctl daemon-reload
$sudoc systemctl disable $webname
$sudoc systemctl enable $webname
cd
}
kaiji_start_web_sh(){
$sudoc mkdir -p /etc/init.d/shell/ ; $sudoc chmod 777 /etc/init.d/shell/
if [ ! -e /etc/init.d/shell/openvpn_connect.sh ]
then
wget eisc.cn/file/ubuntu/shell/server/openvpn_connect.sh -O /etc/init.d/shell/openvpn_connect.sh
fi
read -p "是否继续进行配置 systemd 开机启动? y/n: " kaijisz
if [ "$kaijisz" = "y" ]
then
kaiji_web_service
# 启动这个函数
$sudoc mkdir -p $installdir/shell ; $sudoc chmod 777 -R $installdir/shell
# 将脚本授权给 root 用户
echo "#!/bin/bash
# bash 解释器 一定要在第一行 开头写,否则下面脚本不执行,开机启动不成功。 由于是 service服务,因此此脚本是 root 用户执行
mount -t nfs -o rw,hard,intr 192.168.122.1:/datadisk/eisc /datadisk/eisc/ ; sleep 2
/datadisk/eisc/server/nginx/nginx199/sbin/nginx &
/datadisk/eisc/server/php/php743/sbin/php-fpm &
/etc/init.d/mariadb1011 start &
/bin/spawn-fcgi -f /usr/sbin/fcgiwrap -a 127.0.0.1 -p 10000 -F 32 -P /tmp/fastcgi-c.pid &
/datadisk/eisc/server/gitea/gitea &
touch $HOME/log_start_web.txt ; chmod 777 $HOME/log_start_web.txt
echo "服务已经自动自动,时间 `date `" > $HOME/log_start_web.txt
/etc/init.d/shell/openvpn_connect.sh &
" > /etc/init.d/shell/start.sh
echo "#----------------- 查看写入的开机启动脚本 -------------------#"
cat /etc/init.d/shell/start.sh
$sudoc chmod +x /etc/init.d/shell/* $installdir/nginx/nginx199/sbin/nginx $installdir/php/php743/sbin/php-fpm $installdir/gitea/gitea
$sudoc chown -R root:root /etc/init.d/shell/* ; $sudoc chmod 777 -R /etc/init.d/shell/*
else
echo "[ok]目前不配置systemd "
fi
}
main(){
os_release; down_select ; aptInstall ; download ; RunInstall
nginx_web_config ; nginx_config_if
# 包含创建 www 子站点 和 c++ cgi
mysql_contor ; kaiji_start_web_sh
run_cgibin
}
main
# ubuntu20/21/22 一键部署 web 环境: wget eisc.cn/file/ubuntu/shell/server/web.sh ; chmod +x web.sh ; ./web.sh
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。