一臺運行LAMP環境的服務器,上面有十幾個網站,每一個網站都分配了單獨的虛擬主機和MySQL庫。目前網站的數量還在持續增長,每增長一個網站須要作的操做以下:php
1)新增一個apache虛擬主機mysql
2)新增一個ftp帳號對該網站目錄有管理權限git
3)新增一個庫web
4)新增一個數據庫用戶管理新增庫sql
因爲這些操做具備很高的重複度,因此適合用shell腳本實現。shell
知識點一:LAMP數據庫
LAMP是一個很常見的網站架構,其架構以下圖所示:apache
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中增長用戶
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。