docker - Traefik 已启动,但我的服务未使用它
问题描述
我正在使用带有 Debian 10 的 VPS。我也有一个域名。
我的目标是自托管一些服务,比如 FreshRSS 或 Nextcloud。为了部署这些服务,我使用了 Docker 和 Docker Compose。我每个服务有一个文件夹。
因为我想获得一个反向代理并将子域分配给服务(例如:cloud.domainname.com 到 Nextcloud),所以我昨天安装了 Traefik。但是,我无法让服务正常工作。这对我来说可能是错误的配置,因为我是设置反向代理的初学者。例如,我试图让它与在端口 8000 上运行的 ArchiveBox 一起工作。我希望 Traefik 将我的子域 archive.domainname.com 映射到我的 VPS 的端口 8000。
这些是我昨天做的步骤:
- 使用 Docker Compose 在我的 VPS 上安装ArchiveBox并进行配置。它工作成功。
- 为 traefik 创建了一个新网络:
sudo docker network create --driver=bridge --subnet=192.168.0.0/16 traefik_lan
- 使用 Docker Compose 安装 Traefik,通过以下教程添加动态配置。
- 将标签和网络添加到 ArchiveBox 的 Docker Compose 文件中。
- 两个都开始了。但是,ArchiveBox 创建了一个新网络,似乎没有使用 Traefik 网络。我仍然可以直接访问 domainname.com:8000 上的 ArchiveBox。
下面是配置文件。
档案盒
ArchiveBox docker-compose.yml
# Usage:
# docker-compose up -d
# docker-compose run archivebox init
# echo "https://example.com" | docker-compose run archivebox archivebox add
# docker-compose run archivebox add --depth=1 https://example.com/some/feed.rss
# docker-compose run archivebox config --set PUBLIC_INDEX=True
# Documentation:
# https://github.com/ArchiveBox/ArchiveBox/wiki/Docker#docker-compose
version: '3.7'
services:
archivebox:
# build: .
image: ${DOCKER_IMAGE:-archivebox/archivebox:latest}
command: server 0.0.0.0:8000
stdin_open: true
tty: true
ports:
- 8000:8000
environment:
- USE_COLOR=True
- SHOW_PROGRESS=False
- SEARCH_BACKEND_ENGINE=sonic
- SEARCH_BACKEND_HOST_NAME=sonic
- SEARCH_BACKEND_PASSWORD=SecretPassword
volumes:
- ./data:/data
depends_on:
- sonic
labels:
- "traefik.enable=true"
- "traefik.docker.network=traefik_lan"
- "traefik.http.routers.archiveboxnotls.rule=Host(`${ARCHIVE_URL}`)"
- "traefik.http.routers.archiveboxnotls.entrypoints=webinsecure"
- "traefik.http.routers.archiveboxnotls.middlewares=tlsredir@file"
- "traefik.http.routers.archivebox.rule=Host(`${ARCHIVE_URL}`)"
- "traefik.http.routers.archivebox.entrypoints=websecure"
- "traefik.http.routers.archivebox.tls=true"
- "traefik.http.routers.archivebox.tls.certresolver=letsencrypt"
networks:
- traefik_lan
# Run sonic search backend
sonic:
image: valeriansaliou/sonic:v1.3.0
ports:
- 1491:1491
environment:
- SEARCH_BACKEND_PASSWORD=SecretPassword
volumes:
- ./etc/sonic/config.cfg:/etc/sonic.cfg
- ./data:/var/lib/sonic/store/
networks:
traefik_lan:
external: true
然后我应该像这样运行它:
sudo ARCHIVE_URL=archive.mydomain.com docker-compose up -d
特拉菲克
这是我在 /home 中的 /traefik 文件夹的结构。
.
├── config
│ ├── acme.json
│ ├── dynamic-conf
│ │ ├── dashboard.toml
│ │ ├── tlsredir.toml
│ │ └── tls.toml
│ └── traefik.toml
└── docker-compose.yml
码头工人-compose.yml
version: '3'
services:
reverse-proxy:
container_name: traefik
image: traefik:v2.4
restart: unless-stopped
ports:
- "80:80"
- "443:443"
networks:
- traefik_lan
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./config:/etc/traefik:ro
- ./config/acme.json:/acme.json
networks:
traefik_lan:
external: true
traefik.toml
[api]
dashboard = true
[providers]
[providers.docker]
exposedByDefault = false
[providers.file]
directory = "/etc/traefik/dynamic-conf"
watch = true
[entryPoints]
[entryPoints.websecure]
address = ":443"
[entryPoints.webinsecure]
address = ":80"
[entryPoints.dot]
address = ":853"
[certificatesResolvers.letsencrypt.acme]
email = "myemail@gmail.com"
caServer: "https://acme-staging-v02.api.letsencrypt.org/directory"
#caServer: "https://acme-v02.api.letsencrypt.org/directory"
storage = "acme.json"
[certificatesResolvers.letsencrypt.acme.tlsChallenge]
[accessLog]
format = "json"
[accessLog.fields]
defaultMode = "drop"
[accessLog.fields.names]
"ClientAddr" = "keep"
"RequestAddr" = "keep"
"RequestMethod" = "keep"
"RequestPath" = "keep"
"DownstreamStatus" = "keep"
仪表板.toml
[http.routers.api]
rule = "Host(`traefik.domain.tld`)"
entrypoints = ["webinsecure"]
service = "api@internal"
middlewares = ["tlsredir@file"]
[http.routers.api-secure]
rule = "Host(`traefik.domain.tld`)"
entrypoints = ["websecure"]
service = "api@internal"
middlewares = ["secured"]
[http.routers.api-secure.tls]
certResolver = "letsencrypt"
tlsredir.toml
[http.middlewares]
[http.middlewares.tlsredir.redirectScheme]
scheme = "https"
permanent = true
tls.toml
[tls]
[tls.options]
[tls.options.default]
minVersion = "VersionTLS12"
sniStrict = true
cipherSuites = [
"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
"TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305",
]
curvePreferences = ["CurveP521","CurveP384"]
预先感谢您的帮助。
解决方案
推荐阅读
- typescript - 我们是否有可以在子类 TS 中设置为私有的抽象函数?
- r - 如何确定变量连续减少的第一行?
- go - bazel go_embed_data“无法嵌入”
- python - InvalidArgumentError: In[0] mismatch In[1] shape: 1 vs. 3: [22500,1] [3,1] 0 0 [Op:MatMul]
- javascript - Firestore collection.set 方法不起作用
- python - 使用 np 数组中的元组作为颜色时,cv2.rectangle 不起作用
- c++ - 我们能以某种方式使用 array[i] 而不是 *(array+i) 吗?
- r - dplyr:如何在创建新协变量的同时使用多个列进行 pivot_wider?
- angular - Ionic 5 和 Angular 12:canActivate 保护修改浏览器历史记录,即使从保护返回 false
- spring-boot - Asyn retry Junit默认没有运行3次