尽管不再支持 TomCat,如何在 Plesk Onyx 17.8 中部署 .war 文件?

How to deploy .war files in Plesk Onyx 17.8 despite no longer supported TomCat?

Plesk Onyx 17.5 及之前的版本带有 Tomcat 安装,与版本 17.8 相比没有 longer supported。因此,无法再部署和执行 .war 文件。

Plesk 推荐的降级在我看来不是权宜之计,因为生命周期接近尾声和安全问题。我如何 运行 Java 在 Plesk 管理的服务器上编写代码?

1。想法

改用 Tomcat Docker 容器并将您的 .war 文件部署到映射的 Docker 卷中。

2。解决方案

  • 从扩展目录 (Home -> Server Management -> Extensions -> search textbox) 安装 Plesk 扩展 "Docker"。
  • 打开 Docker 扩展程序 (Home -> Server Management -> Docker)。
  • 安装 Tomcat 容器(search textbox -> 'run' drop down box
  • 调整Tomcat容器配置
    • 激活"Automatic start after system reboot"
    • 停用"Automatic port mapping"
    • "Manual mapping" 选择一个 8080 to external 8080 端口配置
  • 加两个"Volume mapping"
    • /usr/local/tomcat/webapps//usr/local/tomcat/webapps/
    • /usr/local/tomcat/logs//usr/local/tomcat/logs/

3。说明

第一个卷映射在主机系统(您的服务器)上提供了一个目录,该目录与 Tomcat 容器中的 webapps 目录同步。将 .war 文件复制到其中会将其部署在 Tomcat 容器中。第二卷映射向您的主机系统提供 Tomcat 容器内部日志文件。

我们遇到了同样的问题:在 Plesk Onyx 17.5 上成功部署后,我们的托管商宣布强制更新到 17.8,以符合 Plesk 的 GDPR 要求。知道这会破坏我们的生产环境,我们设置了一台新机器来测试我们的可能性。我很高兴在这里找到你的想法@ThirstForKnowledge - 这听起来很棒 - 但 Docker 不是我们的选择,因为我们的虚拟化托管环境不可能 运行 和 Docker 主持人。所以我们想到了另一个想法,这可能对其他面临同样困难的人有所帮助。

1。想法

安装 Tomcat 作为独立应用程序并部署 .war 默认情况下使用 Tomcat 管理器。创建一个 cron 脚本检查 Tomcat .zip 存档的更新并使用包管理器安装 JRE,auto-updates 由 Plesk 定期启动。

2.解决方案

  • 使用包管理器安装 JRE
  • 使用他们镜像中的 .zip 安装 Tomcat
  • 通过遵循各种在线教程之一来强化它以抵御攻击
  • 将其设为服务并使其在启动时启动
  • 配置 Tomcat 管理器应用程序(仅限本地主机,向前看三步)
  • Plesk 防火墙阻止 Tomcat 的默认端口
  • 使用加密和自动重定向到 HTTPS 设置 Plesk 订阅
  • 使用 Plesk 功能更改 Apache 配置并将反向代理设置为 Tomcats 端口
  • 检查 运行ning Tomcat 服务器的域和有效的加密
  • 登录Tomcat 管理器
  • 取消部署所有演示应用程序并部署您的 .war
  • 停用管理员访问权限以防止攻击(或适当配置 Fail2Ban)(如果您遵循所有后续步骤可能不需要,但安全就是安全)
  • 更改反向代理配置以指向/指向您的应用程序
  • 创建一个脚本来更新 Tomcat 并通过 Plesk 对其进行 cron

3。说明

用户连接将被引导至您的 Tomcat/Java 应用程序,但加密和所有其他托管内容可以通过 Plesk 界面完成。更新将由 Java 的 Plesk 软件包更新程序和 Tomcat 的 cron 脚本驱动。 Tomcat 管理器使部署和取消部署变得非常容易,该管理器仅在需要时才短时间暴露给 WWW,并安全地传输凭据。 Tomcat 需要手动安装,因为我们的包管理器在他的存储库中只有 Tomcat 7,这可能会推迟到您的安装,所以请先检查一下!

4。未决问题

有没有人有更多经验或发现了这种方法的安全漏洞或漏洞?有没有人有更好的主意来完成这个任务?我们错过了什么吗?我对所有考虑都很满意:)

使用 Plesk "Docker proxy rules" 的缺点是多个域不能共享一个 docker。

在 Plesk 17.8 中,这是最适合我的...

使用 ssh,在端口 8080 上安装 Tomcat。

从 Tomcat webapp 文件夹中删除所有演示应用程序

将我的应用 war 文件复制到 Tomcat webapp 文件夹

登录 Plesk

对于每个具有 Tomcat 网络应用程序的域,单击该域的 "Apache & nginx Settings",向下滚动,在 "Additional nginx directives" 下添加

location /app1 {
    proxy_pass http://127.0.0.1:8080;
}

每个 webapp 名称都是唯一的。与 Let's Encrypt 合作,所以