yourlabs.compose

将 docker-compose.yml 部署到服务器

Ansible 角色用于将 docker-compose.yml 部署到主目录,最好与 bigsudo 一起使用。

本README描述了功能,详细教程请参见TUTORIAL.md,其中提供了极端DevOps的模式。

示例

该角色自我测试,你可以直接复制:

  • Dockerfile:默认适用于 CRUDLFA+ 项目,提供压缩和缓存的静态文件服务以及一个调度器。
  • .gitlab-ci.yml:构建并推送 docker 镜像到 GitLab 镜像注册中心,提供一个部署作业 YAML 模板(宏),以及适用于不同部署用例的三个示例部署配置。
  • docker-compose.yml:用于本地和临时部署。
  • docker-compose.traefik.yml:支持 yourlabs.traefik。
  • docker-compose.persist.yml:用于持久化部署的附加组件,即在 .gitlab-ci.yml 中指定的,需要 docker-compose.traefik.yml。

你需要更改:

  • .gitlab-ci.yml:有一些 # UNCOMMENT ABOVE AND REMOVE BELOW 的注释,按照提示操作,以便使用 yourlabs/ansible。
  • ci.yourlabs.io 更改为你的服务器地址.
  • GitLab CI 变量设置:$CI_SSH_KEY,它应包含一个 ed25510 的私钥,你可以通过指令 ssh-keygen -t ed25519 -a 100 创建一个。
  • Dockerfile:更改命令参数 --module=wsgi:application 以指向你对应的 wsgi 应用程序路径,如果不需要 bigsudo 配置,则可以将其移除,并取消注释你想要的部分。

然后,你可以根据需要自定义!

其他你可能会使用的 bigsudo 命令:

  • 启用一个备份 systemd 定时器:bigsudo yourlabs.compose backup home=/home/$CI_PROJECT_NAME-$CI_ENVIRONMENT_NAME
  • 在审查部署的 CI 服务器上,删除未使用的镜像、卷和网络:bigsudo yourlabs.docker prunecron @ci.your.host,这可以防止审查部署占用磁盘空间。

你也可以在 关于极端DevOps的博客文章 中获取更一般和概念性的描述。

功能文档

该角色的目的是自动化将多个 docker-compose.yml 文件合并部署到主机的目录,并围绕此进行自动化。

在包含 docker-compose.yml 文件的目录中,你可以使用以下命令将其部署到 $host:/home/staging

bigsudo yourlabs.compose home=/home/staging $user@$host

如果 $user@$host 未定义,则将在本地主机上执行。

你可以传递多个组合文件,并在生成最终文件时代理环境变量:

FOO=bar bigsudo yourlabs.compose \
    home=/home/staging \
    compose_django_image=$YOUR_IMAGE \
    compose=docker-compose.yml,docker-compose.staging.yml

目录生成

此角色还可以使用指定的 uid、gid 和模式预创建目录,标记为 io.yourlabs.compose.mkdir,示例如下:

volumes:
- "./log/admin:/app/log"
labels:
- "io.yourlabs.compose.mkdir=./app/log:1000:1000:0750"

这将创建 {{ home }}/log/admin 目录,所有者为 1000,组为 1000,模式为 0750。

环境生成

另一个有趣的功能是自动环境提供, 每个在服务环境中声明的变量都会在运行时定义。例如,在 docker-compose.yml 中:

environment:
- FOO

然后在执行 yourlabs.compose 角色时定义 FOO 变量,如下所示:

FOO=bar bigsudo yourlabs.compose home=/home/test

将生成以下环境:

environment:
- FOO=bar

CLI 上的 YAML 重写

你还可以使用 compose_servicename_keyname 变量添加或重写服务值。例如,动态重写 compose[services][django][image] 的值:

bigsudo yourlabs.compose home=/home/test compose_django_image=yourimage

如果你想即时清空值,只需传递空值,例如,要使 compose[services][django][build] 为空,请传递 compose_django_build= 而不提供值。 如果你没有在主目录中克隆你的代码库,则当 docker-compose 找不到 Dockerfile 的路径时会报错,这样可以规避此限制:

bigsudo yourlabs.compose home=/home/test compose_django_build=

网络自动化

管理 docker-compose 的网络可能有点棘手,例如,我们通常有一个与负载均衡器如 traefik 相关的 web 网络。这将 web 网络附加到 django 服务,并且只要在部署的 docker-compose.yml 文件中声明该网络为外部,它将自动附加网络:

bigsudo yourlabs.compose home=/home/test compose_django_networks=web

如果你正在做负载均衡器的 docker-compose.yml,则会遇到相反的问题:docker-compose.yml 声明了一个外部的 web 网络,但 docker-compose up 不会创建它,会报错:

ERROR: Network web declared as external, but could not be found. Please
create the network manually using `docker network create lol` and try again.

该角色通过解析 docker-compose.yml 中的外部网络,并在必要时使用 docker_network ansible 模块在主机上预创建,防止了此问题。

作为 ansible 角色

最后,你可以像使用其他 ansible 角色一样使用此角色,如果你想将其包装在你的代码库中的更多任务中:

- name: 确保 docker 在此主机上设置一次
  include_role: name=yourlabs.compose
  vars:
    home: /home/yourthing
    compose_django_image: foobar
    compose_django_build:
    compose_django_networks:
    - web

备份

对于带有 home 参数的部署,启用了自动备份。它会在 /home 中设置三个脚本:

  • ./backup.sh:创建本地备份并在 restic 中备份。
  • ./restore.sh:列出 restic 快照,运行时传入快照哈希作为参数以恢复快照。
  • ./prune.sh:删除旧备份。

它会创建 1 个 systemd 服务和 systemd 定时器,

  • backup-PROJECTNAME.service
  • backup-PROJECTNAME.timer

开发

要在本地主机上开发此角色:

# 构建镜像
docker build -t test .

# 运行 bigsudo,如下所示:
bigsudo . home=/tmp/test compose_django_build= compose_django_image=test compose=docker-compose.yml,docker-compose.persist.yml

请注意,它会始终在更新之前尝试运行备份脚本。如果你更改了脚本,需要在重新运行 yourlabs.compose 之前删除 backup.sh,以便更新 backup.sh。

关于项目

Deploy a docker-compose.yml in a target directory

安装
ansible-galaxy install yourlabs.compose
许可证
Unknown
下载
4k
拥有者
OSS Hack'n'Dev, we provide all kind of paid services on OSS and sponsor OSS