Beim Bereitstellen von Projekten verwende ich immer Ordner zum Bereitstellen von Projekten. Kürzlich habe ich versucht, die Projektbereitstellung mit WAR-Paketen zu verwenden, und bin auf die folgenden Probleme gestoßen:
Geben Sie den lokalen Pfad für den Speicherort der hochgeladenen Datei an. Da dieser jedoch unabhängig vom Projekt ist, müssen Sie das Projekt separat konfigurieren, um darauf zuzugreifen.
Wenn das Unternehmen eine große Anzahl von Projekten hat (ungefähr 200 für einen Server, ungefähr 20 Server), ist jedes Projekt so konfiguriert, und die Betriebs- und Wartungsarbeiten sind sehr umfangreich
Nur eine CSS- oder JS-Datei wurde während der Wartung angepasst, diese musste jedoch neu gepackt und veröffentlicht werden
Im Vergleich zur vorherigen Ordnermethode ist es wirklich mühsam. Ich möchte erfahrene Studenten fragen:
Welche Anwendungsszenarien sind Ihnen bei der Verwendung von WAR-Paketen begegnet?
Wie kann ich das Problem lösen, auf das ich gestoßen bin?
以下是我的实战运维经验:
配置应当是独立于项目的,这样可以只打一次war包,而运用到不同环境上;
运用自动化运维工具,如SaltStack、Ansible或Jenkins来帮助你批量操作;
如果预料到静态资源会频繁改动,最好跟Java项目分开来,部署到不同站点,或者用nginx做分流;
建议部署程序去解压war文件(而不是让Tomcat自己来解压),停掉Tomcat,ROOT目录用ln -s定向到新的目录,再启动Tomcat,这样Tomcat会跑得更流畅;
旧有的目录暂时不要删,如果部署错了,用ln -s把ROOT目录切换到旧的,就能实现快速回滚。
实际经验:
我经手过的项目都是在weblogic上以目录的形式发布,目录结构:
我按照这种标准结构写了若干shell脚本来运维任务自动化,就是启停,监控,更新什么的,其实也就花了几天时间,代码也不多,但是现在我再也没有手动干过运维的事情了。
基本流程就是:代码开发提交-->SVN导出增量更新包-->上传至服务器-->服务器上执行
改一个html页面都要重新打包,万一打错文件进去咋办? 静态的可以单独发布,那我他妈就改一个JAVA也要重新打包就活该啦?
没有一个容器是真正在war包里面发布和服务应用的,都是解压到某个临时位置,war包是压缩格式,你让任何一个容器每服务一个请求都去读取压缩文件里面的资源肯定会有性能问题的(至少JSP都是这样)。
这是我的个人经手的一些小型项目的解决方案,大型项目,你可能需要全流程工具链,就是什么持续集成什么的。