blauwe_lucht.docker_webapps
blauwe_lucht.docker_webapps
Ansible 角色,用于在单个 Docker 主机上运行多个 Web 应用程序,通过自签名或 Let's Encrypt 证书实现 HTTPS。
此角色创建一个反向代理容器,运行 nginx,并配置 nginx 将请求转发到注册的 Web 应用程序。根据需要,每个 Web 应用程序会请求一个 Let's Encrypt 证书,以便可以通过 HTTPS 访问这些应用程序。这些证书会通过 certbot 容器自动续期。如果没有使用 Let's Encrypt,则会生成自签名的 HTTPS 证书。
当前状态
Alpha。仅在测试中使用此角色。目前尚未编写分子测试。
要求
节点应已经运行 Docker。这可以通过角色 geerlingguy.docker 来实现。
角色变量
docker_webapps
要运行的 Web 应用程序配置。例如:
docker_webapps:
- name: samtris
docker_image: blauwelucht/samtris:v2.0
port: 8080
volumes:
- /var/log:/var/log
name
生成的 Docker Compose 服务的名称和反向代理将监听的子域名。
docker_image
用于托管 Web 应用程序的镜像。建议使用标签,因为此角色不会检查更新的 Docker 镜像。
port
容器中 Web 应用程序监听的端口。
volumes
卷为可选,会原样复制到生成的 docker-compose.yml 中。
docker_webapps_use_lets_encrypt
当 Docker 主机可以从互联网访问时,将 use_lets_encrypt 设置为 true。这是 Let's Encrypt 用于验证证书请求所需的。当 use_lets_encrypt 为 false 时,将使用自签名证书。
docker_webapps_domain_name
所有子域名所属的域名。
docker_webapps_email_address
docker_webapps_organization_name
docker_webapps_country_name
用于请求自签名和 Let's Encrypt 证书的电子邮件地址、组织和国家。
docker_webapps_docker_compose_project
Docker Compose 的项目名称。当已经存在同名 Docker Compose 项目时,需要重写。
docker_webapps_reverse_proxy_container_name
反向代理容器的名称。当已经存在同名容器时,需要重写。
docker_webapps_certbot_renew_container_name
用于证书续期的 certbot 容器名称。当已经存在同名容器时,需要重写。
docker_webapps_certbot_staging_param
在实验时,将 docker_webapps_certbot_staging_param 设置为 "--staging",以避免触及 Let's Encrypt 的速率限制。
依赖
无
示例剧本
- hosts: servers
roles:
- name: blauwe_lucht/docker_webapps
vars:
docker_webapps:
- name: samtris
docker_image: blauwelucht/samtris:v2.0
port: 8080
docker_webapps_use_lets_encrypt: true
docker_webapps_domain_name: example.com
docker_webapps_email_address: [email protected]
docker_webapps_organization_name: ACME
docker_webapps_country_name: NL
注意
- 确保 FQDN
<site.domain>
解析到您的服务器。反向代理使用 FQDN 将请求路由到正确的 Web 应用程序。 - 对于每个 Web 应用程序,nginx 监听一个额外的网站名称以便让您可以在测试服务器上测试 Ansible 脚本:
<site>-tst.<domain>
。 - 处理 Web 应用程序容器更新的最佳方法是使用镜像名称中的标签。当在 docker_webapps 配置变量中更新标签时,变更将被检测到,并将拉取新镜像以替换现有容器。
- 要删除/刷新 Let's Encrypt 证书,请在 certbot 容器中执行
certbot delete --cert-name <fqdn>
,否则某些历史记录将保留,您将获得带有 -0001 前缀的新证书,而这些证书不会被 nginx 找到。 重要: 每次仅删除/刷新一个证书,否则 nginx 将无法启动,因为某个站点缺少 SSL 证书,而配置中仍指定着一个。(我还没有找到解决此问题的方法)。 - 当不使用 Let's Encrypt 证书时,Web 应用程序仍可以通过 HTTPS 访问,但您会在浏览器中收到证书自签名的警告。对于这些 Web 应用程序,您可以安全地忽略该警告。
许可证
BSD
作者信息
该角色由 Blauwe Lucht 于 2020 年创建。
Role to run multiple webapps on https on a single Docker host, signed with self-signed or Let's Encrypt certificates.
ansible-galaxy install blauwe_lucht.docker_webapps