linux,mysql4,apache2,php4,Zend,eaccelerator,
java1.4,javacc,ant,resin2,weblucene,awstats的集合配置
自己学习linux也有一段时间了,基本上学习都是在工作和建站是边工作边学习的
下面算是做一下总结吧。
设计到的软件的版本:
mysql4.0.26
apache2.0.55
curl-7.14.0
freetype-2.1.1
gd-2.0.33
jpegsrc.v6b
libiconv-1.9.1
libmcrypt-2.5.7
libpng-1.2.8
libxml2-2.6.20
mhash-0.9.2
ZendOptimizer-2.5.10a
zlib-1.2.2
eaccelerator-0.9.3
php4.4.1
j2sdk1.4.0.28
resin2.1.17
weblucene
awstats
先来编译你的mysql
./configure --prefix=/usr/local/mysql --sysconfdir=/etc/ --with-mysqld-ldflags=-all-static --enable-assembler --disable-shared && make && make install
/usr/local/mysql/bin/mysql_install_db
然后为你的mysql增加一个启动用户
/usr/sbin/adduser mysql
更新mysql用户的密码
passwd mysql
编辑你的 /etc/passwd
把mysql用户的登陆shell从 /bin/bash 修改为 /sbin/nologin
修改相应的目录权限:
chown -R mysql /usr/local/mysql
cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf
/usr/local/mysql/bin/mysqld_safe --user=mysql &
在你的/etc/rc.local中加入:
/usr/local/mysql/bin/mysqld_safe --user=mysql &
这样就会随系统自动启动了。
其他可以参考的文章:
www.taoer.com/2005/10/31/mysql-different-port-start/
www.chedong.com/tech/mysql.html
然后来编译apache2:
./configure --prefix=/usr/local/apache2 --enable-log-config --enable-rewrite --enable-vhost-alias --disable-access --disable-include --disable-setenvif --disable-autoindex --disable-negotiation --disable-userdir --enable-deflate --disable-auth --disable-env --disable-asis --disable-cgi --disable-imap --disable-actions --disable-alias && make && make install
注意,如果你要在apache的配置文件里面执行 Order,Allow之类的命令
你需要将上面的 --disable-actions 修改为: --enable-actions
./configure --prefix=/usr/local/apache2 --enable-log-config --enable-rewrite --enable-vhost-alias --disable-access --disable-include --disable-setenvif --disable-autoindex --disable-negotiation --disable-userdir --enable-deflate --disable-auth --disable-env --disable-asis --disable-cgi --disable-imap --enable-actions --disable-alias && make && make install
如果要随系统自动运行,编辑你的/etc/rc.local
加入
/usr/local/apache2/apachectl start &
编译好apache2后先不用去管他,因为待会还要做修改。
现在开始为编译php做准备
因为我需要gd,libxml等包
所以需要先来编译这些dd
需要的包有:
curl-7.14.0
freetype-2.1.10
gd-2.0.33
jpegaltui.v6b
libiconv-1.9.1
libmcrypt-2.5.7
libpng-1.2.8
libxml2-2.6.20
mhash-0.9.2
zlib-1.2.2
curl编译:
./configure --prefix=/usr/local/curl && make && make install
libiconv编译:
./configure --prefix=/usr/local/libiconv && make && make install
libmcrypt编译:
./configure --prefix=/usr/local/libmcrypt && make && make install
libxml2编译:
./configure --prefix=/usr/local/libxml2 && make && make install
zlib编译:
./configure --prefix=/usr/local/zlib && make && make install
mhash编译:
./configure --prefix=/usr/local/mhash && make && make install
下面编译的是和gd2库相关的
libpng编译:
mv ./scripts/makefile.linux ./makefile
make && make install
freetype编译:
./configure --prefix=/usr/local/freetype && make && make install
jpeg编译:
./configure --enable-shared && make && make test && make install
如果编译过程中出现这样的错误:
/usr/bin/install: cannot create regular file `/usr/local/man/man1/cjpeg.1': No such file or directory
make: *** [install] Error 1
执行 mkdir /usr/local/man/man1
然后在重新编译
gd2编译:
./configure --prefix=/usr/local/gd2 --with-png --with-jpeg --with-freetype=/usr/local/freetype && make && make install
[CODE]
php编译:
[CODE]
./configure --prefix=/usr/local/php/ --enable-force-cgi-redirect --enable-mbstring=all --enable-mbregex --enable-mbstr-enc-trans --enable-versioning --enable-trans-sid --enable-ftp --with-mysql=/usr/local/mysql/ --with-apxs2=/usr/local/apache2/bin/apxs --with-soap=yes --with-curl=/usr/local/curl/ --with-zlib-dir=/usr/local/zlib/ --with-mcrypt=/usr/local/libmcrypt/ --with-gd=/usr/local/gd2 --with-jpeg-dir=/usr --with-freetype-dir=/usr/local/freetype --with-ttf --with-png-dir=/usr --with-mhash=/usr/local/mhash/ --with-dom=/usr/local/libxml2 --with-iconv=/usr/local/libiconv && make && make install
你还可以加上
--with-openssl=/usr/local/openssl 这个配置参数,如果你需要openssl支持的话。
编译成功后
cp ./php.ini-dist /usr/local/php/lib/php.ini
cd /usr/local/lib
ln -s /usr/local/php/lib/php.ini php.ini
安装Zend,这个就不用多说了
不过就是php4.4.1的版本需要ZendOptimizer-2.5.10a-linux-glibc21-i386版本的Zend来安装
接下来安装eaccelerator
/usr/local/php/bin/phpize
./configure --enable-eaccelerator=shared --with-php-config=/usr/local/php/bin/php-config
make
make install
编辑你的php.ini,在最后加入
;eaccelerator config
zend_extension="/usr/local/apache2/eaccelerator.so"
eaccelerator.shm_size="64"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="3600"
eaccelerator.shm_only="1"
eaccelerator.compress="0"
eaccelerator.compress_level="0"
eaccelerator.keys="shm_only"
eaccelerator.sessions="shm_only"
eaccelerator.content="shm_only"
具体参数设置可以参考官方的说明
现在开始来安装java环境
先从sun的网站下载java的安装文件
是一个.bin的文件
下载后
chmod 700 j2sdk-1_4_2_08-linux-i586.bin
然后 ./j2sdk-1_4_2_08-linux-i586.bin
比如你要安装在/usr/local下
那么你就
cd /usr/local
然后去执行你的bin文件
看完sun的声明,输入一个yes
就搞定了。
下面就是来配置java的环境了
编辑你的 /etc/profile
在最后面加入如下内容
PS:这里加入的不光是java的环境,还有上面配置好的mysql,apache,php的环境,和下面将要配置的resin,weblucene,javacc,ant等环境。
#STMod
JAVA_HOME=/usr/local/j2sdk1.4.2_08
JAVA_BIN=$JAVA_HOME/bin
ANT_HOME=/usr/local/ant
ANT_BIN=$ANT_HOME/bin
JAVACC_HOME=/usr/local/javacc2.1
JAVACC_BIN=$JAVACC_HOME/bin
CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export CLASSPATH
export ANT_HOME
export JAVACC_HOME
RESIN_HOME=/usr/local/resin
RESIN_BIN=$RESIN_HOME/bin
export RESIN_HOME
export RESIN_BIN
APACHE_BIN=/usr/local/apache2/bin
MYSQL_BIN=/usr/local/mysql/bin
PHP_BIN=/usr/local/php/bin
export APACHE_BIN
export MYSQL_BIN
export PHP_BIN
PATH=$PATH:$JAVA_BIN:$ANT_BIN:$JAVACC_BIN:$RESIN_BIN:$APACHE_BIN:$MYSQL_BIN:$PHP_BIN
这样java的环境就配置好了
退出重新登陆,让你刚才的环境设置生效。
下面安装javacc
下面有部分来自于车东的开源项目 weblucene 里面的 BUILD.txt里面的指导。
从 JavaCC 项目的主页 javacc.dev.java.net/ 下载 JavaCC 2.1 版本
关于如何安装 JavaCC 2.1 请参考
see javacc.dev.java.net/doc/installhelp.html
如何找到旧版本的JavaCC
javacc.dev.java.net/files/documents/17/711/JavaCC2_1.class
命令行模式的安装:
java -cp ./ JavaCC2_1 -c
如果你要将你的javacc安装在/usr/local目录下
执行如下操作
cd /usr/local
cp /root/JavaCC2_1.class ./
这里的/root/JavaCC2_1.class是你的JavaCC2_1.class实际存在的路径
然后执行
java -cp ./ JavaCC2_1 -c
输入一个Y
然后回车一两次就好了。
从 ant.apache.org 下载Ant关于如何安装Ant的细节请参考 ant.apache.org/manual/index.html
PS:ant刚开始我下载了一个 xxxx-src.tar.bz2的文件来安装,但是后面用到weblucene的时候不成功
后来下载了apache-ant-1.6.5-bin.tar.bz2,这里还请注意一下。
设置环境变量
ANT_HOME=/usr/local/ant
PATH=$ANT_HOME/bin:$PATH
如果你要将ant安装在/usr/local下
mv /root/apache-ant-1.6.5 /usr/local/ant
这里的/root/apache-ant-1.6.5是你的解压缩ant后实际存在的路径
现在来安装resin2.1.17
注意这里一定要用 resin2.1.x
用resin3的版本对于weblucene会出现搜索后什么都不显示的问题。
这里安装要先安装openssl,因为我在编译resin的时候总是报错openssl找不到什么的。
所以我就先安装了openssl,然后在resin的configure的参数中指定openssl,如果有其他的解决方法,请告诉我 )
openssl编译:
./config --prefix=/usr/local/openssl && make && make install
编译resin:
如果你要将resin安装在/usr/local下
cd /usr/local
tar zxvf resin-2.1.17.tar.gz
mv resin-2.1.17 resin
cd resin
./configure --prefix=/usr/local/resin --with-apache=/usr/local/apache2 --with-openssl=/usr/local/openssl && make && make install
编译好resin后
做一些准备工作来让resin启动起来
resin的环境在上面配置java的时候已经一起给加上去了。
如果要让resin随系统自动运行
你需要做如下的操作
cp contrib/init.resin /etc/rc.d/
chmod +x /etc/rc.d/init.resin
下面修改你的 init.resin
找到文件中 start)
echo -n “Starting resin: ”
if test -n “$USER”; then
su $USER -c “$EXE -pid $PID start $ARGS”
else
$EXE -pid $PID start $ARGS
fi
在后面加入
sleep 15
然后在/etc/rc.local中加入
/etc/rc.d/init.resin start &
这样就ok了。
现在回过头来看咱们的apache吧,冷落了可爱的apache N年了
apache的httpd.conf的配置很惭愧一直都没有好好的看过,apache的模块也只是一知半解。
我就直接给出一个现成的httpd.conf来让大家参考吧,可以根据自己的需要再对比原来的httpd.conf来定制自己的httpd.conf
点击这里你可以查看或者下载最基本的httpd.conf
resin简单的配置虚拟主机:
咱们上面的resin是将resin作为apache2的一个模块来运行的,所以要先在apache2里面配置虚拟主机
关于apache2的一些配置,你可以 参考这里
然后在resin里面配置虚拟主机
比如要配置一个域名为 do1.domain.net
在resin里面最简单的配置为:
找到 /usr/local/resin/conf/resin.conf 里面的这样的一行
ok这样最基本的虚拟主机的配置就完成了。
/etc/rc.d/init.resin restart &
重启一下配置就好了。
好了,上面的服务器环境基本就配置完了。
我所写的都是一些基本的操作,至少可以让你的服务器工作正常工作。
如果你需要更高级的讲解
请参考我的其他关于技术方面的文章,也可以给我留言或者email我。
另外,推荐一个牛人的网站 车东,我的好多知识都是从这里学来的,包括下面的weblucene和awstats。
现在开始weblucene的配置:
第一步,获取weblucene:
cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/weblucene co weblucene
这样一条cvs命令就好了。
命令执行成功后,你会得到一个weblucene的文件夹
将得到的weblucene文件夹移动到 /usr/local/resin/webapps 目录下
进入到weblucene里面
将你的 build.properties.default 改为 build.properties
编辑这个文件
修改jsdk_jar,javacc.home为你实际的文件和目录
我这里是:
jsdk_jar=/usr/local/resin/lib/jsdk23.jar
javacc.home = /usr/local/javacc2.1/bin
然后执行 ant build
如果出现错误,请仔细检查你上面的环境变量是否配置错误,比如java,classpath,javacc_home等
还有javacc的版本是否是2.1版本的。resin的版本是否是2.1.x的。
ok现在build成功了
仔细看看,会看到两个新的目录,一个是dump,另外一个就是webapp
dump是用来导出导入用的,webapp里面的内容就是搜索要用到的了。
先来看webapp
将里面的内容copy到你的站点目录上吧,
具体怎么建立resin的虚拟主机,上面已经提到了。
ok
配置好resin和weblucene后,重启你的web服务器
在你搜索的目录里面编辑一下index.jsp
内容为:
然后用http方式访问,如果出现了5则表示环境配置成功了,如果没有出现,请回到以上配置resin的步骤仔细的检查,
如果出现的数值不是5,那么就找sun吧 :p
现在建立你测试用的索引文件
现在将dump目录copy到与你的站点同级的目录上。
进入dump目录,编辑你的index.sh
修改这4个地方的为你实际的路径
export JAVA_HOME=/usr/java/jdk
export ANT_HOME=/usr/java/ant
export LIB=/home/weblucene/webapp/WEB-INF/lib
export WEBLUCENE=../webapp/WEB-INF/var
运行index.sh文件。这个时候应该会是顺利的。
PS:在车东2005年1月7日cvs版本的weblucene中,index.sh中使用的是 -a选项增量的来增加索引。
如果你出现了如下错误,
1 [main] ERROR IndexRunner - java.io.IOException: Index locked for write: Lock@/html/domain/search/WEB-INF/var/all/index/write.lock
把索引清空来试试看
如果出现了如下的错误,
0 [main] ERROR IndexRunner - java.io.FileNotFoundException: /html/domain/search/WEB-INF/var/all/index/segments (No such file or directory)
把index.sh 里面最后一行 -a的选项清空来试试看。
现在用浏览器访问你的search.html页
search.your_domain.net/search.html
应该出现了吧,搜索下blog或者博客,如果没有问题,恭喜你,你可以接下来生成自己的数据了。
这里有一点,我用opera或者firefox浏览器浏览默认都是乱码,需要手工更改字符集编码,但是用ie就是正常的。
现在开始建立自己的索引xml文件吧。
这里只是说一下思路
首先从你的数据源(数据库,文件?都可以)取出记录
然后生成xml文件(可以使用PEAR里面的 SQL2XML的类,不过我没有使用)
记住xml文件的编码应该是gb2312的,
需要注意的是:生成的xml文件里面不能有特殊的字符,具体什么是特殊的字符,这个也困扰了我一天多的时间,后来写了一个php的函数解决了这个问题,
函数文件你可以点击这里来下载
这个函数解决了字符串的问题。
用这个函数过滤后,你可以得到英文,数字,简体繁体中文,日文,韩文没有测试,和一些qq里面的特殊符号。
另外,车东提供的escapeForXML和escapeForURL这两个函数也可以解决这个问题。
这两个函数在dump里面的include.php里面(惭愧,直到自己写了一个函数解决了问题才知道车东早已经写好了函数来解决了 ( ).
但是使用车东的这两个函数的前提是你编译php需要加载iconv模块,在上面编译php的时候已经加载了iconv模块。
如果使用车东的escapeForXML函数转换后产生了乱码,请把这行注释掉://$output = iconv(”UTF-8″, “UTF-8//IGNORE”, $output);
现在来定制自己的搜索吧
搜索的首页,也就是默认的search.html
这个就部管咯,自由发挥吧.
然后是定制自己的搜索
在默认的测试搜索中,你提交搜索后,会发现url参数中会有一个是dir=blog
对这个dir=blog就在你的search的网页目录下的WEB-INF/var/下面
也就是说你要建立自己不同的索引,就要在var/下面建立不同的目录
这里为了方便,直接copy blog这个目录,然后再进行修改。
不用担心以前测试的blog的索引会造成影响,使用全部重新生成索引会把以前建立的索引覆盖的。
请将WEB-INF/conf/目录下的log4j.conf.default重命名成 log4j.conf
然后你会在conf的目录下看到blog.conf,对这个就是每个应用的配置文件
对应着上面提到的每个dir=***
也是为了方便,copy blog.conf 为 *.conf
然后在进行修改,这里面每个应用的设置会覆盖默认的weblucene.conf的配置
等于说是继承与覆盖的关系吧。
你可以在wellucene.conf里面定义全局的配置,然后在每个应用的conf里面再定义特殊的配置,就是这里灵活。
ValidEncodings = gb2312, gbk, utf-8, unicode, iso-8859-1 #支持的编码
DefaultEncoding = utf-8 #默认的编码
ValidOrderStyles = docid, score #支持的排序方式
DefaultOrderStyle = docid #默认的排序方式
ValidOutputFormats = html, xml, rss #支持的输出格式
DefaultOutputFormat = html #默认输出的格式
#请注意字段的名称是区分大小写的。
#字段的名称必须与你建立索引的库是匹配的,也就是说在你索引的字段必须在你的生成的XML文件字段里面。
ValidIndexes = FullIndex, AuthorIndex #支持检索的字段的方式
DefaultIndex = FullIndex #默认检索的方式
#请注意字段的名称是区分大小写的。
#字段的名称必须与你建立索引的库是匹配的,也就是说在你索引的字段必须在你的生成的XML文件字段里面。
HighlightFields = Title,Author,Content #搜索关键字高亮显示的字段
#这个你一定要注意,这个是定义你xsl模板文件的位置的
#同样的,你多个应用也可以使用相同的xsl模板,这里也可以定义你自己的模板,只要符合规则
HtmlTemplate = WEB-INF/var/blog/html.xsl #html模板的位置
RssTemplate = WEB-INF/var/blog/rss.xsl #rss模板的位置
DirRealPath = WEB-INF/var/blog/index #索引目录的位置的位置
HighlightTag = b #要搜索的标签名称
SummaryLength = 128 #摘要长度
TotalResultLimit = 1000 #结果总数的限制
PerPageResultLimit = 100 #每页显示结果的数量
ExpiredMinutes = 180 #超时时间
请看你的var/目录下的一些xsl文件
这些都是全局的,然后你在你每个应用目录下的html.xsl里面的头部会看到包含这些文件的命令
也就是说,你也可以在你的应用目录下也建立相同名字的xsl文件,然后修改html.xsl就可以实现不同应用不同配置了。
为了安全着想,请编辑自己的WEB-INF/web.xml这个文件
把里面的
admin
/admin
用
注释掉,因为一般不使用这个管理功能,
注意:
admin
com.chedong.weblucene.WebLuceneAdminServlet
log4j.conf
WEB-INF/conf/log4j.conf
properties.path
WEB-INF/conf
1
这部分请保留,因为里面有log4j的配置,如果把这部分也注释掉,会不能搜索的.
管理功能最主要的:Reload Configurations(重新加载配置)
这个功能会重新加载你的配置和xslt模板,正式服务上线后,关掉admin吧。
如果你要使用安全的管理功能
可以参考车东weblucene里面的BUILD.txt的
部署Web应用
=============
以下是一个包含了认证设置的resin配置:
com.caucho.http.security.XmlAuthenticator
这部分的配置,然后自己做相应的修改。
在这里面遇到最多的问题就是编码和xsl的问题,编码存在于配置文件里面
我生成xml的文件编码是gb2312,然后conf文件的编码指定的是utf-8
另外,如果你的页面显示为空白页,请仔细检查你的xsl文件,错误大多存在于你不合法的xsl文件中。
经过测试,感觉按照相关度排序比按照时间排序的效果好,
所以我在conf文件中把默认的排序方式修改为了 score.
ok,welcene简短的就介绍到这里了,是不是已经有了属于自己的站内搜索了呢?
下面来介绍一下awstats,一个用perl写的开源的网站统计程序.