Linux WEB平台自动创建虚似主机

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

 最近经常项目需求开通WEB空间,手动实在太麻烦了,决定写个脚下自动创建MYSQL数据库和用户,NGINX虚似主机,FTP。我平台构架是Nginx+Mysql+Pureftpd+PHP,需要求意是,WEB主程序像nginx或apache它们的域名主机配置文件必须独立分开,FTP支持虚似用户(支持MYSQL)就这两点,以下运行此脚本的效果图,基本输入域名一路回车就完事了,源码中用文指说明的,是修改脚本的重点部分,另新建:QQ群:64280040 如不明白加Q一起讨论下

 源脚下载地址:http://down.51cto.com/data/509268

 以下是源码代


  
  
  1. #!/usr/bin/python 
  2. #The create to vhost for nginx 
  3. #http://skyson.blog.51cto.com 
  4. #Author:sky.xue 
  5. #Mail:2012damage@gmail.com 
  6. import os 
  7. import re 
  8. import sys 
  9. import random 
  10. import string 
  11. import urllib2 
  12.  
  13. #where is virtualhost path 
  14. VIRTUAL_HOST='/usr/local/nginx/vhost' //WEB程序虚似主机目录
  15. #Default web directory 
  16. DIRECTORY='/var/www' 
  17. #Default nginx tmpllate //默认的WEB路经
  18. VHOST_TEMP='nginx_vhost_conf_template' //创建自己的WEB模板 
  19. #Default mysql path 
  20. MYSQL_PATH='/var/lib/mysql' //默义的数据路经路址
  21. #Nginx file of save list 
  22. LIST=[] 
  23. #Mysql user 
  24. MYSQL_USER='root' //MYSQL管理员用户名
  25. #Mysql password 
  26. MYSQL_PASS='' //MYSQL管理员密码
  27. #Ranmod password 
  28. FTP_PASS = ''.join(random.sample(string.ascii_letters + string.digits , 16)) 
  29. SQL_PASS = ''.join(random.sample(string.ascii_letters + string.digits , 8)) 
  30. #Show host ip 
  31. IP=re.search('\d+\.\d+\.\d+\.\d+',urllib2.urlopen("http://www.whereismyip.com").read()).group(0
  32. #Nginx startup argument 
  33. NGINX='/shell/nginx.sh restart' //WEB程序重起参数,像APACHE /etc/init.d/httpd restart
  34.  
  35.  
  36.  
  37. def create_mysql_exe(EXE): 
  38.     MYSQL_CREA_DATA="CREATE DATABASE %s;"%EXE 
  39.     MYSQL_CREA_USER="grant all on %s.* to %s@localhost identified by '%s';" %(EXE,EXE+'_user',SQL_PASS) 
  40.     MYSQL_DATA_USER= MYSQL_CREA_DATA + MYSQL_CREA_USER 
  41.     MYSQL_USER_PASS='mysql -u%s -p%s -e "%s"'%(MYSQL_USER,MYSQL_PASS,MYSQL_DATA_USER) 
  42.     MYSQL_EXE= MYSQL_USER_PASS 
  43.     MYSQL_PATH_DATA_NAME=MYSQL_PATH+os.sep+EXE 
  44.     if not os.path.isdir(MYSQL_PATH_DATA_NAME): 
  45.         os.system(MYSQL_EXE) 
  46.     else
  47.         print 'Error:%s has been exist!' %EXE 
  48.  
  49.  
  50. #Get uid and guid permission. 
  51. def permission(file): 
  52.     if os.path.isdir(file): 
  53.         os.chmod(file,256|128|64|32|16|8|4) //设置权限/var/www/xxxx.com 774
  54.         os.chown(file,99,2000) //设置/var/www/xxx.com用户和组
  55.     else
  56.         print "No such file or directory" 
  57.         sys.exit(1
  58.  
  59. #Change domain to domainname 
  60. def Change_Name(filter_name): 
  61.     global ADD_NAME 
  62.     do_list=[] 
  63.     for do_name in filter_name.split('.'): 
  64.         if do_name != 'www'
  65.             if do_name != 'cn'
  66.                 if do_name != 'net'
  67.                     if do_name != 'com'
  68.                         if do_name != 'org'
  69.                             do_list.append(do_name) 
  70.     SIXTY_NAME=''.join(do_list) 
  71.     ADD_NAME=SIXTY_NAME[:9
  72.      
  73.  
  74. class vhost: 
  75.  
  76. #make to /usr/local/nginx/vhost www.xxx.com 
  77.     def domain(self): 
  78.         self.DOMAIN_NAME = raw_input('Please input domain:'
  79.         if len(self.DOMAIN_NAME) < 5
  80.             print 'Domain name can\'t be empty or illegal' 
  81.             sys.exit(1
  82.         else
  83.             for ARG in open(VHOST_TEMP).readlines(): 
  84.                 RE_WWW  = ARG.replace(DIRECTORY,DIRECTORY+os.sep+self.DOMAIN_NAME)  
  85.                 RE_DOMAIN = RE_WWW.replace('domain',self.DOMAIN_NAME) 
  86.                 LIST.append(RE_DOMAIN) #append to list 
  87.  
  88.             VHOST_CONF=VIRTUAL_HOST+os.sep+self.DOMAIN_NAME #Vhost Path + Domainname 
  89.  
  90.             if not os.path.isfile(VHOST_CONF): 
  91.                 for info in LIST: 
  92.                     open(VHOST_CONF,'a').write(info) #Create a xxx.xxx.xxx vhost configfile . 
  93.             else
  94.                 print 'Error:%s vhost have existed'%self.DOMAIN_NAME 
  95.                 sys.exit(1
  96.  
  97. #Create default:/var/www/www.xxx.com and permssion 
  98.     def directory(self): 
  99.         print "\nPlease input the directory for the domain:"+self.DOMAIN_NAME 
  100.         Default_dir=raw_input('Default directy:%s:'%(DIRECTORY+os.sep+self.DOMAIN_NAME)) 
  101.         if len(Default_dir) == 0
  102.             self.WWW_DIR=DIRECTORY+os.sep+self.DOMAIN_NAME 
  103.             os.makedirs(self.WWW_DIR) 
  104.             permission(self.WWW_DIR) 
  105.         else
  106.             self.WWW_DIR=Default_dir 
  107.             os.makedirs(Default_dir) 
  108.             permission(Default_dir) 
  109. #Create databases and access user 
  110.     def sql(self): 
  111.         Change_Name(self.DOMAIN_NAME) 
  112.         print "\nPlease input the name for the database:" 
  113.         Default_data=raw_input('Default database: %sdb:'%ADD_NAME) 
  114.         if len(Default_data) == 0
  115.             self.DATABASE_NAME='%sdb'%ADD_NAME 
  116.             create_mysql_exe(self.DATABASE_NAME) 
  117.         else
  118.             self.DATABASE_NAME=Default_data 
  119.             create_mysql_exe(self.DATABASE_NAME) 
  120.              
  121. #Create virtaul accout for ftp 
  122.     def ftp(self): 
  123.         global FTP_USER 
  124.         FTP_USER='%s_user_ftp'%ADD_NAME 
  125.         print "\nPlease input the name for the ftp:" 
  126.         RE_FTP_USER=raw_input('Default FTP name:%s:'%FTP_USER) 
  127.         if len(RE_FTP_USER) != 0
  128.             FTP_USER=RE_FTP_USER 
  129.         FTP_UID='2000' \\FTP用户
  130.         FTP_GID='2000' \\FTP组
  131.         FTP_DATA_USE='use pureftpd;' 
  132.         FTP_DIR=self.WWW_DIR 
  133.         FTP_USER_ID_DIR="insert into users set User='%s',Password='%s',Uid=%s,Gid=%s,Dir='%s';"%(FTP_USER,FTP_PASS,FTP_UID,FTP_GID,FTP_DIR) 
  134.         MYSQL_USER_PASS='mysql -u%s -p%s -e "%s"'%(MYSQL_USER,MYSQL_PASS,FTP_DATA_USE+FTP_USER_ID_DIR) 
  135.         FTP_EXE=MYSQL_USER_PASS 
  136.         os.system(FTP_EXE) 
  137.      
  138.     def info(self): 
  139.         if os.system('echo "Mysql_2012"|passwd --stdin mysql') == 0
  140.             print "\nDefault Domain: %s"%self.DOMAIN_NAME 
  141.             print "Default IP address: %s"%IP 
  142.             print "Default www: %s"%self.WWW_DIR 
  143.             print "Default database name: %s"%self.DATABASE_NAME 
  144.             print "Default database user: %s  passwd: %s" %(ADD_NAME+'_user', SQL_PASS) 
  145.             print "Default ftp user: %s     passwd: %s" %(FTP_USER, FTP_PASS) 
  146.             print "Default SSH user: mysql  passwd: Mysql_2012\n" 
  147.             os.system(NGINX) 
  148.  
  149. V=vhost() 
  150. V.domain() 
  151. V.directory() 
  152. V.sql() 
  153. V.ftp() 
  154. V.info() 









本文转自 ibelieveme 51CTO博客,原文链接:http://blog.51cto.com/skyson/990423,如需转载请自行联系原作者
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4月前
|
安全 Linux 网络安全
Web安全-Linux网络协议
Web安全-Linux网络协议
89 4
|
28天前
|
Prometheus 监控 Cloud Native
Prometheus+Grafana监控Linux主机
通过本文的步骤,我们成功地在 Linux 主机上使用 Prometheus 和 Grafana 进行了监控配置。具体包括安装 Prometheus 和 Node Exporter,配置 Grafana 数据源,并导入预设的仪表盘来展示监控数据。通过这种方式,可以轻松实现对 Linux 主机的系统指标监控,帮助及时发现和处理潜在问题。
139 7
|
2月前
|
监控 Oracle 关系型数据库
Linux平台Oracle开机自启动设置
【11月更文挑战第8天】在 Linux 平台设置 Oracle 开机自启动有多种方法,本文以 CentOS 为例,介绍了两种常见方法:使用 `rc.local` 文件(较简单但不推荐用于生产环境)和使用 `systemd` 服务(推荐)。具体步骤包括编写启动脚本、赋予执行权限、配置 `rc.local` 或创建 `systemd` 服务单元文件,并设置开机自启动。通过 `systemd` 方式可以更好地与系统启动过程集成,更规范和可靠。
249 2
|
2月前
|
Oracle Ubuntu 关系型数据库
Linux平台Oracle开机自启动设置
【11月更文挑战第7天】本文介绍了 Linux 系统中服务管理机制,并详细说明了如何在使用 systemd 和 System V 的系统上设置 Oracle 数据库的开机自启动。包括创建服务单元文件、编辑启动脚本、设置开机自启动和启动服务的具体步骤。最后建议重启系统验证设置是否成功。
|
2月前
|
Unix Linux PHP
PHP在Web开发中的平台独立性优势###
本文探讨了PHP的跨平台特性,阐述其作为服务器端脚本语言如何在不同操作系统上无缝运行,以及这一特性为开发者和组织带来的便利性和成本效益。 ###
|
2月前
|
缓存 安全 JavaScript
PHP在Web开发中的平台优势与未来趋势###
【10月更文挑战第21天】 PHP,Hypertext Preprocessor,凭借其灵活性、广泛应用和强大社区支持,已成为Web开发的常青树。本文探讨了PHP的发展历程、核心优势、最佳实践案例及面临的挑战与机遇,揭示其在现代Web开发中不可替代的角色,以及如何适应未来技术趋势,持续引领Web创新。 ###
58 2
|
3月前
|
设计模式 PHP 开发者
PHP在Web开发中的平台优势与未来展望###
【10月更文挑战第17天】 本文探讨了PHP作为服务器端脚本语言在Web开发领域的持久魅力与独特优势,从其易于学习、成本效益高、强大社区支持到灵活的框架生态,展现了PHP为何能在全球网站开发中占据重要地位。同时,文章也展望了PHP在未来技术趋势下,如云计算、微服务架构中的发展潜力,强调持续创新对于保持其竞争力的重要性。 ###
39 2
|
3月前
|
NoSQL Ubuntu Linux
Linux平台安装MongoDB
10月更文挑战第11天
107 5
|
3月前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
132 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
3月前
|
Linux 网络安全
Linux虚拟机与主机和Xshell的连接问题解决
Linux虚拟机与主机和Xshell的连接问题解决
136 1