由于 QuestDB OSS 没有基本的身份验证和 TLS,我想使用 caddy 来代理它,并且它还会自动更新我的 TLS 证书。
到目前为止,我已经成功地使用 TLS 正确地为 QuestDB 提供服务,但我仍停留在基本身份验证上。我从文档中复制了一个示例,它工作正常,但是当我尝试使用环境变量时,基本身份验证对我不起作用。这是我到目前为止所拥有的:
用于 Caddy 代理的 docker-compose.yaml(直接复制/粘贴来自文档)
version: "3.7"
services:
caddy:
image: lucaslorentz/caddy-docker-proxy:ci-alpine
ports:
- 80:80
- 443:443
environment:
- CADDY_INGRESS_NETWORKS=caddy
networks:
- caddy
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./caddy_data:/data
restart: unless-stopped
networks:
caddy:
external: true
volumes:
caddy_data: {}
我已经创建了 caddy 网络,并且我有 QuestDB 的 docker-compose.yml
version: '3.7'
services:
questdb:
image: questdb/questdb:7.3.10
environment:
QDB_PG_USER: ${QDB_PG_USER:-admin}
QDB_PG_PASSWORD: ${QDB_PG_PASSWORD:-password}
QDB_PG_READONLY_USER_ENABLED: "true"
QDB_PG_READONLY_USER: ${QDB_PG_READONLY_USER:-readonly}
QDB_PG_READONLY_PASSWORD: ${QDB_PG_READONLY_PASSWORD:-quest}
networks:
- caddy
labels:
caddy: localhost
caddy.reverse_proxy: "{{upstreams 9000}}"
#caddy.basicauth: "/"
#caddy.basicauth./: "${BASIC_AUTH_USER:-readonly} ${BASIC_AUTH_HASHED_PASSWORD:-quest}"
networks:
caddy:
external: true
当我在注释掉基本身份验证的情况下启动此配置时,一切正常,我可以转到
https://localhost
(http
将得到正确重定向)。我打算在部署时更改我的域名。但是当我取消注释我的基本身份验证配置时,questdb 容器似乎启动得很好,但我无法从本地主机访问。有什么想法吗?
事实证明我看不到任何问题,因为我将 caddy 作为 docker compose 守护进程启动,但没有看到日志。当我检查日志时,我实际上可以看到这一点:
{\"error\":\"loading config: loading new config: loading http app module: provision http: server srv0: setting up route handlers: route 0: loading handler modules: position 0: loading module 'subroute': provision http.handlers.subroute: setting up subroutes: route 0: loading handler modules: position 0: loading module 'authentication': provision http.handlers.authentication: loading authentication providers: module name 'http_basic': provision http.authentication.providers.http_basic: base64-decoding salt: illegal base64 data at input byte 4\"}\n"}
由于我提供了一个明确的密码作为默认值,所以它无法启动。一旦我使用
htpasswd -nbB username 'password'
创建哈希密码,我就可以将其作为环境变量传递,一切正常。