有没有在 Ubuntu 服务器上运行多个 tomcat 实例的正确方法?
我进行了一些搜索并发现了两个选项:
- 下载压缩的 tomcat 并手动部署。明显的缺点是它不会使用 进行升级
apt-get
。 - 使用一些高级脚本,这对于生产服务器来说是很危险的。
还有其他想法可以干净地运行另一个实例吗?
提前致谢,
亚当
答案1
我在 Ubuntu 14.04.3 LTS 上进行设置。我使用软件包提供的 Tomcat 7 tomcat7
。
它通过提供标准的初始化脚本将 Tomcat 安装为系统服务:
/etc/init.d/tomcat7
和配置文件:
/etc/default/tomcat7
Tomcat 支持使用同一服务器软件运行多个实例。服务器软件位于$CATALINA_HOME
,实例的文件位于$CATALINA_BASE
。它们在 中定义如下/etc/init.d/tomcat7
:
NAME=tomcat7
CATALINA_HOME=/usr/share/$NAME
CATALINA_BASE=/var/lib/$NAME
(警告:在后者中编辑文件时,请注意它有一些指向前者的符号链接。)
该软件包提供了可用于为附加 Tomcat 实例创建目录树的tomcat7-user
实用程序,其中包括用于手动启动和停止实例的脚本的目录。tomcat7-instance-create
bin/
我没有找到支持将此类附加实例转变为系统服务的方法。因此,必须手动完成,例如:
- 为服务名称选择一个值;它将位于
$NAME
新的初始化脚本中。 - 创建一个使用该名称的新用户,该用户将拥有 Tomcat 实例的文件,并以此用户身份运行 Tomcat。它可以是系统用户,其属性应与用户相同
tomcat7
。 - 以该用户身份运行
tomcat7-instance-create
以创建 Tomcat 实例。 - 配置它并安装您想要与其一起运行的 Web 应用程序。使用它
bin/startup.sh
和bin/shutdown.sh
脚本测试它们。 - 将日志移至新的 Tomcat 实例
/var/log/$NAME
并将其符号链接回。logs/
- 编写
/etc/init.d/$NAME
,例如通过复制和修改/etc/init.d/tomcat7
并将任务修改为$NAME
。(如果您不需要复制整个脚本而只需创建指向它的链接,那就更好了。) - 写入
/etc/default/$NAME
以指向您的 Tomcat 实例和用户。 - 用于
upstart-rc.d
安装新服务。
我收集了一些Kodjo-Kuma Djomeda 的详细信息。
答案2
您是否考虑过配置多个 webapps 目录而不是运行多个 tomcat 实例?
当然也存在确实需要多个实例的情况,但是如果要为多个主机分别提供同一个应用程序,您可以通过在 server.xml 中添加多个声明来实现:
<Host name="host1.example.com" appBase="host1"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false" />
<Host name="host2.example.com" appBase="host2"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false" />
现在您可以创建“/var/lib/tomcat6/host1”和“/var/lib/tomcat6/host2”目录并将 WAR 文件部署到它们。
答案3
我做了以下事情:
使用应该创建 tomcat 的目录运行以下命令:
tomcat8-instance-create staging
然后将端口改为唯一的端口(如果您正在运行其他 tomcat8:
nano conf/server.xml
我使用与原始 tomcat8 相同的用户,因此我确保所有文件都归 tomcat8 所有
chown -R tomcat8:tomcat8 *
我将脚本 tomcat8 脚本复制到 /etc/init.d/
cp /etc/init.d/tomcat8 /etc/init.d/tomcat8_staging
并编辑脚本以使其与我的新暂存环境兼容:
nano /etc/init.d/tomcat8_staging
我必须将以下几行编辑为:
NAME=tomcat8_staging
DEFAULT=/etc/default/tomcat8
CATALINA_BASE=/app/tomcat8/staging
CATALINA_HOME=/usr/share/tomcat8
最后我像这样启用了服务器:
systemctl enable tomcat8_staging
当使用以下命令启动时:
service tomcat8_staging start
我收到有关缺少策略文件的错误,因此我在 conf 目录中为其创建了一个链接:
ln -s /etc/tomcat8/policy.d policy.d