案例十四、爲LAMP的網站增加項目

一臺運行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環境中運行網站,首先要配置運行這個網站的一些指標,比如域名、網站路徑等。如下爲一個虛擬主機的參考配置:

spacer.gifclipboard.png

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。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章