一臺運行LAMP環境的服務器,上面有十幾個網站,每個網站都分配了單獨的虛擬主機和MySQL庫。目前網站的數量還在持續增加,每增加一個網站需要做的操作如下:
1)新增一個apache虛擬主機
2)新增一個ftp賬號對該網站目錄有管理權限
3)新增一個庫
4)新增一個數據庫用戶管理新增庫
由於這些操作具有很高的重複度,所以適合用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 [email protected] 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。