我们绝大多数的伺服器平台是使用 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 伺服程式才能见到改变的效果。

FaLang translation system by Faboba