gpt4 book ai didi

docker - 在 Traefik 动态配置中使用环境变量

转载 作者:行者123 更新时间:2023-12-02 17:59:00 25 4
gpt4 key购买 nike

我正在尝试构建一个 Traefik 动态配置,该配置具有 "Host(app.localhost)" 的规则正在开发中但使用 "Host(realname.com)"在生产中。我也在使用 Docker,但我认为这与我的问题无关。我的问题是:在我的动态配置中是否有使用环境变量的惯用方法?

文档提到了 Go 模板,但除此之外我不明白。实在是太缺乏了。我也考虑过类似 envsubst但希望不必安装其他工具。

我正在使用 Traefik 2.0+。还有,我必须使用文件提供程序,因为我在本地为 TLS 使用自签名证书。来自 Traefik 的文档:

In the above example, we've used the file provider to handle these definitions. It is the only available method to configure the certificates (as well as the options and the stores). However, in Kubernetes, the certificates can and must be provided by secrets.

最佳答案

使用 traefik v2.0+ docker 镜像,你可以简单地使用 docker-compose并在 .env 中定义您的环境变量文件。然后使用如下示例中的标签。

例子

用途 文件提供商 使用 traefik CLI 命令为本地主机添加自签名 TLS 证书:--providers.file.filename=/etc/traefik/certs.toml
.env本地文件:

# Environment variables for docker-compose.yml
LOG_LEVEL=DEBUG
NETWORK=net

## dashboard configs
DASHBOARD_HOST=app.localhost
CONFIG_PATH=./config
CERT_PATH=./certs

.env生产中的文件:
# Environment variables for docker-compose.yml
# LOG_LEVEL=INFO
LOG_LEVEL=ERROR
NETWORK=net

## dashboard configs
DASHBOARD_HOST=realname.com
CONFIG_PATH=./config
CERT_PATH=./certs

docker-compose.yml:

version: "3.5"

services:
traefik:
# Setting container_name disables running multinple instances of this service
container_name: traefik
image: traefik:v2.1
command:
- --entrypoints.web.address=:80
- --entrypoints.websecure.address=:443
- --log.level=${LOG_LEVEL}
- --providers.docker
- --providers.docker.exposedbydefault=false
- --providers.file.filename=/etc/traefik/certs.toml
- --api
ports:
- "80:80"
- "443:443"
networks:
- net
volumes:
- "${CERT_PATH}:/certs"
- "${CONFIG_PATH}:/etc/traefik"
- "/var/run/docker.sock:/var/run/docker.sock:ro"
labels:
# set this lebel to `false` and the rest is history
traefik.enable: true
# middleware redirect
traefik.http.middlewares.redirect-to-https.redirectscheme.scheme: https

# redirection HTTP to HTTPS
traefik.http.routers.http_catchall.rule: hostregexp(`{host:.+}`)
traefik.http.routers.http_catchall.entrypoints: web
traefik.http.routers.http_catchall.middlewares: redirect-to-https

# dashboard
traefik.http.routers.traefik.rule: Host(`${DASHBOARD_HOST}`)
traefik.http.routers.traefik.entrypoints: websecure
traefik.http.routers.traefik.service: api@internal
traefik.http.routers.traefik.tls: true

networks:
net:
external: false
name: ${NETWORK}

配置/certs.toml:

[tls.stores.default.defaultCertificate]
certFile = "/certs/cert.crt"
keyFile = "/certs/cert.key"


证书/cert.crt:
-----BEGIN CERTIFICATE-----
<THE CERTIFICATE STRING>
-----END CERTIFICATE-----

证书/cert.key:
-----BEGIN RSA PRIVATE KEY-----
<THE RSA PRIVATE KEY STRING>
-----END RSA PRIVATE KEY-----
docker-compose将替换所有变量,如 ${DASHBOARD_HOST}使用 .env 中定义的值文件。

然后,您可以使用以下方法验证您的配置: docker-compose config运行使用: docker-compose up -d -d标志用于分离模式,在后台运行容器

源文件:
你可以引用这个 repository在 github 上找到这个例子的详细版本,关于如何设置 traefik v2使用 docker-compose用于自签名或自动获取 Let's Encrypt通配符证书。

关于docker - 在 Traefik 动态配置中使用环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60273841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com