一台运行LAMP环境的服务器,上面有十几个网站,每个网站都分配了单独的虚拟主机和MysqL库。目前网站的数量还在持续增加,每增加一个网站需要做的操作如下:
1)新增一个apache虚拟主机
2)新增一个ftp账号对该网站目录有管理权限
3)新增一个库
由于这些操作具有很高的重复度,所以适合用shell脚本实现。
知识点一:LAMP
LAMP是一个很常见的网站架构,其架构如下图所示:
Apache,默认不支持解析PHP,在架构中PHP作为Apache的一个模块来实现解析PHP,而和MysqL数据库交互的行为是由libPHP5.so来完成的。而PHP和MysqL关联是由PHP里面的MysqL.so模块实现。
搭建好LAMP环境后,需要配置虚拟主机,就是说要想在LAMP环境中运行网站,首先要配置运行这个网站的一些指标,比如域名、网站路径等。如下为一个虚拟主机的参考配置:
Apache,默认不支持解析PHP,在架构中PHP作为Apache的一个模块来实现解析PHP,而和MysqL数据库交互的行为是由libPHP5.so来完成的。而PHP和MysqL关联是由PHP里面的MysqL.so模块实现。
搭建好LAMP环境后,需要配置虚拟主机,就是说要想在LAMP环境中运行网站,首先要配置运行这个网站的一些指标,比如域名、网站路径等。如下为一个虚拟主机的参考配置:
Apache,默认不支持解析PHP,在架构中PHP作为Apache的一个模块来实现解析PHP,而和MysqL数据库交互的行为是由libPHP5.so来完成的。而PHP和MysqL关联是由PHP里面的MysqL.so模块实现。
搭建好LAMP环境后,需要配置虚拟主机,就是说要想在LAMP环境中运行网站,首先要配置运行这个网站的一些指标,比如域名、网站路径等。如下为一个虚拟主机的参考配置:
Apache,默认不支持解析PHP,在架构中PHP作为Apache的一个模块来实现解析PHP,而和MysqL数据库交互的行为是由libPHP5.so来完成的。而PHP和MysqL关联是由PHP里面的MysqL.so模块实现。
搭建好LAMP环境后,需要配置虚拟主机,就是说要想在LAMP环境中运行网站,首先要配置运行这个网站的一些指标,比如域名、网站路径等。如下为一个虚拟主机的参考配置:
<VirtualHost *:80> ServerAdmin webmaster@dummy-host.example.com DocumentRoot "/data/wwwroot/fuxi.com" ServerName fuxi.com ServerAlias www.fuxi.com www.fuxi01.com <Directory /data/wwwroot/fuxi.com> AllowOverride none Require all granted </Directory> </VirtualHost>
说明:DocumentRoot为网站根目录,ServerName为域名,ServerAlias为域名的别名,下方的<Directory></Directory>部分用来配置访问权限。所以,增加网站就是增加这样一段配置。
知识点二:FTP服务
FTP服务,主要用来传输文件。在LAMP的服务器上跑着很多网站,每个网站的代码都应该分开来管理,这就需要针对每个网站创建一个独立的FTP用户来管理本网站的文件。使用FTP上传、下载文件虽然方便,但在安全性上存在一定的风险,如果FTP的用户名、密码泄露,后果不堪设想。另外一个层面,由于网站的文件权限比较复杂,不容易控制,权限给小了会导致访问出错,权限给大了,又存在安全问题。
对于规模不大的网站,站长或者开发人员往往缺乏安全意识,为了便携性所以直接使用FTP来管理网站,其实这不可取,而应该使用专业的代码管理平台(如git)和代码上线部署的工具(如Jenkins)。话虽如此,但是本案例的场景就是使用FTP管理网站,在这里只是提醒一下各位,这并不安全。
而本案例的FTP用户也是虚拟用户,虚拟用户的好处是不用提供系统用户的密码,相对安全性更高。本案例shell脚本中的操作步骤就是参考上面的文档来实现的。
MysqL本身有命令行工具,在shell脚本中,通常使用-e来实现的,以下命令为在MysqL中增加库:
# MysqL -uroot -pyour_passwd -e "create database newdb"
MysqL默认有一个root用户,跟Linux的系统用户root一样,它可以创建库、表以及普通用户等操作,创建普通用户并授权的命令如下:
# MysqL -uroot -pyour_passwd -e "grant all on 'newdb.*' to 'user1'@'10.20.100.%' identified by 'user1_passwd'"
说明:这个all指的是所有权限,包括读、写、删除等全部操作权限。on后面为库和表,用'.'把库和表分隔开,其中*表示所有的表,即该库下的所有表。to后面为用户以及来源的IP地址,@后面为来源IP,可以用%表示通配,比如上例中的10.20.100.%表示10.20.100.1-10.20.100.254全部的IP,当然IP这里也可以直接写%,这样则不限制来源IP。by后面那个字符为用户密码。有时候,创建完用户不会立即生效,是因为新增的用户还在缓存里,需要执行一个刷新权限的命令:
# MysqL -uroot -pyour_passwd -e "flush privileges"
本案例参考脚本
#!/bin/bash #本脚本的功能是在LAMP环境中增加站点,包括apache配置、FTP增加用户、MysqL增加库和用户 #作者: #日期: #网站目录 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` #将密码保存到临时文件里,这里的$pro为用户自定义的项目名字 echo "$pro $MysqL_p" >/tmp/$pro.txt #这里使用嵌入文档的形式(需顶格),将创建用户并授权的命令传递给MysqL $MysqLc <> $ftpuserfile echo "$ftp_p" >> $ftpuserfile #将用户、密码文件转换为密码db文件 db_load -T -t hash -f $ftpuserfile /etc/vsftpd/vsftpd_login.db cd $ftpudir #这里的aaa是一个文件,是之前的一个项目,可以作为配置模板 cp aaa $pro #把里面的aaa改为新的项目名字 sed -i "s/aaa/$pro/" $pro #重启vsftpd服务 /etc/init.d/vsftpd restart } #定义增加apache虚拟主机的函数 config_httpd() { #增加网站根目录,和域名保持一致,这里的$dom为用户自定义的域名 mkdir $webdir/$dom #将网站根目录属主和属组设置为ftp用户 chown vsftpd:vsftpd $webdir/$dom #用嵌入文档(需顶格),把虚拟主机配置写入到配置文件里 cat >> $httpd_config_f < DocumentRoot $webdir/$dom ServerName $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
# sh 14.sh input the project name: test123 input the domain: www.test123.com
这样,Pro的值就是test123,而dom的值是www.test123.com。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。