Resin开源版(GPL)下载地址:http://caucho.com/products/resin/download/gpl
以最新版4.0.40(date:2014-08-02)为例。部署环境为Ubuntu,其他发行版本类似(我在公司部署过RedHat6)。
下载tar.gz包(http://www.caucho.com/download/resin-4.0.40.tar.gz)或zip包(http://www.caucho.com/download/resin-4.0.40.zip),不要下载deb包,因为我们需要将Resin安装到指定目录(deb包应该也可以,不过我linux没学到家,不会解这个包)。
等待下载的过程中请先确认你的linux环境安装了必要的编译安装工具。Ubuntu下可以通过apt-get命令安装
sudo apt-get install build-essential automake
下载完成之后,解压压缩包得到文件夹。
进入文件夹,执行
./configure --prefix=/home/liufl/temp/resin-install
其中 --prefix参数指定要安装的路径,具体参数使用,可自行百度,linux下源码编译安装软件。
configure命令会告诉我们当前是否满足编译条件。
你可能会见到最后输出以下两行
OPENSSL : No OpenSSL has been found
*** OpenSSL libraries cannot be compiled ***
这两行输出告诉我们当前没有SSL的类库可用,SSL功能将不会编译。如果你需要SSL功能支持的话可以执行
sudo apt-get install libssl-dev
之后再次执行configure操作,输出如下,说明可以正常编译了
Resin Configuration Summary:
RESIN : 4.0.40
home : /home/liufl/temp/resin-install
root : /home/liufl/temp/resin-install
conf : /home/liufl/temp/resin-install/conf
log : /home/liufl/temp/resin-install/log
plugins : common resin_os
init : /etc/init.d/resin
JAVA_HOME : /usr/local/java/jdk_default
JNI : 64-bit
include : -I/usr/local/java/jdk_default/include -I/usr/local/java/jdk_default/include/linux
CFLAGS :
cflags_shlib : -fpic
ld_shlib : gcc
ldflags_shlib : -shared -fPIC -m64
libs_shlib :
epoll() for keepalives
编译安装,执行
make;make install
适用于你的linux环境的resin就编译且安装好了。到安装目录看一下
liufl@liufl-virtual-machine:~/temp/resin-install$ ll
总用量 56
drwxrwxr-x 14 liufl liufl 4096 8月 3 20:00 ./
drwxrwxr-x 6 liufl liufl 4096 8月 3 20:00 ../
drwxrwxr-x 2 liufl liufl 4096 8月 3 20:00 app-inf/
drwxrwxr-x 2 liufl liufl 4096 8月 3 20:00 bin/
drwxrwxr-x 4 liufl liufl 4096 8月 3 20:00 conf/
drwxrwxr-x 5 liufl liufl 4096 8月 3 20:00 doc/
drwxrwxr-x 2 liufl liufl 4096 8月 3 20:00 endorsed/
drwxrwxr-x 2 liufl liufl 4096 8月 3 20:00 lib/
drwxrwxr-x 2 liufl liufl 4096 8月 3 20:00 libexec64/
drwxrwxr-x 2 liufl liufl 4096 8月 3 20:00 log/
drwxrwxr-x 2 liufl liufl 4096 8月 3 20:00 project-jars/
drwxrwxr-x 2 liufl liufl 4096 8月 3 20:00 resin-inf/
drwxrwxr-x 2 liufl liufl 4096 8月 3 20:00 webapp-jars/
drwxrwxr-x 3 liufl liufl 4096 8月 3 20:00 webapps/
其中,我们只要关心下面几个目录就可以了:
bin:这里放置了resin的控制脚本文件,其中只有resin.sh这一个文件需要保留,其他文件用不到,为保证不会误操作,删除之。
conf:resin的配置文件都在这里。其中我们一会需要修改的文件有三个:cluster-default.xml、resin.properties、resin.xml
webapps:默认的webapp加载目录。通常生产环境下我们需要把其中的ROOT项目删除。
其他目录暂时不用关心,需要了解的话请参考官方文档或自行百度谷歌。
至此,resin已可运行,你可以把这个文件夹拷贝到你这台机器的任意目录去运行了。但是因为这是GPL开源版,开发方作了限制:不能运行集群,只能以1watchdog+1app方式执行。即使你像处理Tomcat一样改了不同路径下resin的端口号,你也没办法启动第二个resin实例。因为resin watchdog监听端口冲突,而官方文档中根本没有提及如何修改watchdog端口号(反正我没找到)。但是,这个难不倒广大的劳动人民啊,经过一番百度谷歌,还是找到的设置方法。我们进入conf目录下,首先修改下resin.properties文件,这里我们主要修改resin的各端口号。找到下面一行:
app_servers : 127.0.0.1:6800
这一行指明了我们的webapp控制端口号,修改并增加一行如下
app_servers : 127.0.0.1:2800
watchdog_port : 2600
上述修改,我们将webapp控制端口改到了2800,第二行是新增了watchdog的控制端口(默认为6600),值为2600。注意!此时启动服务器watchdog端口还是6600,我们还需要修改resin.xml才行。resin.properties中的配置需要生效都需要EL表达式的方式在resin.xml中注入才会生效,所以我们直接修改resin.xml对应配置也是可以的。不过为了方便管理,我们还是修改resin.properties吧。
再之后找到行:
app.http : 8080
这个就是对外服务端口号了,一样修改成2080。你可能注意到了,我改过的端口号千位数是相同的(原来的是6800、6600、8080),这样做是为了将不同实例的端口号分别设置在不同的端口号段里了(每一千个端口号分成一个号段),方便记忆。
其他修改:
dev_mode : true #这里生产环境请改成false
resin_doc : true #这里通常可以写成false。服务器文档可以去官网或下载离线看,不必要浪费服务器资源。
web.http : 8080 #这个可以注释掉。因为是开源版,这个配置不会生效。
# jvm_args : -Xmx2048m -XX:MaxPermSize=256m #请根据服务器状态和需要修改。这个配置只会影响到app实例,不会对watchdog实例生效。
port_thread_max : 256
accept_thread_max : 32
accept_thread_min : 4
# keepalive_max : 512
...等请参考文档和机器性能酌情处理。
PS:SSL配置请自行研究吧,我没研究这个,本文就不提了。
修改完resin.properties之后,我们还需要修改resin.xml才能使配置完全生效。
找到这一行:
<server-multi id-prefix="app-" address-list="${app_servers}" port="6800"/>
注意到${app_servers}了?对这就是在resin.properties文件中配置的服务控制端口号。不用在意后面的port="6800",只有找不到app_servers值的时候它才会等效(直接的说就是默认值)。我们把这一行做如下修改:
<server-multi id-prefix="app-" address-list="${app_servers}" port="6800">
<watchdog-port>${watchdog_port?:6600}</watchdog-port>
</server-multi>
恩,这下你知道watchdog端口号是怎么改的了。官方就是没提这句,都写了这功能了,提一下会掉块肉吗?(呃,确实会掉不少肉……pro版会少卖出去多少份啊)
其他配置都可以参考文档修改了,webapp加载配置、jndi注入一类的文档和百度上说的都比较清楚,大家可以自行查找,我这里只给出一份Apache Solr的配置示例,不做具体解释了
<web-app id="/" root-directory="webapps/ROOT"/>
替换为
<web-app id="/solr" root-directory="/webapp/search-solr">
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>/io-drive/search-solr/solr-master</env-entry-value>
</env-entry>
</web-app>
说一下日志的问题,resin是原生支持日志滚动输出的。找到下面一行
<logger name="com.caucho.loader" level="config"/>
之后加入
<stdout-log archive-format="jvm-console-%Y%m%d.log.zip"
path="log/jvm-console.log"
rollover-count="30"
rollover-period="1D"/>
<stderr-log path="log/jvm-console.log"/>
就可以让后台日志每天滚动输出,一天一文件,保留30天,过期自动清除。
另外还有访问日志access-log的设置,默认配置是1周一个文件不压缩不清除,为防止磁盘占用增长过快,需要修改cluster-default.xml文件,将如下行
<access-log path="log/access.log"
format='%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i"'
rollover-period="1W"/>
替换为
<access-log path="log/access.log"
format='%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i"'
archive-format="access-%Y%m%d.log.zip"
rollover-period="1D"
rollover-count="14"/>
至此,resin(GPL)配置修改完成。之后就可以像Tomcat集群一样制作Resin集群了。