創建 Drupal 多站點安裝

從單個代碼庫和多個數據庫創建多個 Drupal 站點

Drupal 內容管理系統的一個重要特性是,它支持從該框架的單個基礎安裝運行多個網站,這種特性稱爲多站點安裝。這些安裝對需要長期管理和維護多個站點的 Web 管理員特別有用,而且該功能簡化了位於同一個服務器上的多個 Drupal 安裝的管理,使這些安裝都從單一腳本運行。在本文中,我們將學習如何安裝、配置、運行和管理多站點 Drupal。

expand

系統管理員或開發人員有許多理由選擇採用一種多站點配置在同一個服務器上託管多個站點。例如以下這種配置:

  • 使您能夠構建一個高效的開發環境

  • 允許您在公開站點之前暫存並測試它

  • 允許在同一個站點上運行不同軟件

  • 支持跨多個站點共享單個代碼庫

  • 利用共享的託管主機

  • 允許在同一個服務器上運行類似的安全(基於安全套接字層的 HTTP [HTTPS])和標準 (HTTP) 站點

  • 簡化服務器管理

但是,不是所有這些理由都可以通過 Drupal 的多站點特性得到最好的處理。本文將重點介紹一種戰略:如何使 Drupal 內置的多站點支持在單個 Drupal 實例中創建和提供多個站點。

基本考慮因素

使用 Drupal 內容管理系統 (CMS) 創建多站點配置具有多項明顯的優勢,其中一個優勢是它可能最容易設置和維護的配置。另一個優勢是數據重複率得以最小化,因爲 Drupal 僅安裝在服務器的某個位置上。最後,Drupal 擁有豐富的貢獻模塊,可用於完善多站點處理,向佈局的所有站點提供高級功能。結合使用新增的特性和簡化的管理,任何希望設置和管理多站點佈局的人都能從中受益。儘管如此,使用這種配置也有一些缺陷,其中兩個特別值得一提的缺陷是:安全性和共享。

多站點安裝中的站點共享相同的代碼,進而共享相同的文件。結果是,對於任何獲取了服務器中某個站點的文件系統的訪問權的人,他可以訪問用於該多站點安裝上的所有站點的文件。因此,在不同的人管理佈局中的不同站點的情況下,這可能不太安全。如果站點之間的安全性是一個主要問題,或者如果不同人管理不同的站點,那麼 Drupal 的內置多站點功能可能不是最佳的解決方案。相反,可考慮爲每個站點提供自己的不同 Drupal 實例。儘管多站點佈局帶來更容易管理的優勢將會失去,但您的站點可以更有效地避免出現意外情況。

第二個問題(共享)與數據庫訪問密切相關。儘管 Drupal 的多個站點可以共享相同的源代碼,但它們不共享相同的數據庫數據。因此,在默認情況下,無法從其他站點訪問某個站點中的節點、用戶和註釋。此行爲實際上可被視爲一種優勢,但在管理員可能需要所有站點共享信息的情形下,這可能體現爲 Drupal 的多站點特性的設計不足。無論如何,Drupal 內置多站點支持的最佳平衡點是,模塊、主題和上傳的文件可以跨所有站點進行共享。此外,相同或自定義的文件可保留在配置好的不同站點所對應的不同文件夾中。如果共享所有內容非常重要,那麼可以考慮使用多域特性,該特性很容易通過同名模塊實現。

安裝用於多站點的 Drupal

下載 Drupal 壓縮文件後(請參閱 參考資料,以獲取相關鏈接),解壓文件並將得到的文件夾複製到 Web 服務器的文檔根目錄中。採用適當的 FTP 客戶端,此任務很容易完成;在使用服務器的安全 Shell (SSH) 方法的情況下,此任務更容易完成。運行 wget 命令從存儲庫下載該壓縮文件,解壓該文件,生成 Drupal 安裝文件夾。(如果開發環境是本地的,則支持更多的選項。)。將安裝文件夾命名爲 /goodsite

我們將爲此練習創建 3 個不同的站點;因此,需要 3 個不同的數據庫,一個數據庫對應一個站點。如果使用來自服務器的 Cpanel 的 phpMyadmin,那麼此任務很容易完成。接下來安裝框架。但是,在使用 Web 瀏覽器運行安裝程序之前,必須執行兩個任務:

  • 爲 Drupal 提供您要運行的站點的信息。

  • 將特定於站點的配置數據從 Drupal 傳遞到所有站點。

要完成第一個任務,需要爲每個站點創建一個特殊目錄。對於第二個任務,可以找到每個目錄中的一個設置文件。目的是設置一個包含兩個子站點的主安裝。每個子站點共享與核心相同的文件,但每個子站點擁有自己獨立的 URL 和數據庫。要創建站點的 URL 爲:

  • 主站點:http://goodsite.com

  • 子站點 1:http://bettersite.com

  • 子站點 2:http://bestsite.com

安裝第一個主機

將 Drupal 源代碼放在文檔根目錄下並創建 MySQL 數據庫之後,就可以開始安裝第一個站點和主要域。

主要域

主要域名稱是用於訪問主站點的 URL(在本文中是 http://goodsite.com)。主要域主要用於託管基礎 Drupal 安裝。無論此域是否用作您的一個站點,如果任何子站點發生故障,默認情況下會將它們的 URL 都設置爲主要域;因此,在此站點中包含與子站點相關的信息(比如聯繫信息)是一個不錯的想法。

前面已經提到過,對於每個子站點,必須在主要 Drupal 文件夾中創建一個子文件夾。可以想象,Drupal 的多站點安裝中最困難的任務就是簡單的例行任務:讓 Drupal 知道您希望託管哪些站點,並在 /sites 文件夾中爲這些站點創建子文件夾。

Drupal 主要根文件夾中有一個名爲 /sites 的目錄。如果之前管理過 Drupal,您一定知道所有非核心代碼都應放在此文件夾中。在默認的 Drupal 安裝中,/sites 文件夾包含兩個目錄。第一個稱爲 all/,是放置下載的主題和模塊的地方。all/ 目錄是放置在所有站點之間共享的信息的位置。第二個文件夾名爲 default/,是用來保存配置文件的地方,非核心的和自定義的主題和模塊也存放在這裏。Drupal 通常在 default/ 目錄中搜索站點配置信息,無論它是否被要求這麼做。但是,請注意,這些僅適用於一般的單主機站點,不一定適用於多站點安裝。

創建子文件夾和文件

構建多站點 Drupal 的一個重要技巧是,將 all/ 和 default/ 文件夾分開,其他文件夾可在 /sites 中創建,Drupal 會爲它們分配特殊用途。更具體而言,Drupal 假設 /sites 文件夾中的其他所有目錄表示一種主機名或主機名模式。

在 /sites 文件夾下的模式 /goodsite/sites/<sub-site> 中爲所有子站點創建一個子目錄,用您想要的 URL 代替每個子站點文件夾的名稱。在本例中,您擁有以下子站點,如 圖 1 所示。

  • 子站點 1:/goodsite/sites/bettersite

  • 子站點 2:/goodsite/sites/bestsite

圖 1. /sites 文件夾分層結構

該圖顯示了子站點文件夾分層結構

對於每個子站點,需要完成以下步驟:

  1. 將文件 default.settings.php 從 sites/default 複製到每個子站點文件夾,將它重命名爲 settings.php

  2. 使用 CHMOD 將 settings.php 上的權限設置爲 644,如果它不是當前的權限。

  3. 對於 Drupal, Version 6 安裝,在每個子站點下創建一個名爲 files 的文件夾,使用 CHMOD 將權限更改爲 755。

    Drupal 能夠將內容寫入該文件夾中,這些內容通常是上傳的文件、圖像縮略圖、聚合的級聯樣式表 (CSS) 和 JavaScript 文件。這些文件未存儲在數據庫中,而是存儲在文件系統中,所以您必須提供一個可放入這些文件的目錄。

    默認情況下,Drupal 在每個站點的目錄中查找一個名爲 files/ 的子目錄。在默認 Drupal 安裝中,該文件夾位於 sites/default/files/ 中。

  4. 爲每個子站點創建一個名爲 modules 的文件夾。

    這是任何特定於該子站點的模塊所在的文件夾中。所有站點將要使用的全部模塊都應位於 sites/all/modules 文件夾中。

  5. 爲每個子站點創建一個名爲 themes 的文件夾。

    這是任何特定於該子站點的主題所在的地方。所有站點將要使用的全部主題都應位於 sites/all/themes 中。

現在,如果子站點不是由同一個託管公司管理的,請將子站點 URL 指向您的 Web 服務器。如果對各種站點使用不同的主機,則需要更改域名系統 (DNS) 信息(登記和託管公司都能告訴您如何做)。因此,必須將該域 “停放” 在您的主要域(在本例中爲 goodsite.com)之上。在這裏,您有許多備用選項,比較困難的選項涉及到使用所謂的 symlink。但是停放要簡單得多;所以在 Cpanel 中,單擊 Parked Domains。將 bettersite.com 和 bestsite.com 添加在 New Domain Name 中,然後單擊 Add Domain

創建多站點

這裏有多種方式可供使用,但再一次聲明,讓我們採用最容易的方法:直接加載每個站點的數據庫,其中包含主要站點安裝中創建的表。爲此,必須從主要站點安裝創建數據庫表的轉儲,並將它保存在本地。然後,使用 phpMyadmin 上傳此文件,或者使用代碼編輯器打開它。要使用第二個選項,請在 phpMyadmin 中執行以下任務:

  1. 轉到爲子站點創建的數據庫。

  2. 轉到 SQL,然後將所有來自結構化查詢語言 (SQL) 轉儲的代碼粘貼到這裏。

  3. 單擊 Go

此過程會在子站點數據庫中複製主要站點數據庫。

接下來,打開每個子站點的 settings.php 文件,查找以下行:

$db_url = 'mysql://username:password@localhost/databasename';

更改這個數據庫連接字符串,以反映子站點數據庫的參數(用戶名、密碼、主機名和數據庫名)。現在,如果轉到 bettersite.com,那麼您應看到標準的 “Welcome to your new Drupal website” 頁面,如 圖 2 所示。請對其他所有站點重複這些步驟。

圖 2. Drupal 中的新站點

該圖顯示了 Drupal 中的新站點

從子域創建多站點

還有一種快速創建多站點的方法,那就是首先從 Cpanel 將它們設計爲子域。但是,在此方法中,必須在最開始的時候在 /goodsite/sites 下創建每個站點的文件夾,這一次使用以下慣例(參見 圖 3):

  • 子站點 1:/www/goodsite/sites/ bettersite.com

  • 子站點 2:/www/goodsite/sites/ bestsite.com

圖 3. 從子域創建多站點

該圖顯示了用於創建多站點的子域

請注意,子域文件夾必須與子域本身同名。和之前一樣,將 default.settings.php 的一個副本放在每個子域文件夾中,將文件名稱更改爲settings.php,然後執行 CHMOD 將權限更改爲 644。

現在,返回到 Cpanel 並創建兩個子域:

  • bettersite.goodsite.com

  • bestsite.goodsite.com

symlink 是一個文件,其中包含以絕對或相對路徑形式對另一個文件或文件夾的引用,創建它的目的是爲了幫助解析路徑名。使用任何代碼編輯器創建一個名爲 symlink.php 的文件,然後添加以下類似代碼:

<?php
symlink( '/home/Cpanel_User_Name/public_html/', 'sub-domain' );
?>

在本例中,該文件類似於:

<?php
symlink('/home/myuserdirectory/goodsite/','bettersite');
symlink('/home/myuserdirectory/goodsite/','bestsite');
?>

將此 symlink 放在主要站點的主要目錄中,從 URL http://goodsite.com/symlink.php 運行它。如果代碼語法沒有問題,您應該會看到一個空白頁;否則您會看到錯誤消息。調整此文件中的代碼,直到正確顯示該頁面。

配置 .htaccess

現在在任何代碼編輯器中打開 .htaccess 文件。查找以下代碼行:

 # RewriteBase/

刪除井號 (#),保存更改之前添加以下代碼行:

RedirectMatch 301 ^/sub-domain/(.*)$
http://sub-domain.yoursite.com $1

以下是完成後的 .htaccess:

RewriteBase / RedirectMatch 301 ^/bettersite/(.*)$
http://bettersite.goodsite.com/$1 RedirectMatch 301
^/bestsite/(.*)$http://bestsite.goodsite.com/$1

這個重定向使 http://goodsite.com/bettersite 和 http://bettersite.goodsite.com 都可重定向到同一個站點。如果所有操作已正確完成,那麼在訪問子站點 URL http://bettersite.goodsite.com 和 http://bestsite.goodsite.com 時,您應該被定向到安裝頁面。

安裝所有站點後,可以從 Cpanel 利用重定向輕鬆地將站點 http://bettersite.goodsite.com 關聯到 URL http://bettersite.com。

運行 Ubuntu 的本地主機上的多站點

在 Ubuntu 上運行多站點安裝比您目前執行的遠程託管稍微複雜一點。可使用以下各節中列出的方法輕鬆配置多站點安裝。

創建一個新的 hosts 文件夾

首先使用以下代碼在主目錄中創建一個名爲 goodsite 的文件夾:

>> filesystem/home/<your ubuntu login name>/

結果應爲 -> /home/<your ubuntu login name>/goodsite

現在將所有 Drupal 文件複製到此文件夾中。

編輯 hosts 文件

使用以下命令打開一個終端窗口來編輯 hosts 文件:

sudo gedit /etc/hosts'

然後以 127.0.0.1 mysite.com 格式添加任何站點名。對於本示例,可以添加以下代碼行:

127.0.0.1 goodsite.com
127.0.0.1 bettersite.com
127.0.0.1 bestsite.com

編輯可用的站點

現在使用以下命令轉到 sites-available 文件夾,創建一個名爲 goodsite.com 的文件:

cd /etc/apache2/sites-available
sudo cp default goodsite.com
sudo gedit goodsite.com

第一個命令轉到 sites-available 文件夾;第二個命令複製默認文件,並將它重命名爲 goodsite.com。第三個命令打開文件 goodsite.com 進行編輯。將 清單 1 中所示的代碼添加到該文件中。

清單 1. 向 sites-available 文件夾添加新站點的文件
<VirtualHost *:80>
ServerAdmin webmaster@localhost 
ServerName goodsite.com               
DocumentRoot /home/<your ubuntu login name>/goodsite
        
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
</VirtualHost>

保存 goodsite.com,啓用它,然後使用以下命令重新加載 Apache:

sudo a2ensite mysite.com
sudo /etc/init.d/apache2 reload

創建子站點文件夾

在 /sites 文件夾中創建您的子站點 /home/[您的 ubuntu 登錄名]/goodsite/sites/bettersite.com,然後將 settings.php 添加到新文件夾中。如果您已導航到 sites/ 目錄,那麼可以使用以下命令複製 settings.php 文件:

$ cp default/default.settings.php bettersite.com/settings.php 
$ chmod 777 bettersite.com/settings.php

運行子站點安裝

打開瀏覽器,然後鍵入 http://bettersite.com。您應該看到安裝設置頁面。再次將 settings.php 文件設置爲只讀,以避免安全消息,然後運行子站點安裝。

接下來,創建一個站點文件夾,並運行 bestsite.com 以及您的主機配置中提及的任何其他子站點的安裝。

多站點模塊

模塊用於擴展基本 Drupal 安裝的功能,分爲各種類別,從管理性功能到實際的性能增強功能。一些模塊可幫助創建一種多站點或類似配置。有關使用這些模塊的詳細信息,請參閱每個模塊的安裝文檔。

Domain Access 模塊

Domain Access 模塊(請參閱 參考資料,以獲取相關鏈接)支持使用單個代碼庫、共享的用戶數據庫以及具有共享登錄名但具有不同內容的數據庫來創建多站點。這樣一種配置不同於本文中所完成的配置。Domain Access 實際描述爲一組模塊,它們使用安裝在單個共享數據庫中的基本 Drupal 代碼來簡化一組站點的運行。這些模塊支持所有站點共享用戶、內容和設置,只要它們已配置爲以這種方式進行操作。Domain Access 模塊使用 Drupal 的 Node Access System 確定應在多站點佈局中的每個站點上提供哪些內容。不同於其他多域模塊,這些模塊還根據用戶正在查看的活動域來控制用戶訪問,而不是根據用戶所屬的組或站點。

Multisite Manager 模塊

Multisite Manager(請參閱 參考資料,以獲取相關鏈接)是一個貢獻的模塊,允許從基礎 Drupal 站點創建新的 Drupal 站點,無需訪問安裝數據庫。默認情況下,新站點安裝在與基礎安裝相同的數據庫中,但具有不同的前綴。否則,如果當前用戶擁有創建一個數據庫的訪問權限,安裝可以在該數據庫中完成。

結束語

本文探討了如何使用 Drupal 作爲基礎 CMS 來創建多站點配置。您可安裝主要站點,並將子站點放在它的目錄結構中。您可學習如何在一個遠程服務器上使用託管公司所提供的管理工具來運行多站點安裝。您還學習瞭如何在本地機器上創建一個多站點安裝 — 具體來講,是在一個運行 Ubuntu Linux 的計算機上。本文還介紹了兩種 Drupal 模塊,它們可幫助您創建多站點和多域配置。


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