這篇文章在描述怎麼架設 PttBlog, 最後的編修及版號是: $Id$ 請注意, PttBlog本來主要是設計給 Ptt2 站台使用, 目前正在開發階段, 並未接受嚴密的測試, 可能還缺少很多功能, 以及可能有許多的 bug. 您可以按照下列的步驟安裝好 PttBlog. 1.安裝好下列的東西, 我們並同時列上 FreeBSD ports內的目錄: apache /usr/ports/www/apache13/ perl /usr/ports/lang/perl5.8/ mod_perl /usr/ports/www/mod_perl/ mysql /usr/ports/databases/mysql323-server/ 以及下列的 module Template /usr/ports/www/p5-Template-Toolkit/ Date::Calc /usr/ports/devel/p5-Date-Calc/ DBI /usr/ports/databases/p5-DBI/ DBD::mysql /usr/ports/databases/p5-DBD-mysql/ MD5 /usr/ports/security/p5-MD5/ Mail::Sender /usr/ports/mail/p5-Mail-Sender/ OurNet::FuzzyIndex (還沒有進 ports, 請用 cpan 裝) 2.設定 apache 可以直接透過 mod_perl 來跑 perl script . 在您的 apache.conf (or httpd.conf)中, 應該會有: LoadModule perl_module libexec/apache/libperl.so AddModule mod_perl.c 在中間, 加上這兩行: AddHandler perl-script .pl PerlHandler Apache::Registry 3.設定好 blog 的 web目錄. 裡面至少要有 index.pl, blog.pl, LocalVars.pm (其中 LocalVars.pm 建議用 symbolic link 到 /home/bbs/bin/的那一份) 其中 *.pl 的權限要是可以執行的 (ex: chmod 755 *.pl) 4.設定 apache 指到 blog 的目錄. 並將該目錄開始 ExecCGI的 option. 例如使用 Virtual Host : NameVirtualHost * ServerName blog.ptt2.cc DocumentRoot /home/bbs/blog/web Options ExecCGI 5.將 builddb.pl, BBSFileHeader.pm 拷貝進 ~bbs/bin 您可以嘗試用 perl -c ~bbs/bin/builddb.pl 測試看看能不能過. 若不行的話, 通常是 LocalVars.pm 裡面少東西, 請參考 pttbbs/sample/LocalVars.pm 的 blog 區. 6.參考 pttbbs/sample/pttbbs.conf中, 在您的 pttbbs.conf中加入 BLOGDB_HOST, BLOGDB_USER, BLOGDB_PASSWD, BLOGDB_DB, BLOGDB_PORT, BLOGDB_SOCK 並且重新 compile mbbsd, 在 make 時加入 WITH_BLOG=yes . 然後 install 並且 restart 7.關於 Mysql共須要下面兩個 table (可以直接複製過去跑) CREATE TABLE `comment` ( `brdname` varchar(13) NOT NULL default '', `artid` int(11) NOT NULL default '0', `name` varchar(32) NOT NULL default '', `mail` varchar(64) NOT NULL default '', `content` text NOT NULL, `mtime` int(11) NOT NULL default '0', `hash` varchar(32) NOT NULL default '' ) TYPE=MyISAM; CREATE TABLE `counter` ( `k` char(32) NOT NULL default '', `v` int(11) NOT NULL default '0', `mtime` int(11) NOT NULL default '0', PRIMARY KEY (`k`) ) TYPE=MyISAM; CREATE TABLE `wcounter` ( `k` char(32) NOT NULL default '', `v` int(11) NOT NULL default '0', `mtime` int(11) NOT NULL default '0', PRIMARY KEY (`k`) ) TYPE=MyISAM;