如何在Git中结合Ansible配置/描述web应用程序的部署
我想直接从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应用如何在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通
有没有一种好方法可以配置/描述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)
- 也许是码头工人登记处
- 也许在那前面有一个反向氧化剂
- Gitlab容器和Gitlab Runner容器
- 还有你的生产机器
- 反向氧化剂
- 多个Docker使用注册表中的Docker图像组成环境
当然-用你想要的任何东西替换Gitlab。web应用程序也不是从Docker容器中运行的?web应用程序本身将在两个Docker容器中运行,一个用于Apache Tomcat,另一个用于Mysql数据库。我指的是“第二个Ansible playbook”部分。新用户、来自Git的应用程序源代码以及运行该应用程序的任何web服务器是否都可以放入
Dockerfile
?每次部署新的web应用程序时,都会使用第二个Ansible playbook。根据web应用程序的需要,web应用程序本身分为两个(有时更多)Dockerfile
s。无法将所有内容合并到一个Dockerfile
。但是现在我使用了docker compose.yml
来管这些容器。