Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Git中结合Ansible配置/描述web应用程序的部署_Git_Docker_Ansible - Fatal编程技术网

如何在Git中结合Ansible配置/描述web应用程序的部署

如何在Git中结合Ansible配置/描述web应用程序的部署,git,docker,ansible,Git,Docker,Ansible,我想直接从Git存储库部署几个web应用程序 一个web应用程序由两个docker容器组成,一个用于Apache Tomcat(作为中间件并用于服务静态文件,例如Vue.js前端)和一个Mysql数据库容器 Ubuntu服务器本身将通过提供例如docker/docker compose的Ansible playbook和一个预配置的Apache web服务器从零开始初始化,该服务器将用作所有web应用程序(Apache web服务器的虚拟主机)的反向代理 第二个Ansible playbook通

我想直接从Git存储库部署几个web应用程序

一个web应用程序由两个docker容器组成,一个用于Apache Tomcat(作为中间件并用于服务静态文件,例如Vue.js前端)和一个Mysql数据库容器

Ubuntu服务器本身将通过提供例如docker/docker compose的Ansible playbook和一个预配置的Apache web服务器从零开始初始化,该服务器将用作所有web应用程序(Apache web服务器的虚拟主机)的反向代理

第二个Ansible playbook通过在Ubuntu服务器上创建新用户、从Git服务器克隆web应用的存储库以及在Apache web服务器上配置反向代理来安装web应用


有没有一种好方法可以配置/描述web应用程序在其Git存储库中的部署?该描述应包括docker compose文件的名称、如何构建中间件软件的war文件、相对于Ubuntu服务器中web应用程序用户的主目录在何处部署war文件等。是否有人碰巧知道是否有一种标准化的方法可以实现我的目标?

我认为,通常的方法是使用CI/CD环境

Git正在存储项目的源代码。每次提交(或在您想要的任何事件上),都会启动一个连续的集成过程,并根据需要编译源代码。对于特定分支(主分支/生产分支),CI/CD过程会创建一个人工制品,将其打包到Docker映像中并推送到注册表。所有这些都不是在服务器上完成的——而是在另一台机器上完成的——不要使用你的Ubuntu生产机器来编译webapp

然后,CI/CD进程可以通过直接在远程计算机上执行发布过程或调用ansible playbook(例如,生成ReverseProxy设置)来启动发布过程。因此,您已经将编译过程与配置完全分离。剧本可能是该项目的一部分

Gitlab和Jenkins有几个可用的例子——看看这个例子

每个项目都有自己的Dockerfile来描述服务本身。还有一个总体项目,其中包含Docker Compose文件和Ansible脚本,用于生成生产环境(通常)。每个服务配置是通过每个SCM项目的playbooks完成的

在一个项目中更改文件将重新创建Docker映像。您只需要调用docker compose pull&up-d(可能不需要重新运行完整的docker compose创建过程)。其他任务可以自动运行,也可以根据任何更改运行。我认为,这里的诀窍是使用Docker容器而不是Ansible脚本,因为您已经使用了Docker compose环境—完全使用它

所以-你有(例如)

  • 发展的东道主
    • Gitlab容器和Gitlab Runner容器
      • 每个项目都有一个CI配置来描述从源到成品的任务(参见.gitlab CI.yml)
      • 用于描述映像及其配置/启动/运行状况检查的Dockerfile
      • 可能还有一个由.gitlab-ci.yml运行的剧本来配置ReverseProxy等
      • 一个不同的项目,包含清单和通用playbook,用于为您的环境创建默认设置(在我的例子中,该项目的推送调用AWX REST API来重新读取SCM并启动playbook站点.yml)
    • 也许是码头工人登记处
    • 也许在那前面有一个反向氧化剂
  • 还有你的生产机器
    • 反向氧化剂
    • 多个Docker使用注册表中的Docker图像组成环境
很好的一点是,与AWX和其他一些主机一起,您可以为不同的分支和新项目创建临时区域,并使用基于时间的部署


当然-用你想要的任何东西替换Gitlab。

web应用程序也不是从Docker容器中运行的?web应用程序本身将在两个Docker容器中运行,一个用于Apache Tomcat,另一个用于Mysql数据库。我指的是“第二个Ansible playbook”部分。新用户、来自Git的应用程序源代码以及运行该应用程序的任何web服务器是否都可以放入
Dockerfile
?每次部署新的web应用程序时,都会使用第二个Ansible playbook。根据web应用程序的需要,web应用程序本身分为两个(有时更多)
Dockerfile
s。无法将所有内容合并到一个
Dockerfile
。但是现在我使用了
docker compose.yml
来管这些容器。