【问题标题】:How to configure / describe deployment of a web app in Git in combination with Ansible如何结合 Ansible 在 Git 中配置/描述 Web 应用程序的部署
【发布时间】:2020-03-06 18:45:54
【问题描述】:

我想直接从他们的 Git 存储库部署几个 Web 应用程序

单个 Web 应用由两个 docker 容器组成,一个用于 Apache Tomcat(作为中间件并用于提供静态文件,例如 Vue.js 前端)和一个 Mysql 数据库容器。

Ubuntu 服务器本身将使用 Ansible 剧本从头开始初始化,提供例如docker/docker-compose 和一个预配置的 Apache Webserver,它将用作所有 Web 应用程序的反向代理(它们是 Apache Webserver 的虚拟主机)。

第二个 Ansible 剧本通过在 Ubuntu 服务器上创建新用户、从 Git 服务器克隆 Web 应用程序的存储库并在 Apache Web 服务器上配置反向代理来安装 Web 应用程序。

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

【问题讨论】:

  • Web 应用程序不是也从 Docker 容器运行的吗?
  • Web 应用程序本身将在两个 docker 容器中运行,一个用于 Apache Tomcat,一个用于 Mysql 数据库。
  • 我的意思是“第二个 Ansible 剧本”部分。新用户、来自 Git 的应用程序源代码以及运行应用程序的任何 Web 服务器都可以放入 Dockerfile 吗?
  • 每次都会使用第二个 Ansible playbook,此时将部署新的 Web 应用程序。根据 Web 应用程序的需要,Web 应用程序本身分为两个(或有时更多)Dockerfiles。将这一切都集中到一个Dockerfile 是不可能的。但目前我使用docker-compose.yml 来编排容器。

标签: git docker ansible


【解决方案1】:

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

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

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

有几个可用的 Gitlab 和 Jenkins 示例 - 例如,请查看 https://docs.gitlab.com/ee/ci/docker/using_docker_build.html

每个项目都有自己的 Dockerfile 来描述服务本身。还有一个带有 Docker-Compose 文件的整体项目,可能还有 Ansible 脚本来生成生产环境(通常)。每个服务的配置是通过每个 SCM 项目的剧本完成的。

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

所以 - 你有(例如)

  • 开发主机
    • 一个 Gitlab 容器和一个 Gitlab-Runner 容器
      • 每个项目都有一个 CI 配置来描述从源到工件的任务(请参阅 .gitlab-ci.yml)
      • 用于描述映像及其配置/启动/健康检查的 Dockerfile
      • 也许还有一个由 .gitlab-ci.yml 运行的剧本来配置 ReverseProxy 等。
      • 一个不同的项目,其中包含库存和通用 playbook,用于为您的环境创建默认设置(在我的情况下,对该项目的推送调用 AWX REST API 以重新读取 SCM 并启动 playbook site.yml)。
    • 可能是 Docker 注册表
    • 也许前面有一个 ReverseProxy。
  • 和你生产机器
    • 反向代理
    • 几个 Docker-compose 环境,其中包含来自您的注册表的 docker-images

好处是 - 与 AWX 和其他一些主机一起,您可以为不同的分支和新项目创建暂存区,也可以使用基于时间的部署。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    • 1970-01-01
    • 2012-01-07
    • 2014-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多