網管人雜誌
本文刊載於 網管人雜誌第 68 期 - 2011 年 9 月 1 日出刊,NetAdmin 網管人雜誌 為一本介紹 Trend Learning 趨勢觀念、Solution Learning 解決方案、Technology Learning 技術應用的雜誌,下列筆記為本站投稿網管人雜誌獲得刊登的文章,網管人雜誌於每月份 1 日出刊您可於各大書店中看到它或透過下列圖示連結至博客來網路書店訂閱它。文章目錄
1、前言2、實作環境
3、簡介 Oddmuse Wiki 引擎
4、確認網頁伺服器支援 Perl 程式語言
5、安裝及設定 Oddmuse Wiki
下載 Oddmuse Wiki 主要設定檔
下載正體中文翻譯檔模組
下載維基語法擴充模組
下載維基版面編排檔
建立 Oddmuse 資料及模組資料夾
修改 Oddmuse 主要設定檔
6、Oddmuse Wiki 架設完成
7、常見問題
常見問題1、未正確載入版面編排 CSS 檔
常見問題2、未正確載入模組檔案
8、結語
1、前言
相信網路使用者或多或少都有使用過維基百科來查詢過相關資料的經驗,而維基百科為何取名為「維基 Wiki」呢? Wiki 這個名詞的由來為 沃德•坎寧安 (Ward Cunningham) 維基概念的發明者,在 1995 年時提出並且實作出第一套 Wiki 引擎,他將 Wiki 定義為允許眾多使用者能夠透過簡單的描述語言來建立和連線的網頁系統,簡言之就是一種在網路上提供開放式環境以及允許多人協同創作的超文字系統,並且在當年 3 月 25日成立了 WikiWikiWeb 將他所開發出來的第一套 Wiki 引擎使用於自行經營的軟體設計模式網站上,而 Wiki 一詞的由來則是由發明者 沃德•坎寧安 依他在夏威夷檀香山時所學會的第一句夏威夷語所命名,也就是 WikiWiki 公車。
圖片來源: 維基百科 - WikiWiki 公車
圖1、WikiWiki 公車
事實上, Wiki 引擎演變至今除了發展出各式各樣的程式語言 例如 ASP、PHP、Perl、Java、Python、Ruby…等實作出各種 Wiki 引擎之外,更已經發展出各式各樣強大功能例如 部落格 (Blog)、內容管理系統 (Content Management System,CMS)、群組軟體 (Collaborative Software 或稱 Groupware)、知識管理 (Knowledge Management)...等各種企業常用的服務,每套 Wiki 引擎也都各自有其擁護社群及廣大的使用者,若讀者有興趣了解目前有哪些程式語言實作出哪些 Wiki 引擎可以參考 沃德•坎寧安 所整理的 Wiki 引擎清單 。
2、實作環境
- 作業系統: CentOS 5.6 (Kernel 2.6.18-238.el5) 32 位元
- 網頁伺服器: Apache httpd-2.2.3-45.el5.centos.1
- 程式語言: Perl, v5.8.8
- Oddmuse Wiki 引擎: wiki.pl v1.943
- 正體中文翻譯檔模組: chinese-utf8.pl v1.12
- 維基語法擴充模組: usemod.pl,v 1.32
- 維基版面編排檔: oddmuse.css
3、Oddmuse Wiki 引擎
本文中所實作的 Wiki 引擎,為採用 Perl 程式語言所撰寫的 Oddmuse Wiki Engine,Oddmuse 是由 Alex Schröder 所開頭發展的 Wiki 引擎名稱,此 Wiki 引擎是以 Clifford Adams 所開發的 UseMod version 0.92 為其基礎,並且添加許多功能特色之後成為一個單一而大型的 Perl Script 檔案所組成,而 Oddmuse Wiki 引擎為採用 GNU (General Public License) 授權方式的開放原始碼自由軟體。
Oddmuse Wiki 引擎的設計理念為希望在單一的 Perl Script 檔案中,即可實作出 Wiki 引擎並且希望將程式碼的內容控制在不超過 4000 行為主,同時也支援多國語言的 UTF-8 編碼類型使得不同語言的使用者可以很容易開始使用它,並且因為其模組化的設計概念因此不管是在使用上或者是設定上皆具備很容易使用及擴充的特性,同時也使得想要為 Oddmuse Wiki 出一份心力的開發者能夠輕鬆投入心力去幫忙產出各種需求的模組。
接著則是對於 Oddmuse Wiki 初學者來說也能很容易進行安裝及設定,例如在 Oddmuse Wiki 官網上安裝項目 (Installation) 文章內容中截錄一段 維基使用者的 IRC 對話 ,此段 IRC 對話中由維基新手 Fourbissime 詢問維基老手 Kensanata 該如何安裝 Oddmuse Wiki,結果在言談之間僅僅不到 5 分鐘的時間維基新手 Fourbissime 就已經將 Oddmuse Wiki 安裝完成了,簡單來說只要您的網頁伺服器支援 Perl 語言,那麼您將可以在 5 ~ 10 分鐘之內 將 Oddmuse Wiki 架設完成,讀者閱讀至此是不是也對 Oddmuse Wiki 如此快速簡單的安裝方式心動了呢?
除此之外 Oddmuse Wiki 引擎尚具有許多優點,例如 Wiki 引擎具備的解析器可以產生符合 HTML 4.01 Transitional 的語法、支援標準萬國碼 (Unicode)...等,回想當時筆者尚在尋找適合的維基引擎做為個人記事用途時只有二項要求,第一點是不需要安裝及設定資料庫,如此一來可以使得整個安裝設定及備份還原的過程更為簡易快速,第二點則是必須支援標準萬國碼,而 Oddmuse Wiki 引擎則剛好二項都符合,這也正是筆者採用它成為個人維基的原因。
4、確認網頁伺服器支援 Perl 程式語言
架設 Oddmuse Wiki 環境只需要二個條件,首先是必須具備網頁伺服器 例如 Apache、Lighttpd、Nginx…等網頁服務,接著則是網頁伺服器必須支援 Perl 程式語言 (CGI Module),那麼應該如何確定您所使用的網頁伺服器支援 Perl 程式語言呢? 以 Apache 網頁伺服器來說必須設定哪個目錄能執行 CGI 並且該 CGI 程式的副檔名為何 (以此次實作來說副檔名應為 .cgi 或 .pl),在預設的情況下當使用 YUM 套件管理工具安裝好 Apache 套件之後其設定檔內便已經配置好相關設定,我們只需要確定 Perl程式語言檔案是否能在 Apache CGI Module 下順利運作即可。
請在 Apache 的預設 CGI 目錄 /var/www/cgi-bin 下新增一個名為 test.pl 的檔案,檔案內容為使用 Perl 程式語言印出 H1 大字型的 Support Perl Language!! 字樣,設定完成後您可開啟瀏覽器輸入您 Apache 伺服器的 IP 位址後面加上 /cgi-bin/test.pl 的路徑,即可查看剛才建立的 test.pl 檔案內容,若是 Apache 的 CGI Module 順利運作時則您會看到瀏覽器畫面顯示為 H1 大字型的字體,若 CGI Module 尚未啟用運作則會看到顯示小字體或變成下載 test.pl 檔案的情況。
# cat /var/www/cgi-bin/test.pl
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<h1>Support Perl Language!!</h1>";
圖2、Apache 的 CGI Module 順利運作,H1 大字型顯示
圖3、Apache 的 CGI Module 未順利運作,小字型顯示
若網頁伺服器 Apache 未正確載入 CGI Module 時,請先查看 Apache 設定檔內容確定 “mod_cgi.so” 這個 CGI Module 是否有被註解掉而導至未載入 CGI Module,再來則是 test.pl 所存放的目錄是否存放於 cgi-bin 資料夾下並允許執行 CGI,下列為筆者採用的 Apache 設定檔內容如下:
# vi /etc/httpd/conf/httpd.conf //修改 Apache 設定檔
LoadModule cgi_module modules/mod_cgi.so //載入 CGI Module
#Virtual Host Setting
<VirtualHost 61.60.59.58:80> //指定 VirtualHost IP
ServerAdmin weithenn@weithenn.org //指定管理者 E-Mail
DocumentRoot "/home/web" //指定 VirtualHost 網站根目錄
ServerName www.weithenn.org //指定 VirtualHost FQDN
ScriptAlias /cgi-bin/ /home/web/cgi-bin/ //指定 cgi-bin 對應目錄
<Directory "/home/web/cgi-bin/"> //指定 cgi-bin 目錄相關權限設定
AllowOverride None
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch //此目錄允許執行 CGI
Order allow,deny
Allow from all
</Directory>
ErrorLog "/var/log/http-error-wiki.log" //指定錯誤 Log 產生路徑及檔名
CustomLog "/var/log/http-access-wiki.log" combined //指定存取 Log 產生路徑及檔名
</VirtualHost>
5、安裝及設定 Oddmuse Wiki
確定 Apache 網頁伺服器支援 Perl 程式語言之後,接著就可以開始安裝及設定 Oddmuse Wiki 引擎的作業了,在開始實作以前先了解一下基本的 Oddmuse Wiki 引擎的四個基本檔案及其功能為何:
- wiki.pl: 主要設定檔,Oddmuse Wiki 引擎的主要設定檔。
- chinese-utf8.pl: 翻譯檔模組,Unicode 標準萬國語系的正體中文翻譯檔。
- usemod.pl: 維基語法擴充模組,使 Oddmuse Wiki 引擎支援 Usemod Markup Extension 語法。
- oddmuse.css: 串聯樣式表,維基網站版面編排美化 CSS 檔案。
下載 Oddmuse Wiki 主要設定檔
請切換至 Apache 網頁伺服器中的 CGI Module 資料夾後下載 Oddmuse Wiki 主要設定檔,並且給予 755 的檔案執行權限,此次實作中網頁伺服器的網站根目錄為 /home/web 而 CGI Module 資料夾則為 /home/web/cgi-bin:
# cd /home/web/cgi-bin //切換到 CGI Module 資料夾
# wget http://www.emacswiki.org/scripts/current //下載新版設定檔
--2011-06-28 15:33:58--
http://www.emacswiki.org/scripts/current
Resolving www.emacswiki.org... 83.137.100.52
Connecting to www.emacswiki.org|83.137.100.52|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 154593 (151K) [text/plain]
Saving to: `current'
100%[=======================>] 154,593 77.3K/s in 2.0s
2011-06-28 15:34:02 (77.3 KB/s) - `current' saved [154593/154593]
# mv current wiki.pl //變更檔案名稱為 wiki.pl
# chmod 755 wiki.pl //變更檔案權限
下載正體中文翻譯檔模組
由於 Oddmuse Wiki 引擎支援 Unicode 標準萬國碼語系,因此每個語系的使用者能夠很方便下載屬於該國家語言的翻譯檔模組,待載入翻譯檔模組後便可以輕鬆轉換 Oddmuse Wiki 內的語言為該使用者習慣的語言,並且由於翻譯檔是採用模組載入的方式使得每個國家的使用者都可以輕易的幫忙翻譯檔內容的更新,例如 筆者曾將當時的正體中文翻譯檔 chinese-utf8.pl v1.10 版本內容中更新部份翻譯內容後,更新為 chinese-utf8.pl v1.11 版本上傳至 Oddmuse Wiki 官網上,目前正體中文翻譯檔案最新版本為 chinese-utf8.pl v1.12,下列實作步驟為下載正體中文翻譯檔案至網站家目錄 /home/web 下:# cd /home/web //切換到網站家目錄
# wget http://www.oddmuse.org/cgi-bin/wiki/download/chinese-utf8.pl //下載最新正體中文翻譯檔
--2011-06-28 15:34:58--
http://www.oddmuse.org/cgi-bin/wiki/download/chinese-utf8.pl
Resolving www.oddmuse.org... 83.137.100.52
Connecting to www.oddmuse.org|83.137.100.52|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: http://www.oddmuse.org/cgi-bin/oddmuse/download/chinese-utf8.pl [following]
--2011-06-28 15:34:58--
http://www.oddmuse.org/cgi-bin/oddmuse/download/chinese-utf8.pl
Reusing existing connection to www.oddmuse.org:80.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/plain]
Saving to: `chinese-utf8.pl'
100%[=======================>] 23,302 36.1K/s in 0.6s
2011-06-28 15:35:01 (36.1 KB/s) - `chinese-utf8.pl' saved [23302]
下載維基語法擴充模組
由於 Oddmuse Wiki 引擎本身是以 UseMod version 0.92 作為基礎並且加上許多功能特色後發展而來,而 UseMod 為一開始維基百科 (Wikipedia) 的早期作業平台,因此許多的 Wiki 引擎內的語法皆是由此演化而來,對於已經習慣 UseMod 語法的 Wiki 使用者而言只要載入此 UseMod 擴充語法模組即可使用習慣的 Wiki 語法,下列操作為下載正體中文翻譯檔案至網站家目錄 /home/web 下:# cd /home/web //切換到網站家目錄
# wget http://www.emacswiki.org/scripts/usemod.pl //下載最新 UseMod 擴充語法模組
--2011-06-28 15:35:36--
http://www.emacswiki.org/scripts/usemod.pl
Resolving www.emacswiki.org... 83.137.100.52
Connecting to www.emacswiki.org|83.137.100.52|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 9,907 (9.7K) [text/x-perl]
Saving to: `usemod.pl'
100%[==========================>] 9,907 32.2K/s in 0.3s
2011-06-28 15:35:38 (32.2 KB/s) - `usemod.pl' saved [9907/9907]
下載維基版面編排檔
串聯樣式表 CSS(Cascading Style Sheets) 為可以更精確控制網頁版面的文字、背景、字型…等版面編排檔案,只要修正一個 CSS 檔案內容便可以同時更新網站中相關的版面外觀及呈現方式,因此將使 HTML 文件檔案容量更小進而加速檔案下載的速度並且適用於各種作業系統平台上,本次實作為採用官方的 CSS 檔案來擔任維基版面編排的任務,當然讀者可以自行修改或製作符合您需求的 CSS 檔案。官網中有提供幾個範例 CSS 檔案讓您下載使用,讀者可以至 EmacsWiki CSS 自行挑選喜愛的 CSS 檔案下載使用。
# cd /home/web //切換到網站家目錄
# wget http://www.emacswiki.org/css/oddmuse.css //下載 CSS 檔案
--2011-06-28 15:35:54--
http://www.emacswiki.org/css/oddmuse.css
Resolving www.emacswiki.org... 83.137.100.52
Connecting to www.emacswiki.org|83.137.100.52|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 4,723 (4.6K) [text/css]
Saving to: `oddmuse.css'
100%[=======================>] 4,723 14.9K/s in 0.3s
2011-06-28 15:35:39 (14.9 KB/s) - `oddmuse.css' saved [4723/4723]
建立 Oddmuse 資料及模組資料夾
當完成下載建立 Oddmuse Wiki 網站的四個基本檔案之後,接著首先建立 Oddmuse 的資料目錄,此資料目錄為屆時存放 Oddmuse Wiki 引擎的頁面資料庫、參觀者記錄檔、內部連結記錄檔、近期更動記錄檔、暫存目錄…等,若未建立專門存放 Oddmuse 資料夾的話則預設將相關資料檔案存放至 /tmp/oddmuse 中。由於 Oddmuse Wiki 引擎擴充功能的方式為載入模組檔案,並且 Oddmuse 模組檔案的撰寫都有經過相當的程序作業因此在使用擴充模組時非常方便,我們只要建立 modules 名稱的資料夾在剛才的 Oddmuse 資料目錄下並且將相關的模組檔案放入其中,那麼 Wiki 引擎便會將相關的模組自動載入並且運作,下列操作便是建立 Oddmuse 資料目錄及 modules 模組存放資料夾 (Oddmuse 資料夾名稱可以隨便取但前提是必須配合屆時的設定檔內容設定即可),並且將剛才下載的二個模組檔案移動至模組資料夾中存放,請注意!! 記得設定 Oddmuse 資料目錄的權限必須要讓您網頁伺服器有權限讀取及執行,否則屆時瀏覽 Wiki 頁面時將得到無法存取 (Permission denied) 網頁的錯誤訊息。
# cd /home/web //切換至網站根目錄
# mkdir data //建立 Oddmuse 資料目錄
# mkdir data/modules //建立 Oddmuse 模組資料夾
# mv chinese-utf8.pl data/modules //移動翻譯檔至模組資料夾
# mv usemod.pl data/modules //移動維基語法擴充模組至模組資料夾
# chown -R apache:apache /home/web/data //變更 Oddmuse 資料目錄的權限
修改 Oddmuse 主要設定檔
將 Oddmuse Wiki 相關資料夾都建立完成且模組檔案移動至模組資料夾之後,接著就是 Wiki 引擎上線前的最後一道程序即修改 Oddmuse 主要設定檔 wiki.pl,在下列的主要設定檔內容中僅先修改主要運作的相關設定內容使 Wiki 引擎順利運作起來,至於更進階的設定則在下一篇進階設定文章中進行說明,下列為主要設定檔中會修改到的參數及意義說明:- $DataDir: 指定 Oddmuse 資料目錄,即剛才建立的 /home/web/data 資料夾。
- $SiteName: 維基網站名稱,使用者瀏覽器左上角所顯示的網站名稱。
- $HttpCharset: 網站編碼語系,瀏覽器屆時所預設採用的語言及字元編碼。
- $StyleSheet: CSS 檔案路徑,指定剛才下載的 CSS 檔案路徑。
- $EditAllowed: 是否允許修改 Wiki,在預設情況下 Wiki 為允許任何人修改網站內容,您可以透過調整此參數使得惡意使用者無法隨便修改建立的頁面及其內容,參數數值採用數字 0 為不允許修改網站內容除非通過密碼驗證、數字1 為不需通過密碼驗證即允許任何人修改頁面內容。
- $AdminPass: 管理者密碼,請輸入此 Wiki 的管理者密碼,屆時必須通過密碼驗證後才能編輯頁面內容。
- $time: 時區,請將時區由世界標準時間 UTC 修改為中原標準時間 CST。
# vi /home/web/cgi-bin/wiki.pl //修改 Wiki 主要設定檔
$DataDir = '/home/web/data' //指定資料目錄
$SiteName = 'Weithenn Wiki'; //網站名稱 (瀏覽器左上角所顯示的名稱)
$HttpCharset = 'UTF-8'; //設定語系
$StyleSheet = '/oddmuse.css'; //指定載入 CSS 檔案路徑
$EditAllowed = 0; //必須通過密碼驗證才能修改網站內容
$AdminPass = '123456'; //填入管理者密碼
$line = $q->span({-class=>'time'}, $time . ' UTC ') . $line if $time; //預設值 (時區)
$line = $q->span({-class=>'time'}, $time . ' CST ') . $line if $time; //修改後
return sprintf('%02d:%02d UTC', $hour, $min); //預設值 (時間)
return sprintf('%02d:%02d CST', $hour+8, $min); //修改後
6、Oddmuse Wiki 架設完成
恭喜您!! Oddmuse Wiki 已經架設完成了 (果然不超過 10 分鐘吧!!),您可以輸入所架設的網頁伺服器 FQDN 例如 http://www.weithenn.org/cgi-bin/wiki.pl 連結到您的 Wiki 首頁,此時 Wiki 頁面的首頁應該為白底、粗體紅字、中文化標題並且能使用 UseMod 語法,其中白底、粗體紅字為剛才下載的維基版面編排檔 (oddmuse.css) 中 CSS 內容所編排美化後的結果,而您在設定檔中設定載入路徑也正確,而中文化標題及使用 UseMod 語法則表示先前下載的二個模組檔案 chinese-utf8.pl 及 usemod.pl 確實被 Oddmuse Wiki 引擎正確載入。
圖4、Oddmuse Wiki 首頁
若您在剛才的 Wiki 主要設定檔中有設定通過密碼驗證才能修改 Wiki 內容的話,您看到的首頁下方會顯示「本頁是唯讀的」 字樣,您可以按下此連結進入管理者密碼驗證視窗,接著在密碼欄位輸入先前在 Wiki 主要設定檔中設定的管理者密碼後,按下「儲存」,當通過密碼驗證後視窗會顯示「你現在是本站的管理者」,此時您切換到任何 Wiki 頁面時在下方會顯示「編輯本頁」表示您可以對 Wiki 頁面新增、修改、刪除、管理…等動作。
圖5、管理者密碼成功驗證視窗
圖6、Wiki 內容編輯模式
7、常見問題
常見問題 1、未正確載入版面編排 CSS 檔
在此次實作中若您發現連結到 Wiki 的首頁時呈現為白底、藍字 (非粗體),那麼表示您的 Oddmuse Wiki 引擎無法將 CSS 檔案載入所導致的狀況,而這樣的情況會不會影響 Wiki 作業? 答案當然是否定的但是您會發現少了 CSS 串聯樣式表進行版面編排及美化的動作後,在閱讀 Wiki 文章內容時會顯得較不美觀及呆板。通常會出現這樣的狀況表示在 Oddmuse Wiki 主要設定檔中指定的 CSS 檔案路徑不正確所導致,在Wiki 主要設定檔中 $StyleSheet 參數為指定 CSS 檔案載入路徑,但是此載入路徑指的是「相對於網站根目錄的路徑而非檔案系統的絕對路徑」,例如此次實作中 CSS 檔案存放於檔案系統絕對路徑 /home/web/oddmuse.css 中,而網站根目錄指定為 /home/web,則 $StyleSheet 參數的路徑應該指定為 /oddmuse.css 而非 /home/web/oddmuse.css,下圖即為 Wiki 引擎無法正確載入 CSS 檔案的 Wiki 首頁。
圖7、Wiki 引擎無法載入 CSS 版面編排檔
常見問題 2、未正確載入模組檔案
在此次實作中若 Wiki 首頁未中文化或者無法使用 UseMod 語法,則表示 Oddmuse Wiki 引擎無法順利載入模組檔案,建議您可以朝下列二個方向進行檢查:
- 請檢查 Oddmuse Wiki 的模組資料夾 modules 是否允許網頁伺服器可以讀取及執行,以本次實作來說該資料夾 /home/web/data/modules 必須設定讓網頁伺服器 Apache,其服務使用者帳號具有讀取及執行的權利,若然請執行指令 chown –R apache:apache /home/web/data 來變更資料夾權限。
- 可以在 Wiki 首頁中點選最下方的【管理 Oddmuse】連結,接著點選【顯示 Wiki 的版本】,在此頁面中您可以查看 Oddmuse Wiki 引擎所載入的模組檔案及相關資訊以進行確認。
圖8、Oddmuse Wiki 引擎所載入的模組檔案及相關資訊
結語
基本上您的 Oddmuse Wiki 引擎已經架設完成可以上線進行服務了,但若您以為 Oddmuse Wiki 引擎的功能僅只於此那就太小看它了,若您在剛才編輯主要設定檔的過程中有稍微查看一下 Oddmuse Wiki 主要設定檔內容,那麼您應該已經發現到裡面仍然有許多參數可以進行修改及設定,在下一篇進階設定文章中筆者將會舉例在主要設定檔中一些實用的設定值,例如 修改置頂文字連結將英文文字連結修改為中文文字連結、在文章內容中如何呼叫圖示以彌補文字溝通上的不足,以及如何啟用及設定 Oddmuse Wiki 引擎的網頁保護機制以阻擋 DOS 攻擊。除此之外因為 Alex Schröder 在設計這套 Wiki 引擎時就已經加入「模組化」的設計概念,所以要擴充 Oddmuse Wiki 的功能只要下載好模組檔案,並且將該模組檔案放置到先前建立的 modules 模組資料夾內,則 Wiki 引擎便會自動載入該模組檔案所撰寫的功能,筆者也將介紹幾個實用的功能模組,例如 圖片擴充模組讓您可以在文章內容中顯示圖片的縮圖而非直接顯示實際圖片大小、目錄內容擴充模組則可以讓文章內容的結構上讓閱讀者一目了然、隱藏頁面擴充模組則可以達成網頁編輯者與網站管理者之間的權限控管,以讓讀者可以藉此了解 Oddmuse Wiki 引擎的強大擴充性。