文章目录

  • 简介
  • Managed Domain中的部署
    • 管理展开的部署文件
  • standalone模式下的部署
    • standalone模式下的自动部署
    • Marker Files
  • 受管理的和不受管理的部署
  • 部署覆盖
  • 总结

简介

除了配置文件的修改之外,最重要的就是应用程序的部署了。本文将会讲解如何在wildfly 21中,在Managed Domain和standalone两种模式中如何部署应用程序。

Managed Domain中的部署

在managed domain模式下,服务是放在很多个server中启动的,而server是和server-group相关联的。同一个server-group下的server部署是一致的。

在managed domain模式下,需要先将要部署的应用程序上传到domain controller中,然后通过domain controller将其部署到一个或者多个server-group中。

当然我们在domain controller中的cli环境中只需要一个deploy命令就可以做到上面的两步了。

比如说,我们创建了一个应用程序叫做test-application.war,看下怎么进行部署:

[domain@localhost:9990 /] deploy ~/Desktop/test-application.war
Either --all-server-groups or --server-groups must be specified.[domain@localhost:9990 /] deploy ~/Desktop/test-application.war --all-server-groups
'test-application.war' deployed successfully.

在执行deploy命令的时候,需要指定部署到的server-groups名字,可以部署到所有的server-groups中,也可以指定特定的某些server-groups:

[domain@localhost:9990 /] deploy ~/Desktop/test-application.war --server-groups=main-server-group,another-group
'test-application.war' deployed successfully.

部署完成之后,我们可以通过cli来查看一下部署的状态:

[domain@localhost:9990 /] /server-group=main-server-group/deployment=test-application.war:read-resource(include-runtime)
{"outcome" => "success","result" => {"enabled" => true,"name" => "test-application.war","managed" => true,"runtime-name" => "test-application.war"}
}

deploy可以添加–force参数,用来升级或者替换现有的程序版本:

[domain@localhost:9990 /] deploy ~/Desktop/test-application.war --all-server-groups --force
'test-application.war' deployed successfully.

如果想取消部署,则可以使用undeploy:

[domain@localhost:9990 /] undeploy test-application.war --all-relevant-server-groups
Successfully undeployed test-application.war.[domain@localhost:9990 /] /server-group=main-server-group:read-children-names(child-type=deployment)
{"outcome" => "success","result" => []
}

部署完成之后,会在domain.xml中添加或者修改两个部分的内容,分别是deployments和server-groups:

[...]
<deployments><deployment name="test-application.war"runtime-name="test-application.war"><content sha1="dda9881fa7811b22f1424b4c5acccb13c71202bd"/></deployment>
</deployments>
[...]
<server-groups><server-group name="main-server-group" profile="default">[...]<deployments><deployment name="test-application.war" runtime-name="test-application.war"/></deployments></server-group>
</server-groups>
[...]

管理展开的部署文件

一般来说,如果我们要创建或者修改一个应用程序的部署文件的话,我们可以重新打包这个部署文件,然后重新部署即可。

但是有时候,重新打包整个应用程序可能比较复杂,而我们只是想修改程序中的某一个或者某几个特定的文件。那么wildfly提供了命令行方便的实现这个功能。

要修改打包好的部署文件,首先就是要将部署文件展开。因为部署文件一般都是以ear,war结尾的,展开的目的就是将其进行解压缩,以便我们可以修改包里面的内容。

比如说我们现在已经部署好了一个kitchensink.ear文件,现在可以使用下面的命令将其展开:

[domain@localhost:9990 /] /deployment=kitchensink.ear:explode()

因为上面的展开命令并不是递归执行的,如果ear中包含子的部署系统war文件的话,我们可以使用path来指定展开的子系统:

[domain@localhost:9990 /] /deployment=kitchensink.ear:explode(path=wildfly-kitchensink-ear-web.war)

展开部署文件之后,我们可以使用browse-content来查看文件的列表:

[domain@localhost:9990 /] /deployment=kitchensink.ear:browse-content(archive=false, path=wildfly-kitchensink-ear-web.war)
{"outcome" => "success","result" => [{"path" => "META-INF/","directory" => true},{"path" => "META-INF/MANIFEST.MF","directory" => false,"file-size" => 128L},...
}

如果想查看具体某个文件的描述,则可以使用read-content:

[domain@localhost:9990 /] /deployment=kitchensink.ear:read-content(path=META-INF/MANIFEST.MF)
{"outcome" => "success","result" => {"uuid" => "b373d587-72ee-4b1e-a02a-71fbb0c85d32"},"response-headers" => {"attached-streams" => [{"uuid" => "b373d587-72ee-4b1e-a02a-71fbb0c85d32","mime-type" => "text/plain"}]}
}

注意,read-content只能读取到文件的描述符,并不能获取到文件的内容,如果想要读取文件的内容,可以使用attachment display :

[domain@localhost:9990 /] attachment display --operation=/deployment=kitchensink.ear:read-content(path=META-INF/MANIFEST.MF)
ATTACHMENT d052340a-abb7-4a66-aa24-4eeeb6b256be:
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: mjurc
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_91

使用attachment save命令还可以将部署文件的内容拷贝到指定的文件目录中:

[domain@localhost:9990 /] attachment save --operation=/deployment=kitchensink.ear:read-content(path=META-INF/MANIFEST.MF) --file=/tmp/example
File saved to /tmp/example

我们可以使用add操作来创建一个空的展开部署文件:

[domain@localhost:9990 /] /deployment=exploded.war:add(content=[{empty=true}])

然后使用add-content向其中添加文件:

[domain@localhost:9990 /] /deployment=exploded.war:add-content(content=[{target-path=WEB-INF/classes/org/jboss/as/test/deployment/trivial/ServiceActivatorDeployment.class, input-stream-index=/home/demo/org/jboss/as/test/deployment/trivial/ServiceActivatorDeployment.class}, {target-path=META-INF/MANIFEST.MF, input-stream-index=/home/demo/META-INF/MANIFEST.MF}, {target-path=META-INF/services/org.jboss.msc.service.ServiceActivator, input-stream-index=/home/demo/META-INF/services/org.jboss.msc.service.ServiceActivator}])

或者使用remove-content删除其中的文件:

[domain@localhost:9990 /] /deployment=exploded.war:remove-content(paths=[WEB-INF/classes/org/jboss/as/test/deployment/trivial/ServiceActivatorDeployment.class, META-INF/MANIFEST.MF, META-INF/services/org.jboss.msc.service.ServiceActivator])

非常的方便。

standalone模式下的部署

standalone模式下的部署和domain模式下的部署其实是差不多的,只不过standalone模式下没有server group的概念,我们看下怎么部署和反部署:

[standalone@localhost:9990 /] deploy ~/Desktop/test-application.war
'test-application.war' deployed successfully.[standalone@localhost:9990 /] undeploy test-application.war
Successfully undeployed test-application.war.

standalone模式下的自动部署

手动部署比较麻烦,需要手动输入命令才能完成部署,如果系统中已经存在了deployment-scanner这个subsystem的话,那么这个scanner会定时去扫描standalone/deployments中的文件,从而完成自动部署的工作。

注意,在生产环境下,并不鼓励使用scanner去完成部署工作。

我们可以在standalone.xml中对deployment-scanner进行更加具体的配置:

<deployment-scanner scan-interval="5000" relative-to="jboss.server.base.dir"path="deployments" auto-deploy-zipped="true" auto-deploy-exploded="false"/>

Marker Files

Marker Files是和部署文件同名的文件,只不过在部署文件后面加上了一些后缀,比如:.dodeploy,.skipdeploy,.isdeploying,.deployed等等。

其中比较重要的是.dodeploy和.deployed,我们可以手动创建或者删除这些文件,来控制系统的部署工作。

比如,我们的部署文件叫做example.war,那么我们可以通过:

cp target/example.war/ $JBOSS_HOME/standalone/deploymentstouch $JBOSS_HOME/standalone/deployments/example.war.dodeploy

来手动部署example.war文件。

还可以通过删除.deployed来反部署应用程序。

rm $JBOSS_HOME/standalone/deployments/example.war.deployed

如果$JBOSS_HOME/standalone/deployments/example.war.undeployed出现了,就表现系统反部署成功了。

受管理的和不受管理的部署

wildfly支持两种部署模式,受管理的和不受管理的部署。

所谓不受管理的部署就是说,用户自行提供要部署的文件路径,系统直接去读取该路径上的文件。

而受管理的部署会把要部署的文件上传到内部的仓库中,然后使用这个仓库中的内容进行后面的部署操作。

仓库文件目录是standalone/data/content或者domain/data/content,我们看下仓库的文件格式:

ls domain/data/content/|---/47|-----95cc29338b5049e238941231b36b3946952991|---/dd|-----a9881fa7811b22f1424b4c5acccb13c71202bd

我们看一个部署文件的描述:

<deployments><deployment name="test-application.war"runtime-name="test-application.war"><content sha1="dda9881fa7811b22f1424b4c5acccb13c71202bd"/></deployment>
</deployments>

可以看到上面列出了部署文件的名字和sha1编码。WildFly主要通过这个sha1的编码去找到存储的文件。

默认情况下,我们使用deploy命令部署的是受管理的应用,我们可以通过添加–unmanaged来部署非受管理的应用:

[standalone@localhost:9990 /] deploy ~/Desktop/test-application.war --unmanaged
'test-application.war' deployed successfully.

这样将会存储文件的绝对路径在配置文件中,并且也不会去计算文件的hash值。

反部署应用都是一样的命令:

[standalone@localhost:9990 /] undeploy test-application.war
Successfully undeployed test-application.war.

部署覆盖

有时候我们需要修改部署好的应用程序中的某些文件,除了可以解压应用程序之外,还可以使用deployment-overlay命令:

deployment-overlay add --name=myOverlay --content=/WEB-INF/web.xml=/myFiles/myWeb.xml,/WEB-INF/ejb-jar.xml=/myFiles/myEjbJar.xml --deployments=test.war,*-admin.war --redeploy-affected

总结

wildfly的两种模式的部署就讲到这里,大家可以根据需要自行选择。

本文作者:flydean程序那些事

本文链接:http://www.flydean.com/wildfly-app-deployment/

本文来源:flydean的博客

欢迎关注我的公众号:「程序那些事」最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

wildfly 21中应用程序的部署相关推荐

  1. 在wildfly 21中搭建cluster集群

    文章目录 简介 下载软件和相关组件 配置domain 创建应用程序 部署应用程序 集群配置 总结 简介 wildfly是一个非常强大的工具,我们可以轻松的使用wildfly部署应用程序,更为强大的是, ...

  2. wildfly 21的配置文件和资源管理

    文章目录 简介 wildfly的配置文件 extensions profile path interface socket-binding management 资源管理 总结 简介 在上一篇文章我们 ...

  3. 毕业两年的我--奋斗中的程序员

    又到一年毕业季,不知不觉,自己毕业快两年了,在这两年中,从一位小白程序员蜕化到现在的拥有两年经验的C++程序员,这两年里面,不敢说成长有多快,进步有多大,但是感觉很踏实,每天都过得很充实,每天都在一点 ...

  4. CentOS7中使用kubeadm快速部署一套K8S集群

    一.Kubernetes概述 1.1 Kubernetes是什么 Kubernetes是Google在2014年开源的一个容器集群管理系统,Kubernetes简称K8S K8S用于容器化应用程序的部 ...

  5. docker~Dockerfile优化程序的部署

    一些理论 我们都知道docker这个容器工具可以帮助我们快速进行环境的部署,这对于运营人员来说,无疑是个福音,而这个工作大叔认为不应该是运营人员干的,而是由开发人员来做,因为只有你知道你干的是什么,你 ...

  6. (二)Amazon Lightsail 部署LAMP应用程序之部署单片LAMP应用程序

    部署单片LAMP应用程序 简介:通过复制应用程序代码并提供链接PHP前端和本地MySQL数据库的参数,将LAMP对战应用程序部署到先前启动的Lightsail实例中.完成后,Apache/PHP前端和 ...

  7. stm32f4 RAM中运行程序 读保护设置

    主要是为了在RAM中运行程序来解除读保护的.没想到ST-Link Utility 就直接可以. ST-Link Utility:target-->options bytes-->就可以看到 ...

  8. Qt中应用程序的打包与发布

    文章目录 1 Qt中应用程序的打包与发布 1.1 调试与发布 1.2 程序的库依赖 1.3 部署程序的开发 1 Qt中应用程序的打包与发布 1.1 调试与发布 发布应用程序时的候选者: 调试版(deb ...

  9. 怎样在 Markdown 中使程序代码带上行号

    在图灵社区使用 Markdown 写文章时,如果在一段文字的每行开头加上四个空格,或者一个制表符(Tab),这段文字就会被视为程序代码.这样,就会自动识别所用的编程语言,进行代码染色,语法高亮显示.但 ...

最新文章

  1. 373. Find K Pairs with Smallest Sums (java,优先队列)
  2. zkaccess未知错误98_游戏开始就出现这个未知错误,怎么回事,求救
  3. python 语言教程(4)列表常用方法
  4. sql优化中in关键字_工作中遇到的一个SQL优化问题与解决方案
  5. 基于DAYU的实时作业开发,分分钟搭建企业个性化推荐平台
  6. 中国超级计算机扩大领先优势:TOP500总量首次超越美国
  7. 12. URI , URN, URL 区别
  8. 自己整理的一套Java题库
  9. Linux下安装lingo教程-centos6 64位
  10. scan ip和vip的关系疑惑
  11. Fragstats 提示错误与警告
  12. cmd命令生成webservice_根据wsdl文件生成WebService客户端代码
  13. 神经网络模型画图工具,神经网络模型图怎么画
  14. BUUCTF-刷题记录-7
  15. 用Python做市场调查:餐饮商铺的用户满意度分析
  16. Flutter 和小程序混编
  17. Javaweb上传图片或文件到服务器,Tomcat服务器重新部署项目,会删除原来上传的文件的问题
  18. VS 2019 MFC Edit Control控件自绘带软键盘
  19. pubg国际版服务器没有响应,PUBG显示服务器没有正常执行 | 手游网游页游攻略大全...
  20. 苹果手机不读卡显示无服务器,苹果手机插卡显示无服务怎么回事

热门文章

  1. 胸怀——勇气——智慧
  2. iphone手机音频AAC视频H264推流(一) iphone手机推流最佳方案
  3. 小型餐饮管理系统(c++/win32 SDK/MYSQL 数据库)
  4. vmware 虚拟机安装成功,但没有虚拟网卡的解决方法
  5. divi 相关主题推荐
  6. 如何在计算机桌面恢复我的电脑,桌面上我的电脑图标不见了怎么恢复?桌面计算机图标不见了的3个解决方法...
  7. 世界上没有技术驱动型公司!
  8. 黄金连分数(python)
  9. 9月30日科技资讯|罗永浩与锤子手机撇清关系;微软回应「高管传奇」经历;Rust 1.38 稳定版发布
  10. MapReduce论文解读