当前位置:Java -> 使用红帽认证的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服务器部署:
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版本或目标操作系统,本文中的操作可能无法成功执行。
一旦您已经设置好Red Hat企业Linux 8并准备好使用Ansible,您需要安装红帽JBoss Web服务器的红帽Ansible认证内容集合1.2。Ansible使用该内容集合来在JBoss Web服务器上执行以下任务:
要安装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服务器、安装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
…
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以查看是否按预期工作:
$ 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角色负责整个设置:
现在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服务器