当前位置:Java -> 使用红帽认证的JWS内容集合自动化部署JBoss Web服务器

使用红帽认证的JWS内容集合自动化部署JBoss Web服务器

根据我们查询的几个来源,超过33%的世界Web服务器正在运行Apache Tomcat,而其他来源显示这个数字高达48%。这些实例中的一些已经被容器化处理多年,但是仍然有许多在传统的虚拟机与Linux的设置下运行。

红帽JBoss Web服务器(JWS)结合了一个Web服务器(Apache HTTPD)、一个Servlet引擎(Apache Tomcat)以及用于负载平衡的模块(mod_jk和mod_cluster)。Ansible是一个自动化引擎,提供了一套工具来管理企业规模的操作。在这篇文章中,我们将展示如何通过使用Ansible来完全自动化部署JBoss Web服务器实例在一个红帽企业Linux 8服务器上,实现1+1等于11的效果。

之前的文章已经涵盖了这个主题,但现在您可以使用自红帽认证的JBoss Web服务器内容集合,这在5.7版本发布以来一直可用。

在本文中,您将通过以下任务自动化JBoss Web服务器部署:

  • 从仓库中检索包含JBoss Web服务器的存档,并在系统上安装这些文件。
  • 配置红帽企业Linux操作系统,创建用户、组以及必需的设置文件,以使JBoss Web服务器作为systemd服务启用。
  • 微调JBoss Web服务器的配置,比如将其绑定到适当的接口和端口。
  • 部署一个WEB应用程序并启动systemd服务。
  • 进行健康检查,确保已部署的应用程序可访问。

Ansible完全自动化了所有这些操作,因此不需要手动步骤。

准备目标环境

在开始自动化之前,您需要指定目标环境。在这种情况下,您将使用Red Hat企业Linux 8与Python 3.6。您将在Ansible控制节点(执行Ansible的地方)和Ansible目标(被配置的系统)上使用此设置。

在控制节点上,确认以下要求:

$ cat /etc/redhat-release

Red Hat Enterprise Linux release 8.7 (Ootpa)

$ ansible --version
ansible [core 2.13.3]
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.9/site-packages/ansible
  ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible
  python version = 3.9.13 (main, Nov  9 2022, 13:16:24) [GCC 8.5.0 20210514 (Red Hat 8.5.0-15)]
  jinja version = 3.1.2
  libyaml = True


注意:如果使用不同的Python版本或目标操作系统,本文中的操作可能无法成功执行。

安装红帽Ansible认证内容集合

一旦您已经设置好Red Hat企业Linux 8并准备好使用Ansible,您需要安装红帽JBoss Web服务器的红帽Ansible认证内容集合1.2。Ansible使用该内容集合来在JBoss Web服务器上执行以下任务:

  1. 确保安装了所需的系统依赖项(例如,解压缩)。
  2. 安装Java(如果缺失并且被请求)。
  3. 安装Web服务器二进制文件并将软件集成到系统中(设置用户、组等)。
  4. 部署配置文件。
  5. 启动并启用JBoss Web服务器作为systemd服务。

要安装JBoss Web服务器的认证内容集合,您需要配置Ansible以使用红帽自动化中心作为Galaxy服务器。遵循自动化中心上的说明获取您的令牌,并更新您的项目目录中的ansible.cfg配置文件。使用从自动化中心获取的令牌更新字段:

[galaxy]
server_list = automation_hub, galaxy

[galaxy_server.galaxy]
url=https://galaxy.ansible.com/

[galaxy_server.automation_hub]
url=https://cloud.redhat.com/api/automation-hub/api/galaxy/
auth_url=https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token

token=<your-token>


安装认证内容集合:

$ ansible-galaxy collection install redhat.jws
Starting galaxy collection install process
Process install dependency map
Starting collection install process
Downloading https://console.redhat.com/api/automation-hub/v3/plugin/ansible/content/published/collections/artifacts/redhat-jws-1.2.2.tar.gz to /root/.ansible/tmp/ansible-local-475cum49011/tmptmiuep63/redhat-jws-1.2.2-299_snr4
Installing 'redhat.jws:1.2.2' to '/root/.ansible/collections/ansible_collections/redhat/jws'
Downloading https://console.redhat.com/api/automation-hub/v3/plugin/ansible/content/published/collections/artifacts/redhat-redhat_csp_download-1.2.2.tar.gz to /root/.ansible/tmp/ansible-local-475cum49011/tmptmiuep63/redhat-redhat_csp_download-1.2.2-tb4zjzut
redhat.jws:1.2.2 was installed successfully
Installing 'redhat.redhat_csp_download:1.2.2' to '/root/.ansible/collections/ansible_collections/redhat/redhat_csp_download'
redhat.redhat_csp_download:1.2.2 was installed successfully


Ansible Galaxy获取并下载了集合的依赖项。这些依赖项包括redhat_csp_download集合,帮助简化了从红帽客户门户网站或指定的本地或远程位置检索包含JBoss Web服务器存档的过程。关于这一步骤的更多信息,请参考红帽官方文档

安装红帽JBoss Web服务器

本节中的配置步骤包括从红帽客户门户网站下载JBoss Web服务器、安装Java以及将JBoss Web服务器作为systemd服务启用。

下载存档

首先,您需要从红帽客户门户网站下载JBoss Web服务器的存档。 默认情况下,该集合期望存档位于Ansible项目的根文件夹中。唯一剩下的要求是在playbooks中指定所使用的JBoss Web服务器版本(5.7)。基于这个信息,该集合确定存档的完整路径和完整名称。

因此,更新jws-article.yml playbook中的jws_version值:

---
- name: "Red Hat JBoss Web Server installation and configuration"
  hosts: all
  vars:
    jws_setup: True
    jws_version: 5.7.0
    jws_home: /opt/jws-5.7/tomcat
  …


安装Java

JBoss Web服务器是一个基于Java的服务器,因此目标系统必须安装Java虚拟机(JVM)。虽然Ansible原语可以本地执行此类任务,但redhat.jws集合也可以处理这项任务,只要定义了jws_java_version变量:

jws_home: /opt/jws-5.7/tomcat
jws_java_version: 1.8.0
…


注意:此功能仅在目标系统的发行版属于红帽家族时才执行。
启用JBoss Web服务器作为系统服务(systemd

目标系统上的JBoss Web服务器应作为系统服务运行。集合也可以处理此任务,只要定义了jws_systemd_enabled变量的值为True:

jws_java_version: 1.8.0
jws_systemd_enabled: True
jws_service_name: jws


注意:此配置仅在安装了systemd并且系统属于红帽家族时才有效。

现在您已经定义了部署JBoss Web服务器所需的所有变量,完成playbook:

...
jws_service_name: jws
  collections:
    - redhat.jws
  roles:
    - role: jws


运行playbook

运行playbook以查看是否按预期工作:

$ ansible-playbook -i inventory jws-article.yml
PLAY [Red Hat JBoss Web Server installation and configuration] *******************************************************************************************************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************************************************************************************************************************************
ok: [localhost]
TASK [redhat.jws.jws : Validating arguments against arg spec 'main'] *************************************************************************************************************************************************************************
ok: [localhost]
TASK [redhat.jws.jws : Set default values] ***************************************************************************************************************************************************************************************************
skipping: [localhost]
TASK [redhat.jws.jws : Set default values (jws)] *********************************************************************************************************************************************************************************************
ok: [localhost]
TASK [redhat.jws.jws : Set jws_home to /opt/jws-5.7/tomcat if not already defined] ***********************************************************************************************************************************************************
skipping: [localhost]
TASK [redhat.jws.jws : Check that jws_home has been defined.] ********************************************************************************************************************************************************************************
ok: [localhost] => {
  "changed": false,
  "msg": "All assertions passed"
}
TASK [redhat.jws.jws : Install required dependencies] ****************************************************************************************************************************************************************************************
included: /root/.ansible/collections/ansible_collections/redhat/jws/roles/jws/tasks/fastpackage.yml for localhost => (item=zip)
included: /root/.ansible/collections/ansible_collections/redhat/jws/roles/jws/tasks/fastpackage.yml for localhost => (item=unzip)
TASK [redhat.jws.jws : Check arguments] ******************************************************************************************************************************************************************************************************
ok: [localhost]
…
TASK [redhat.jws.jws : Remove apps] **********************************************************************************************************************************************************************************************************
changed: [localhost] => (item=ROOT)
ok: [localhost] => (item=examples)
TASK [redhat.jws.jws : Create vault configuration (if enabled)] ******************************************************************************************************************************************************************************
skipping: [localhost]
RUNNING HANDLER [redhat.jws.jws : Reload Systemd] ********************************************************************************************************************************************************************************************
ok: [localhost]
RUNNING HANDLER [redhat.jws.jws : Ensure Jboss Web Server runs under systemd] ****************************************************************************************************************************************************************
included: /root/.ansible/collections/ansible_collections/redhat/jws/roles/jws/tasks/systemd/service.yml for localhost
RUNNING HANDLER [redhat.jws.jws : Check arguments] *******************************************************************************************************************************************************************************************
ok: [localhost]
RUNNING HANDLER [redhat.jws.jws : Enable jws.service] ****************************************************************************************************************************************************************************************
changed: [localhost]
RUNNING HANDLER [redhat.jws.jws : Start jws.service] *****************************************************************************************************************************************************************************************
changed: [localhost]
RUNNING HANDLER [redhat.jws.jws : Restart Jboss Web Server service] **************************************************************************************************************************************************************************
changed: [localhost]
PLAY RECAP ***********************************************************************************************************************************************************************************************************************************
localhost               : ok=64   changed=15   unreachable=0 failed=0 skipped=19   rescued=2 ignored=0


正如您所看到的,这次执行期间发生了很多事情。事实上,redhat.jws角色负责整个设置:

  1. 部署基本配置
  2. 删除未使用的应用程序
  3. 启动Web服务器

部署Web应用程序

现在JBoss Web Server正在运行,修改playbook以便部署Web应用程序:

roles:
- role: jws
tasks:
  - name: " Checks that server is running"
    ansible.builtin.uri:
      url: "http://localhost:8080/"
      status_code: 404
      return_content: no

  - name: "Deploy demo webapp"
    ansible.builtin.get_url:
      url: 'https://people.redhat.com/~rpelisse/info-1.0.war'
      dest: "{{ jws_home }}/webapps/info.war"
    notify:
      - "Restart Jboss Web Server service"


配置使用由redhat.jws集合提供的handler,以确保在应用程序下载后重新启动JBoss Web服务器。

自动化节省时间并减少出错机会

Red Hat Ansible Certified Content Collection尽可能地封装了Red Hat JBoss Web Server部署的复杂性和内部工作。借助该集合,您可以专注于业务用例,例如部署应用程序,而不是建立基础应用服务器。结果是降低了复杂性,价值实现时间更快。自动化流程也是可重复的,并且可用于设置所需数量的系统。

推荐阅读: 在成都写代码是一种什么体验?

本文链接: 使用红帽认证的JWS内容集合自动化部署JBoss Web服务器