By marr, Last updated Mar 18, 2010
Plone 是一套以 Zope 為基礎的 CMS 系統。本文件介紹 Plone 系統的安裝與啟動技巧,協助讀者快速建立一個穩健而具擴充彈性的 CMS 系統。
關於 CMS 與 Plone 的基本資訊,可參考 Plone Introduction 文件說明。
安裝 Plone 的過程,需要依序準備好 Python 和 Zope 環境,幸好,藉由自動安裝檔 (installer) 的協助,彈指之間就能搞定 Plone 的安裝。
想要快速安裝 Plone 系統,最具效益的方式,在 Linux 環境是下載 Plone 的 Unified Installer (約 30MB) 來編譯系統,在 Windows 環境是下載 Windows Installer (約 31MB) 來安裝,安裝方法請直接跳到 2.2 Windows 環境的安裝與啟動 內容說明。
以 Linux 環境為例,需要事先具備 gcc (GNU C Compiler) 和 make,最簡化的方式是以一般帳號,例如 marr 使用者登入後,開啟 Shell 操作環境,執行下列的環境檢查與下載動作:
$ gcc --version gcc (GCC) 4.3.2 Copyright (C) 2008 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. $ wget http://launchpad.net/plone/3.3/3.3.5/+download/Plone-3.3.5-UnifiedInstaller.tgz $ tar xvzf Plone-3.3.5-UnifiedInstaller.tgz
把 Unified Installer 解壓縮,檔案解開後的目錄結構如下:
Plone-3.3.5-UnifiedInstaller |-- HISTORY.txt |-- Licenses/ |-- README.txt |-- UPGRADING.txt |-- base_skeleton | |-- bin | | `-- buildout | |-- bootstrap.py | |-- products | | `-- README.txt | |-- src | | `-- README.txt | |-- var | | `-- README.txt | `-- versions.cfg |-- buildout_templates | |-- cluster.cfg | `-- standalone.cfg |-- helper_scripts | |-- adduser.txt | |-- build_libjpeg.sh | |-- build_python.sh | |-- build_readline.sh | |-- build_zlib.sh | |-- checkLibs.sh | |-- checkPython.py | |-- create_instance.py | |-- generateRandomPassword.py | `-- make_plone_user.sh |-- init_scripts | |-- FreeBSD6/ | |-- OS_X/ | |-- README.txt | |-- RedHat-FedoraCore/ | |-- generic/ | `-- ubuntu7/ |-- install.sh |-- packages | |-- PILwoTk-1.1.6.3.tar.gz | |-- Python-2.4.6.tar.bz2 | |-- buildout-cache.tar.bz2 | |-- iniparse-0.3.1.tar.gz | |-- jpegsrc.v6b.tar.bz2 | |-- readline-5.2.tar.bz2 | |-- setuptools-0.6c11.tar.gz | |-- virtualenv-1.3.4.tar.gz | |-- zc.buildout-1.4.2.tar.gz | `-- zlib-1.2.3.tar.bz2 |-- patches/ |-- tests/ `-- version.txt
我們只需要留意 README.txt 和 install.sh 兩個檔案,前者包含軟體說明,後者能啟動安裝的編譯工作。
Note
以 Plone 3.3.5 為例,它搭配的是 Zope 2.10.11 和 Python 2.4.6。
編譯工作由 install.sh 檔案啟動,這份 shell script 檔案可以搭配 standalone 和 zeo 兩種參數,使用 standalone 是比較簡單的方式,完整的指令範例如下:
$ cd Plone-3.3.5-UnifiedInstaller $ ./install.sh standalone
Tip
為什麼執行 install.sh 時,前面要有「./」符號呢? 這是 shell 操作技巧,表示指定執行「現行路徑下」的 install.sh 檔案。
接著,畫面會出現編譯訊息,摘要的範例如下:
Stand-Alone Zope Instance selected Detailed installation log being written to /home/marr/Plone-3.3.5-UnifiedInstaller/install.log zlib installation: no libjpeg installation: no Rootless install method chosen. Will install for use by system user marr Installing Plone 3.3.5 at /home/marr/Plone Compiling and installing local zlib ... Compiling and installing jpeg local libraries ... Skipping readline compile/install Installing Python 2.4.6. This takes a while... Installing PIL Installing setuptools... Installing iniparse configuration parser Installing zc.buildout Unpacking buildout cache to /home/marr/Plone/buildout-cache Compiling .py files in egg cache Generating random password ... Copying buildout skeleton Running buildout Creating directory '/home/marr/Plone/zinstance/parts'. Creating directory '/home/marr/Plone/zinstance/develop-eggs'. Installing zope2. running build_ext creating zope.proxy copying zope/proxy/proxy.h -> zope.proxy building 'AccessControl.cAccessControl' extension creating build creating build/temp.linux-i686-2.4 creating build/temp.linux-i686-2.4/AccessControl
Note
編譯過程的訊息會被記錄在 install.log 檔裡,如果沒發現這個檔案,或是想要額外記錄訊息,可使用 ./install.sh standalone 1> install.log 2>&1 之類的指令,將過程的訊息記錄在 install.log 檔案裡。
編譯所需的時間,以 IBM ThinkPad X61 (2GB RAM) 環境為例,大約耗時三分鐘。
一切順利的話,會新建目錄存放 Plone 系統執行的所有檔案,檔案總共佔 263MB 左右。如果是採一般使用者的權限來編譯,它會在家目錄建立 Plone 新目錄,它的第一層目錄項目如下所示:
Top-level Directory Outline for Plone 3.3.5 Plone Plone 總目錄 |-- Python-2.4/ Python 目錄 |-- Zope-2.10.11-final-py2.4/ Zope 目錄 |-- buildout-cache/ `-- zinstance/ Instance 家目錄 |-- adminPassword.txt 管理員初始密碼檔 |-- bin/ 管理系統的執行檔 |-- buildout.cfg |-- develop-eggs/ |-- fake-eggs/ |-- parts/ Zope 與 Plone 主程式目錄 |-- products/ Plone 2.x 舊式模組的目錄 |-- src/ 自行開發的模組目錄 |-- var/ 物件資料庫與日誌檔 `-- versions.cfg 細項版本資訊
我們將 zinstance 目錄稱為「Instance 家目錄」,這裡存放主要的管理檔案,許多維護工作在此進行。
如果是採管理員 (root) 的權限來編譯,請參考 Plone Advanced Setting 說明。
Note
不要用管理員權限把 Plone 裝在 /root 目錄,這會造成難以啟動等多項困擾。
編譯工作的最後階段,會產生一組 Zope 管理員的帳號密碼,登入管理介面時要輸入這組帳號密碼,除了在螢幕上提示外,也可以事後在 zinstance/adminPassword.txt 檔案裡找到,類似下列內容所示:
Use the account information below to log into the Zope Management Interface The account has full 'Manager' privileges. Username: admin Password: 0rx9uAiJ This account is created when the object database is initialized. If you change the password later, you'll need to use the new password.
Zope 包含一個 HTTP 伺服器,預設在 8080 埠號執行,啟動 Zope 之前,要確認相關埠號未被佔用。
以上述完成安裝的 Linux 環境為例,它是透過 instance 程式來控制系統的啟動及關閉,這程式的位置在 Instance 家目錄的 bin 目錄裡。啟動時要使用 start 參數,執行方式及訊息範例如下:
$ cd ~/Plone/zinstance $ bin/plonectl start instance: . daemon process started, pid=32054
關閉時要使用 stop 參數,執行方式如下:
$ bin/plonectl stop instance: . daemon process stopped
或是使用 status 參數來查詢執行狀態:
$ bin/plonectl status daemon manager not running
Note
Plone 3.2 之後統一使用 plonectl 來管理啟動與關閉,它的功能,和以往 instance 或 startcluster.sh 之類的程式相同。
下載並執行 Plone 的 Windows Installer 檔案,過程中只需要設定兩個選項,就可以完成安裝:
Note
之前裝過 Plone 如果要再裝新的,必須先刪掉舊版並移除 Zope service。
透過 Plone Controller 可以管理 Plone 的啟動及關閉。
也可以透過命令提示字元 (cmd.exe) 來管理 Plone 的啟動、關閉、查詢。
C:\\Plone> bin\\plonectl.exe status instance: program running; pid=-1 C:\\Plone> bin\\plonectl.exe stop instance: Stopping service Zope_-722186511 C:\\Plone> bin\\plonectl.exe start instance: Starting service Zope_-722186511
Windows 的檔案系統同樣有獨立的 Python 目錄,而它的物件資料庫位於 C:\Plone\var\filestorage 之類的目錄。
Note
使用防毒軟體的朋友,例如 Avast 用戶,可能會遇到類似下列的訊息:
C:\Plone\Data\Products\Archetypes\tests\input\word.doc MW97:1TableBroken [Expl] Exploit
這是誤判訊息,請安心繼續安裝使用。如果還不放心,可將訊息關鍵字輸入 google 查詢,比對是否為已知的誤判情況。
Zope 成功啟動,在瀏覽器輸入 http://localhost:8080/ 之類的網址後,新版的 Plone 會出現起始網頁。
如果是舊版的 Plone 畫面,會出現標題為 Zope Quick Start 的網頁。
特別留意到網頁倒數第二個連結項目 -- Zope Management Interface,點選之後會出現登入視窗,提示要輸入管理員帳號和密碼。在上述範例中,管理員的帳號名稱是 admin,輸入密碼後再按「確定」鍵。
如果把 Plone 視為管理內容的前台,那麼 Zope 就是管理系統的後台,這後台的管理介面被稱為 Zope Management Interface,或以縮寫字 ZMI 稱之。在網址尾端加上 /manage 是進入 ZMI 介面的捷徑,像 http://localhost:8080/manage 或 http://your.domain/manage 就是例子。
ZMI 介面分成三部份,第一部份是上方的藍色區塊,第二部份是左方區塊,第三部份佔用較大區塊:
在頁籤下方,可看到「Folder at /」這一行訊息,用來提示使用者所在的位置,「/」代表 Root Folder,也就是上述提到的「根目錄」。
接著,會看到「Select type to add...」的下拉選單,是用來選擇新增 type。剩下的畫面,就是系統裡既有的 type 清單,像 Control Panel、Pluggable Auth Service、Page Template 等,都是 type 名稱的範例。
把游標移到圖示上方停留一秒,可以顯示 type 名稱。
如果既有的 type 清單裡未存在 Plone Site,或是想再建立新的 Plone Site,都可以從「Select type to add...」下拉選單新增它。
填寫 Plone Site 的 ID 名稱,例如使用 MySite 為 ID 名稱,再按 Add Plone Site 鈕。請留意到 ID 名稱不能使用特殊符號或空白。
在 ZMI 的 type 清單裡,會發現剛才新增的 Plone Site,其名稱就是 MySite。
點選 MySite 之後,會顯示它所包含的 type 清單,包括 HTTPCache 等。並留意到它的頁籤項目也略有不同,例如多了 Component 頁籤。
點選 View 頁籤,可以在 ZMI 裡顯示 MySite 的前台畫面。
特別留意到 MySite 前台畫面的左上方,出現 Site Setup 的前台管理項目,點選 Site Setup 可以進行基本的管理工作,操作方式將稍後介紹。
如果管理者密碼是系統隨機產生,登入 ZMI 後的第一件工作,通常就是更改管理者的密碼。
Note
如果已經忘記管理者密碼,導致無法進入 ZMI 介面,請使用 $ bin/plonectl adduser 指令來建立新的管理者帳號密碼。
先點選 Root Folder 的 acl_users 項目,再點選 users 項目。
畫面顯示既有的帳號清單,點選 Password 可以更改密碼。
設定並確認新的密碼後,要按 Update Password 鈕。
密碼更改後,系統再次提示視窗,請輸入新的密碼,系統會出現密碼更改成功訊息。
除了管理員帳號之外,最好也新增一般會員帳號。新增會員帳號的常見方式有兩種,最簡單的方式是由管理員來建立帳號,步驟如下:
Note
帳號名稱的命名規則有預設的條件,如果想要改用電子郵件信箱作為帳號名稱,請參考 http://pypi.python.org/pypi/collective.emaillogin
預設的 Plone Site 外觀設計採三欄式,大致分成五個顯示區塊:
其中的左方區塊與右方區塊,區塊內容可以互換,完全不影響其功能。
想要客製化網站的門面,最簡單的方式是從 Logo 和首頁內容下手,以 MySite 為例,下列是操作步驟:
Tip
上傳成功的新 Logo 圖檔,如果沒有馬上正常顯示在首頁左上方,可以試著把瀏覽器全部關閉再重啟。
至此,首頁文字內容已完成更新。試著點選「Also available in presentation mode...」連結,可以用「簡報模式」展示首頁文字內容。
Zope 與 Plone 的管理或開發方法,可分成「網頁式」和「檔案系統式」兩大類:
網頁式 (Through The Web, TTW)
透過瀏覽器填選表單,就能管理系統,這是初學者容易接受的管理方式。像 ZMI 介面就是網頁式的例子,以 TTW (Through The Web 的英文縮寫) 簡稱之,像 Plone 的 Site Setup 介面,有時以 TTP (Through The Plone 的英文縮寫) 簡稱之。
檔案系統式 (Through The Filesystem, TTF)
這通常是程式員比較喜歡的方式,經常搭配 Shell Programming、Subversion、Unit Testing、egg 等工具。
學習過程中,需要在網頁介面與檔案系統兩者間參照比較,以逐步了解系統的運作原理。下列是更多操作與管理技巧的範例:
登入 Zope 或 Plone 之後,系統會以 coockie 方式記錄使用者的資訊。因此,想要以不同身份或權限來觀察 Plone 畫面效果,最好的方式之一,是以不同版本的瀏覽器登入不同權限的帳號。例如,管理者帳號以 IE 登入,一般會員帳號以 Firefox 登入,再對照兩者有哪些差別。
Note
登入 Plone 後,想要在同一個瀏覽器裡,看到未登入的畫面,還可以使用 annoymousview 擴充模組。
以 Linux 主機為例,可以在不同的埠號 (port number) 上執行 Zope 程式,同時接收 HTTP 服務請求,而每個 Zope 程式又可以建立多個 Plone Site,彼此獨立運作與管理。但,這可以帶來怎樣的效益呢?
想像我們是主機代管服務商 (Hosting Service Provider),透過客製化的管理機制,就可以維護高品質的虛擬主機服務。
ZMI 裡提供一個名為 Control_Panel 的控制台項目,可以查看系統資訊,包括執行時間、軟體版本、環境變數、安裝目錄等資訊,甚至可以用來關閉系統。
像 INSTANCE_HOME、CLIENT_HOME 是幾個最常用到的環境變數,其他的環境變數列表如下:
| ENV VARIABLE | Unix Example | Windows Example |
|---|---|---|
| ZOPE_HOME | Plone/zinstance/parts/zope2 | C:\Plone\zope |
| SOFTWARE_HOME | $ZOPE_HOME/lib/python | $ZOPE_HOME\lib\python |
| INSTANCE_HOME | Plone/zinstance/parts/instance | C:\Plone |
| CLIENT_HOME | Plone/zinstance/var/instance | C:\Plone\var |
用新增方式來建立 type 之外,也可以匯入方式來建立。在 Zope 裡稱匯入為 import,稱匯出為 export。
Zope 附有教學範例檔案,檔名是 Examples.zexp,管理員可以利用 Import 功能,匯入這個 ZEXP 檔案,步驟如下:
在 ZMI 的 type 清單畫面裡,可以看到剛匯入的 Examples 項目,它是一個 folder,點選進入後,可以列出它所包含的 type 清單,例如 FileLibrary、GuestBook、ShoppingCart 等。
點選 View 頁籤,預設會顯示 index_html 項目的執行結果。使用瀏覽器的「上一頁」按鈕,可以回到 type 清單,並反覆測試 Examples 裡各項目的內容。