首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >LNMP自动添加vhost脚本(功能蛮强大的)

LNMP自动添加vhost脚本(功能蛮强大的)

作者头像
老七Linux
发布于 2018-05-31 03:41:09
发布于 2018-05-31 03:41:09
1K00
举报
运行总次数:0

需求背景:

服务器上,跑的lamp环境,上面有很多客户的项目,每个项目就是一个网站。 由于客户在不断增加,每次增加一个客户(自动创建密码),就需要配置相应的mysql、ftp以及httpd. 这种工作是重复性非常强的,所以用脚本实现非常合适。

mysql增加的是对应客户项目的数据库、用户、密码,ftp增加的是对应项目的用户、密码(使用vsftpd,虚拟用户模式),httpd就是要增加虚拟主机配置段。


首先需要一个基础的nginx虚拟主机配置文件, 一般情况下,我们配置虚拟主机都是建一个vhost目录, 这里我在 /usr/local/nginx/conf/vhost 下面建了一个dd.conf文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
server
{
    listen 80;  
    server_name #host#;
    index index.html index.htm index.php;
    root /data/wwwroot/#host#;

##add php jiexi
location ~ \.php$
      {
        include fastcgi_params;
        fastcgi_pass unix:/tmp/#host#.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /data/wwwroot/#host#$fastcgi_script_name;
      }
}

绞尽脑汁也没有找出来如何能够添加一个新的虚拟机配置文件,在网上找到了灵感!(感谢度娘+1)

在 /usr/local/php-fpm/etc 下面建了一个pp.conf文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[[email protected] etc]# cat pp.conf 
[#php#]
listen = /tmp/#php#.sock
listen.mode = 666
user = php-fpm
group = php-fpm
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 15
pm.max_requests = 50
rlimit_files = 1024

在 /etc/vsftpd/vsftpd_user_conf/ 下面建了一个ftpuser文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[[email protected] vsftpd_user_conf]# cat ftpuser 
local_root=/home/ftpuser/#ftpuser#
anonymous_enable=NO    
write_enable=YES      
local_umask=022     
anon_upload_enable=NO      
anon_mkdir_write_enable=NO    
idle_session_timeout=600   
data_connection_timeout=120    
max_clients=10

注意里面一些关键路径,我用特殊字符组合来表示,这样方便我们添加虚拟注意的时候进行匹配替换。


lnmpvhost.sh 脚本如下:

一定要先满足如下条件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
关闭iptables 以及selinux

yum install -y expect
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#! /bin/bash

##add a new vhost and mysql and ftp(before use this shell script, pls it must stop firewall and selinux services!!)
##written by zhdya_20171016

date=`date +%F_%T`
dd="/usr/local/nginx/conf/vhost/dd.conf"
vhost="/usr/local/nginx/conf/vhost"
host="/data/wwwroot"

##create web's dir and configure nginx and php.
read -p "pls input website like "www.baidu.com": " web

if [ -d $host/$web ]
then
	echo "[warning] The $host/$web already exist, pls check it now!"
	exit
else
	mkdir -p $host/$web
	chmod 755 $host/$web
	cat $dd | sed -e "s:#hosts#:${web}:g"|sed -e "s/#host#/${web}/g" > $vhost/$web.conf
	/usr/sbin/nginx -s reload
	cat /usr/local/php-fpm/etc/pp.conf | sed -e "s:#php#:${web}:g"|sed -e "s/#php#/${web}/g" >> /usr/local/php-fpm/etc/php-fpm.conf
	/etc/init.d/php-fpm reload
	echo "already create the $host/$web, and configure php-fpm, nginx success, pls check it!"
fi

##add a user and check the user already exist or not, and add a new ftp user with password!!
read -p "pls input a user: " u
if cat /etc/passwd | awk -F ':' '{print $1}' |grep "$u"
then
	echo "the user already exist."
else
	m=`mkpasswd -l 10 -c 2 -C 2 -d 2`
	useradd $u
	echo "$m" | passwd --stdin $u >/dev/null 2>&1
	echo "$date  username: $u password: $m" >> /tmp/users.txt
	echo "pls check the user's list file."
	read -p "do you need create ftp also? [y/n] " f
		case $f in
		y|yes)
			echo -e "$u\n$m" >> /etc/vsftpd/vsftpd_login
			cat /etc/vsftpd/vsftpd_user_conf/ftpuser | sed -e "s:#ftpuser#:${u}:g"|sed -e "s/#ftpuser#/${u}/g" > /etc/vsftpd/vsftpd_user_conf/$u
			mkdir -p /home/ftpuser/$u
			touch /home/ftpuser/$u/$u.txt
			chown -R $u.$u /home/ftpuser/$u
		;;
		n|no)
		echo "you choice no need to create, exit..."
		break
		;;
		*)
		echo "you input was wrong, pls check it!"
		break
		;;
		esac 
fi 

##create a new database
read -p "do you need create a new database for this new vhost? [y/n] " d
	case $d in
	y|yes)
		read -p "please input database:" database
		read -p "please input dbuser:" dbuser
		read -p "please input dbpwd:" dbpwd
		HOSTNAME="127.0.0.1"
		PORT="3306"
		USERNAME="root"
		read -p "input root pwd:" PASSWORD
		
		create_db_sql="create database ${database}"
                mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD} -e "${create_db_sql}"
                if [ $? -ne 0 ]
                then
                        echo 'add db error'
                        exit 0
                fi
                sleep 1
		
		create_db_sql="create user $dbuser"
		/usr/local/mysql/bin/mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD} -e "${create_db_sql}"
		if [ $? -ne 0 ]
		then
        		echo 'add db user error'
        		exit 0
		fi
		sleep 1
		
		create_db_sql="grant all  on ${database}.* to ${dbuser}@localhost identified by '${dbpwd}'"
		mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD} -e "${create_db_sql}"
		if [ $? -ne 0 ]
		then
        		echo 'user to db user error'
        		echo $create_db_sql
		exit 0
		fi
		
		create_db_sql="flush privileges"
		mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD} -e "${create_db_sql}"

		echo 'all of things now already done, pls check it!!'
	;;
	n|no)
		echo "ok, finished!! pls check!!"
		exit
	;;
	*)
		echo "you input was wrong, pls check it!"
		break
	;;
	esac
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017/08/16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Python全栈开发-git常用命令
Python全栈开发-git常用命令 本节内容 github介绍 安装 仓库创建& 提交代码 代码回滚 工作区和暂存区 撤销修改 删除操作 远程仓库 分支管理 多人协作 github使用 忽略特殊文件.gitignore 2.git安装 git # 查看环境变量内是否有git sudo apt-get install git # ubuntu下安装git 3.版本库创建 git init # 初始化git仓库 git add file # 将文件添加到stage缓存区 git add . # 将
公众号---人生代码
2019/09/09
5320
Git常用命令总结
Git在初次使用之前,应该进行一些设置。主要是设置user.name和user.email
zy010101
2022/05/05
3150
Git常用命令速查手册
命令不断更新中...... Git的四个组成部分 75062926.png 1、初始化仓库 git init 2、将文件添加到仓库 git add 文件名 # 将工作区的某个文件添加到暂存区
小程故事多
2018/08/22
5800
Git常用命令速查手册
Git常用命令总结
平常我们开发就是拷贝远程仓库中的一个分支,基于该分支进行开发。在开发过程中就是对工作区的操作。
Anymarvel
2018/10/22
5.2K0
Git常用命令总结
开发中必须要掌握的 Git 技巧
本文是参考廖雪峰老师的Git资料再加上我自己对Git的理解,记录我的Git学习历程,作下此文是为以后学习,工作,开发中如果遇到问题可以回过头来参考参考。因为水平有限,难免会有出错的地方,欢迎指正。
lyb-geek
2019/08/19
7060
开发中必须要掌握的 Git 技巧
Git技术干货!工作中Git的使用实践和常用命令合集!
从本质上来讲 Git 是一个内容寻址(content-addressable)文件系统,并在此之上提供了一个版本控制系统的用户界面。
洋仔聊编程
2020/08/02
7090
Git之常用命令
廖雪峰文档:https://www.liaoxuefeng.com/wiki/896043488029600/900004111093344查看工作区
全栈程序员站长
2021/04/07
4220
Git常用命令和常见问题
你是 Windows 程序员,且正在开发仅运行在 Windows 上的项目,可以设置 false 取消此功能,把回车保留在版本库中:
青梅煮码
2023/02/18
7770
Git常用命令和常见问题
最全的Git常用命令速查-2021版
虽然如今已有很多可视化的 Git 工具,但是很多时候我们还是需要用到命令直接操作。
小锟哥哥
2022/05/10
3700
最全的Git常用命令速查-2021版
git工具的使用方法[通俗易懂]
一、SVN与git的区别 SVN是“集成式”管理方式,所有的“版本控制器”都在中央服务器上,每个开发人员的的计算机都要连接到中央服务器上才能进行合作开发。开发人员一般只能在公司才能进行开发(因为中央服务器在公司),局限性较大。 git是“分布式“管理方式,开放人员的每台计算机上都有一个“版本控制器”,每个开发人员把自己开发的模块的代码都上传到github上(充当一个远程仓库,类似与“中转站”的作用),其他人可以从github上下载相应的代码进行开发。git方式不需要中央服务器,开发人员可以做到“随时随地”的开发。(因为github是一个公用的平台,只要在有网的地方,就可以登陆去下载相应的代码版本)。
全栈程序员站长
2022/07/23
5110
Git常用命令总结
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
拓荒者
2019/09/25
6360
Git 常用命令
Git 的工作就是创建和保存你项目的快照及与之后的快照进行对比。常用的是以下 6 个命令:
Yorkyu
2022/03/22
5970
Git 常用命令
相关推荐
Python全栈开发-git常用命令
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档