使用 Multi-sites

技術快速建置多 Drupal 網站


Created by 凍仁翔 / @chusiang

歡迎來到 Drupal 小聚


drupal logo
        ... drupalla logo


(聽過 Multi-site 的請舉手!)

前言


Drupal 是近幾年來火速竄紅的內容管理系統 (CMS),其整體架構、概念與 Linux 有著非常高的相似,擁有獨立核心及大量模組的 Drupal 幾乎可以解決一般架站的需求。


隨著網站們的成長,其模組的使用量也會隨之增長,造成維護上不易;這時就可以使用 multi-sites 技術來快速建置多網站,降低維護成本。


本次會題到些基本的系統及網路觀念,融會貫通後不管是在 Linux 上還是 Windows 上都可以輕鬆駕馭。

1. 為什麼要使用 Multi-site?

1.1. 優點


  • 易於維護。

  • 共用核心 (Drupal core)、模組 (Module)、怖景主題(Themes)。

  • 若搭配 Drush 可大大加分。

1.2. 缺點


2. 什麼是 Multi-site?

2013-06-30-typle-of-multisite-d7.png

  • 多個 Drupal Core   X
  • 共用 Drupal Core   O
  • 共用 Modules, Themes   O
  • 獨立的 sites (網站目錄)   O

  1. 使用個 Database 實作。
    - 適合空間受限者,效能較佳,易於帳號整合。
    - d7db.

  2. 2013-06-30-multisite.jpg 使用個 Database 實作。 ★★★★★
    - 適合大型網站,效能略差,但易於 上手 切割、移轉。
    - s1db, s2db, s3db ......


  3. Reference
    - Multisite - Sharing the same code base | drupal.org

2.1. 何為多個 Drupal Core?

在 DocumentRoot 底下有多個 Drupal,這不是 Multi-site


site1 - http://pig.tw/d7_s1/
site2 - http://pig.tw/d7_s2/
site3 - http://pig.tw/d7_s3/

2.1.1. on Linux


DocumentRoot


[ jonny@wheezy ~ ]$ ls /var/www
d7_s1  d7_s2  d7_s3  index.html
							


Sites


[ jonny@wheezy ~ ]$ ls /var/www/d7_s1/sites/
all  default example.sites.php  README.txt
							

[ jonny@wheezy ~ ]$ ls /var/www/d7_s2/sites/
all  default example.sites.php  README.txt
							

[ jonny@wheezy ~ ]$ ls /var/www/d7_s3/sites/
all  default example.sites.php  README.txt
							

2.1.2. on Windows


DocumentRoot
2013-06-30-single-site-w7.png

2.2. 何為共用 Drupal Core?

在 DocumentRoot 底下只有一個 Drupal。


site1 - http://s1.pig.tw/
site2 - http://s2.pig.tw/
site3 - http://s3.pig.tw/

2.2.1. on Linux


DocumentRoot


[ jonny@wheezy ~ ]$ ls /var/www
d7  index.html
							


Sites


[ jonny@wheezy ~ ]$ ls /var/www/drupal7/sites/
all  default example.sites.php  README.txt  s2.pig.tw s3.pig.tw
							

2.2.2. on Windows


Sites
2013-06-30-multi-site-w7.png

2.3. 何為共用 Modules, Themes?

共用 Drupal 時,將會分享 sites/all 目錄給各個網站。


Modules - sites/all/modules
Themes - sites/all/themes

2.3.1. on Linux



[ jonny@wheezy ~ ]$ ls /var/www/drupal7/sites/all/
modules  themes
							

2.3.2. on Windows


2013-06-30-share-all-d7.png

2.4. 共用 Modules, Themes 後如何建立獨立的 Module, Themes?

手動建立獨立的 modules, themes 目錄。


SITE1
sites/default/modules
sites/default/themes
SITE2
sites/s1.pig.tw/modules
sites/s1.pig.tw/themes

2.4.1. on Linux


SITE1


# - modules
[ jonny@wheezy ~ ]$ mkdir /var/www/d7/sites/default/modules

# - themes
[ jonny@wheezy ~ ]$ mkdir /var/www/d7/sites/default/themes
							


SITE2


# - modules
[ jonny@wheezy ~ ]$ mkdir /var/www/d7/sites/s2.pig.tw/modules

# - themes
[ jonny@wheezy ~ ]$ mkdir /var/www/d7/sites/s2.pig.tw/themes
							

2.4.2. on Windows


SITE1 + SITE2 2013-06-30-mkdir-w7.png

3. 如何使用 Multi-site


將多個 Domain Name 指到同一個 Drupal,並設定對應的 Database 及 Virtual host

3.1. Domain Name

網域名稱

3.1.1. 本機 Domain Name 模擬

編寫 hosts 檔案。


on Linux

[ jonny@wheezy ~ ]$ sudo vi /etc/hosts
127.0.0.1	s1.pig.tw
127.0.0.1	s2.pig.tw
127.0.0.1	s3.pig.tw
								


on Windows

[ jonny@win32 ~ ]$ edit C:\Windows\System32\drivers\etc\hosts
127.0.0.1	s1.pig.tw
127.0.0.1	s2.pig.tw
127.0.0.1	s3.pig.tw
							

3.1.2. 使用 DNS 代管服務

毋需自行架設 DNS Server,容易上手,但功能較多限制。


3.1.3. 自行架設 DNS Server

需自行架設 DNS Server 及編寫設定檔,適合系統管理者。


3.1.4. 免費 DNS

若不想花錢申請 DNS,可參考網路上的免費資源。


3.2. Database

資料庫


MySQL, MariaDB, MSSQL ...

3.2.1. Client

phpMyAdmin, Adminer, mysql-client (console)

3.2.2. 新增資料庫 (phpMyAdmin)

2013-06-30-create-db-with-pma.png

3.3. Web Server

Apache, lighttpd, Nginx, IIS ...

  1. Virtual Host (虛擬主機)
    - 讓同一個 IP 網頁伺服器使用多重 Domain Name 的技術。
    - 範例 - http://pastebin.com/LqHB6EJp

  2. Apache 參數介紹:
    - ServerName: 網址。
    - DocumentRoot: 網站根目錄。
    - ErrorLog: 錯誤訊息。
    - CustomLog: 一般訊息。
    - Directory: 自訂個別目錄參數。

3.3.1. Virtual Host of Apache on Linux

SITE1 與 SITE2 間除 highlight 的第 6, 9, 10 三行不同外,皆指向同個 DocumentRoot。 2013-06-30-s1+s2.png

3.3.2. Virtual Host of Apache on Windows

2013-06-30-s1+s2-w7.png

3.3.3. Reference

4. 實作環境

4.1. LAMP


  • Debian 7 (GNU/Linux)
  • Apache 2.2.22
  • MySQL 5.5.31
  • PHP 5.4.4

4.2. AppServ


  • Microsoft Windows 7
  • Apache 2.2.8
  • MySQL 5.0.51
  • PHP 5.2.6

此簡報使用 reveal.js 製作


THE END

http://goo.gl/F83X3