例69
需求:服务器上,跑的lamp环境,上面有很多客户的项目,每个项目就是一个网站。 由于客户在不断增加,每次增加一个客户,就需要配置相应的mysql、ftp以及httpd。这种工作重复性非常强的,所以用脚本实现非常合适。mysql增加的是对应客户项目的数据库、用户、密码,ftp增加的是对应项目的用户、密码(使用vsftpd,虚拟用户模式),httpd就是要增加虚拟主机配置段。
#!/bin/bash
#本脚本的功能是在LAMP环境中增加站点,包括apache配置、FTP增加用户、MySQL增加库和用户
#作者:xzm
#日期:2019-12-16
#网站目录
webdir=/data/wwwroot
#ftp的虚拟用户配置文件目录
ftpudir=/etc/vsftpd/vuuser
#ftp虚拟用户密码文件
ftpuserfile=/root/login
#mysql命令行登录root
mysqlc="/usr/local/mysql/bin/mysql -uroot -pjk1hYUcnt6"
#apache虚拟主机配置文件
httpd_config_f="/usr/local/apache2/conf/extra/httpd-vhosts.conf"
#定义增加MySQL库和用户的函数
add_mysql_user()
{
#生成随机密码
mysql_p=mkpasswd -s 0 -l 12
#将密码保存到临时文件里,这里的
p
r
o
为
用
户
自
定
义
的
项
目
名
字
e
c
h
o
"
pro为用户自定义的项目名字 echo "
pro为用户自定义的项目名字echo"pro
m
y
s
q
l
p
"
>
/
t
m
p
/
mysql_p" >/tmp/
mysqlp">/tmp/pro.txt
#这里使用嵌入文档的形式(需顶格),将创建用户并授权的命令传递给mysql
$mysqlc <<EOF
create database $pro;
grant all on
p
r
o
.
∗
t
o
"
pro.* to "
pro.∗to"pro"@‘127.0.0.1’ identified by “KaTeX parse error: Expected 'EOF', got '#' at position 11: mysql_p"; #̲下面这个EOF必须要顶格 EO…pro” >>
f
t
p
u
s
e
r
f
i
l
e
e
c
h
o
"
ftpuserfile echo "
ftpuserfileecho"ftp_p" >> $ftpuserfile
#将用户、密码文件转换为密码db文件
db_load -T -t hash -f $ftpuserfile /etc/vsftpd/vsftpd_login.db
cd $ftpudir
#这里的aaa是一个文件,是之前的一个项目,可以作为配置模板
cp aaa KaTeX parse error: Expected 'EOF', got '#' at position 10: pro #̲把里面的aaa改为新的项目名字…pro/" KaTeX parse error: Expected 'EOF', got '#' at position 10: pro #̲重启vsftpd服务 …dom为用户自定义的域名
mkdir
w
e
b
d
i
r
/
webdir/
webdir/dom
#将网站根目录属主和属组设置为ftp用户
chown vsftpd:vsftpd
w
e
b
d
i
r
/
webdir/
webdir/dom
#用嵌入文档(需顶格),把虚拟主机配置写入到配置文件里
cat >> $httpd_config_f <<EOF
<VirtualHost *:80>
DocumentRoot
w
e
b
d
i
r
/
webdir/
webdir/dom
ServerName $dom
<Directory
w
e
b
d
i
r
/
webdir/
webdir/dom>
AllowOverride none
Require all granted
EOF
#重载apache服务
/usr/local/apache2/bin/apachectl graceful
}
read -p "input the project name: " pro
read -p "input the domain: " dom
add_mysql_user
add_ftp_user
config_httpd