我們絕大多數的伺服器平台是使用 Linux,但有時會有需求 FreeBSD 平台來進行專案開發。在這篇文章裡,我們將描述最近設置一個在 VMware 裡面執行的 FreeBSD 8.1 測試伺服器。它會涵蓋 Apache、MySQL 及PHP,以準備安裝 Joomla! 1.5。
這裡我們假設你已經在你的虛擬或實際主機上有一份 FreeBSD 8.1 的基本安裝。此外,你當然必須是 root 用戶才能安裝軟體套件和更改設定。現在我們將開始敘述所需要之軟體套件的安裝與設置,才能把 Joomla! 1.5 成功地安裝好。
更新 ports 目錄樹
雖然我們試著只倚靠套件庫來作安裝,但有時還是不得不使用 ports 目錄樹。所以最好有一份最新的 ports 目錄樹。抓取 ports 目錄樹的指令為:
# portsnap fetch
# portsnap extract
它會花一點時間取得並解壓縮整個目路結構,請稍有耐心。一旦完成之後,你應該會在 /usr/ports 看見完整的 ports 目錄樹。
安裝 Apache 2.2.x HTTP 伺服程式
用下面的指令就可以從套件庫來安裝 Apache 2.2
# pkg_add -r apache22
當 Apache 2.2 安裝完後,在 /usr/local/etc/apache22/httpd.conf 內,將不需要用到之模組的 LoadModule 指令行改成註釋。例如:在公開的伺服器上,除了 authz_host 要提供 Order 指令是必須的之外,許多 auth* 模組都可以停用。
在接近檔案 /usr/local/etc/apache22/httpd.conf 的末端,請將下面兩行以及其它你覺得適當的幾行,例如:SSL 的那行,除去註釋。
Include etc/apache22/extra/httpd-mpm.conf
Include etc/apache22/extra/httpd-default.conf
要使 Apache 在系統啟動時自行啟動,輸入這個指令:
# echo apache22_enable=\"YES\" >> /etc/rc.conf
並且啟用 FreeBSD 核心裡的 AcceptFilter 支援:
# echo apache22_http_accept_enable=\"YES\" >> /etc/rc.conf
那解決了系統啟動時載入 accf_http 核心模組。要手動載入模組,則使用
# kldload accf_http
使用 accf_http 是要讓伺服器在初始解析收到的請求之前,不需要做好多次的context switch。你可以應用下面這個指令來檢查是否 accf_http 核心模組已被成功地載入:
# kldstat | grep accf_http
要啟動 Apache HTTP 伺服程式,你可以把系統重新啟動或輸入這個指令:
# service apache22 start
然後你可以將流覽器指向伺服器的 URL,看看是否 Apache 有送出預設的網頁。
安裝 mod_fcgid
為了使執行 PHP 程式較有效率並且需求較少的記憶體,我們將利用 mod_fcgid 模組。它是一個 Apache 模組,用來做 FastCGI 程式執行。因為 FreeBSD 8.1 沒有針對 Apache 2.2 已經編譯好的 mod_fcgid 套件,我們將從 ports 目錄樹來安裝它。
# cd /usr/ports/www/mod_fcgid
# make install
# make clean
請把下面幾行加到 /usr/local/etc/apache22/httpd.conf 檔案裡的其它 LoadModule 指令行之後來啟用 mod_fcgid:
LoadModule fcgid_module libexec/apache22/mod_fcgid.so
<IfModule>
AddHandler fcgid-script .fcgi
</IfModule>
下一次 Apache 啟動時,它會在入 fcgid_module。稍後我們將設定 PHP 成在 fcgid_module 之下執行。
安裝 PHP 5.3.x
目前存在於 FreeBSD 8.1 內的 PHP5 套件版本是 PHP 5.3.2,它已經含有 FastCGI 的支援。此外,PHP 5.3.2 包含有 FPM (FastCGI Process Manager) API, 據稱能夠更有效地管理 PHP 程序。然而,現在我們選擇不啟用 FPM,只安裝已經編譯好的套件。
# pkg_add -r php5
確認安裝好的 PHP CGI 解譯器的確有 FastCGI 支援:
# php-cgi -v
你應該會見到類似下面的文字:
PHP 5.3.2 with Suhosin-Patch (cgi-fcgi) (built: Jun 12 2010 00:11:09)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
請注意在括號內的 cgi-fcgi 字樣,它標示了 FastCGI 支援。
你需要有一份 PHP 設置檔案 php.ini 位於 /usr/local/etc。檔案 php.ini-production 是一份很好的開端。
# cd /usr/local/etc
# cp php.ini-production php.ini
接著請編輯 php.ini 內的時區設定。開啟 /usr/local/etc/php.ini 檔案,找到 [Date] 一節中的 date.timezone 那一行。修改那行來反應你伺服器的時區。例如:
[Date]
date.timezone = "America/New_York"
這使得 Apache 不再抱怨時區設定,並且也似一種安全的做法。
接下來在 php.ini 內設定 session.save_path 為你伺服器上適當的目錄。雖然這在執行 Joomla! 1.5 時並非必要,它避免了在安裝時的一則警告訊息。請編輯 /usr/local/etc/php.ini,在 [Session] 一節裡面,去除 session.save_path 那行的註釋符號,把它設成例如 /var/tmp。
[Session]
session.save_path = "/var/tmp"
現在我們需要讓 PHP 與 mod_fcgid 共同作業。建立一個檔案 fcgid-php.conf 於 /usr/local/etc/apache22/Includes,加入下面幾行:
<IfModule>
# Cause the PHP interpreter to handle files with a .php extension.
AddHandler fcgid-script .php
AddType text/html .php
# Add index.php to the list of files that will be served as directory
# indexes.
DirectoryIndex index.php
# Where to look for the php.ini file?
#DefaultInitEnv PHPRC "/etc/php5/cgi"
# Maximum requests a process handles before it is terminated
MaxRequestsPerProcess 1000
# Maximum number of PHP processes
MaxProcessCount 10
# Number of seconds of idle time before a process is terminated
IPCCommTimeout 240
IdleTimeout 240
# Command used to spawn FCGI server processes
FCGIWrapper /usr/local/bin/php-cgi .php
</IfModule>
建立一個檔案 /usr/local/www/apache22/cgi-bin/phpinfo.php,裡面只放這一行:
<?php phpinfo(); ?>
將你的瀏覽器指向 http://<your server's URL>/cgi-bin/phpinfo.php。如果依竊沒問題,它應會顯示出 PHP 資訊網頁。
還有一些值得加入的額外 PHP 延伸程式。它們有些是某些熱門 Joomla! 1.5 延伸套件所需求的,有些則是即將來到的 Joomla! 1.6 的需求。
# pkg_add -r php5-mysqli
# pkg_add -r php5-mbstring
# pkg_add -r php5-json
# pkg_add -r php5-dom
安裝 MySQL 5.1.x
當前 MySQL 5.5 是在 FreeBSD 8.1 套件庫最新的版本。但是因為它仍是在 beta 階段,我們選擇使用 MySQL 5.1。
# pkg_add -r mysql51-server
這會使得 MySQL 5.1 伺服程式和用戶程式都會被安裝。
MySQL 設置檔案 my.cnf 可以被放在幾個合法的位置,我們將把它放在目錄 /usr/local/etc。你可以從 /usr/local/shared/mysql 複製適當的範本設置檔案來作做為 /usr/local/etc/my.cnf。然後請編輯 /usr/local/etc/my.cnf,把下面幾行加入它們對應的段落:
[client]
default-character-set = utf8
[mysqld]
# Comment this line out if you don't want to use InnoDB as the default engine.
default-storage-engine = innodb
default-character-set = utf8
default-collation = utf8_general_ci
當 InnoDB 被設成預設資料庫引擎時,你必須也將開頭是 innodb_ 的幾行除去註釋。
欲使 MySQL 在系統啟始時啟動,執行
# echo mysql_enable=\"YES\" >> /etc/rc.conf
MySQL 伺服程式也能夠用以下的指令啟動:
# service mysql-server start
別忘了設定 MySQL 的 root 用戶密碼:
# mysqladmin -u root password <password you want>
當然,你要在<password you want> 處,輸入你自己想要的密碼。
安裝 Joomla! 1.5
終於我們來到這篇指南的真正目的。安裝 FreeBSD 的 joomla15 套件包之過程中,將會自動抓取並且安裝任何所依賴的套件包。然而,有一件需要的套件 — pdflib,並不存在於 FreeBSD 的套件庫內。你必須在安裝 joomla15 套件之前,由 portage 中編譯與安裝它。
# cd /usr/ports/print/pdflib
# make install
# make clean
雖然 joomla15 套件包內的 Joomla! 1.5.18 試過時的版本,我們還是將用它來帶進全部所依賴的套件,之後再更新到最新的版本。
# pkg_add -r joomla15
你會看到一長列的套件被安裝進來,那些都是所依賴的套件。
要下載最新版的 Joomla! 1.5,你可照訪 http://www.joomla.org/download.html 來尋找和取得你所用的檔案格式。例如:
# fetch http://joomlacode.org/gf/download/frsrelease/12610/53419/Joomla_1.5.20-Stable-Full_Package.tar.bz2
然後我們把 /usr/local/www/joomla15 目錄中,所有 joomla15 套件安裝進來的檔案移除,用最新的 Joomla! 1.5 版本裡的檔案來取代。
# rm -rf /usr/local/www/joomla15/*
# cd /usr/local/www/joomla15
# tar -jxvf /<your download folder>/Joomla_1.5.20-Stable-Full_Package.tar.bz2
請在最後的指令中,將版本的檔名以你所下載的檔案之名稱來替代。
現在讓我們調整那些檔案的擁有者和權限。
chown -R www:www *
chmod -R o-rwx *
建立你的 Joomla! 1.5 網站
不要用 /usr/local/www/joomla15 目錄,把它複製一份來給你的網站使用。例如:
cd /usr/local/www
cp -Rp joomla15 <your site>
chown www:www <your site>
因為 Aapache HTTP 伺服程式必須知道這個網站,我們將為它設立一個 NameVirtualHost。首先,編輯 /usr/local/etc/apache22/httpd.conf,把以下這行除去註釋
Include etc/apache22/extra/httpd-vhosts.conf
接著開啟 /usr/local/etc/apache22/extra/httpd-vhosts.conf 檔案,把 VirtualHost 範例全部改為註釋。將下面幾行加入檔案內:
#
# <your site>
#
<VirtualHost *:80>
ServerAdmin webmaster@<your domain name>
DocumentRoot "/usr/local/www/<your site>"
ServerName <your domain name>
#ServerAlias www.<your domain name>
ErrorLog "/var/log/<your site>-error_log"
CustomLog "/var/log/<your site>-access_log" common
<Directory "/usr/local/www/<your site>">
Order Allow,Deny
Allow From All
AllowOverride All
Options Indexes FollowSymLinks ExecCGI
</Directory>
</VirtualHost>
請把 <your site> 和 <your domain name> 用你自己的文字取代。
檢驗 Apache HTTP 伺服程式的設置:
# /usr/local/etc/rc.d/apache22 configtest
如有需要,請修正任何設置的問題,然後將 Apache 重新啟動。
# service apache22 restart
在執行 Joomla! 1.5 安裝程式之前,你必須建立一個 MySQL 資料庫,以及一個擁有適當權限來存取該資料庫的使用者。要建立 MySQL 資料庫,請下指令:
# mysqladmin -u root -p create <your db>
你會被詢問 MySQL 的 root 用戶的密碼。
現在讓我們使用 MySQL 用戶程式來建立一個用戶,並授予權限。
# mysql -u root -p
一旦你在用戶程式的命令提示時,鍵入這個指令:
mysql> grant all privileges on <your db>.* to <db user>@localhost identified by '<db password>'
mysql> \q
在那裏 <your db> 是新建立的 MySQL 資料庫,<db user> 是用來取用該資料庫的用戶名,而 <db password> 則是那名用戶的密碼。
額外的設置
此時你已經可以將流覽器指向你的網站的 URL (如 VirtualHost 設置中所設定),接著按照步驟來將你的 Joomla! 1.5 網站安裝好。安裝之後,你可以登入管理者後台做進一步的設置。
你也許要設置 SEO 設定,為你的網站得到搜尋引擎最佳化的 URL。首先,於全站設定中啟用這兩項功能。
Search Engine Friendly URLs
Add suffix to URLs
你網站上的連結之 URL 應該會變為類似 http://<your domain name>/index.php/joomla-license.html。
如果在啟動 Search Engine Friendly URLs 之後,你在追隨網站上的連結時得到不正常的網頁,請確定位於 你網站 Joomla! 1.5 目錄中 configuration.php 檔案內的 $live_site 變數是正確的。例如:
var $live_site = 'http://<your domain name>';
如要移除 URL 中的 index.php 字樣,你則需要啟用最後一項 SEO 設定:
Use Apache mod_rewrite
並且把 htaccess.txt 複製或改名成 .htaccess。如果檔案 .htaccess 裡的下面一行造成錯誤,則請將它註釋掉:
Options +FollowSymLinks
那是因為我們已經在 VirtualHost 設置中有那一行。你的 Apache 設置大概不允許改變 Options,而我們在 VirtualHost 設置裡設定了 FollowSymLinks 選項。你可能需要重新啟動 HTTP 伺服程式才能見到改變的效果。