docker 上 netdata 的 traefik 配置

问题描述 投票:0回答:2

我正在努力配置 traefik:v2.6,以便我可以访问在 docker 上运行的自托管 netdata 实例。这是我的撰写文件:

version: "3"
services:
  netdata:
    image: netdata/netdata
    volumes:
      - "netdataconfig:/etc/netdata"
      - "netdatalib:/var/lib/netdata"
      - "netdatacache:/var/cache/netdata"
      - "/etc/passwd:/host/etc/passwd:ro"
      - "/etc/group:/host/etc/group:ro"
      - "/proc:/host/proc:ro"
      - "/sys:/host/sys:ro"
      - "/etc/os-release:/host/etc/os-release:ro"
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.netdata.rule=Host(`netdata.$myserver`)"
      - "traefik.http.services.netdata.loadbalancer.server.port=19999"
      - "traefik.http.routers.netdata.entrypoints=http"
      - "traefik.docker.network=proxy"
    restart: unless-stopped
    cap_add:
      - SYS_PTRACE
    security_opt:
      - apparmor:unconfined
    networks:
      - proxy
volumes:
  netdataconfig:
  netdatalib:
  netdatacache:
networks:
  proxy:
    external: true

当我尝试通过

netdata.$myserver
访问网络数据时,我只看到背景,但看不到仪表板:

检查 Firefox 中的开发者设置会显示以下消息:

Loading failed for the <script> with source “http://netdata.$myserver/dashboard-react.js”. [netdata.$myserver:16:1](http://netdata.$myserver/)
Uncaught ReferenceError: NETDATA is not defined
    225 main.js:435
    p (index):16
    566 main.7d1bdca1.chunk.js:2
    p (index):16
    324 main.7d1bdca1.chunk.js:2
    p (index):16
    f (index):16
    e (index):16
    <anonymous> main.7d1bdca1.chunk.js:2

文档提供了几种反向代理配置的模板,但我无法将它们转换为我可能错过的 traefik 设置。

我尝试在规则

&& Path('/netdata')
中添加
traefik.http.routers.netdata.rule=Host('netdata.$myserver')"
,但没有任何区别。 traefik 仪表板不显示任何与 netdata 相关的错误。我在这里缺少什么?

docker reverse-proxy traefik netdata
2个回答
1
投票

如果您使用像 /netdata 这样的子路径,则必须在末尾添加斜杠来调用该目录,然后它将起作用。

 labels:
   - "traefik.enable=true"
   - "traefik.http.routers.netdata.entrypoints=web"
   - "traefik.http.routers.netdata.rule=Host(`yourdomain`) && PathPrefix(`/netdata`)"
   - "traefik.http.routers.netdata.service=netdata"
   - "traefik.http.services.netdata.loadbalancer.server.port=19999"
   - "traefik.http.routers.netdata.middlewares=netdatapathstrip"
   - "traefik.http.middlewares.netdatapathstrip.stripprefix.prefixes=/netdata"

我可以访问 http://yourdomain/netdata/ 下的仪表板 如果我调用 http://yourdomain/netdata 我会得到与您提到的相同的行为。


0
投票

您似乎正在使用子域。 该 Host 值需要实际解析为某些内容。 (如 dns 需要设置或添加到 docker 主机的 /etc/hosts 文件中。)

这是我的 docker-compose 文件,它几乎是来自 netdata 文档的逐字记录。

version: '3.4'

networks:
  traefikweb:
    external: true

services:
  netdata:
    image: netdata/netdata
    container_name: netdata
    pid: host
    labels:
      - "traefik.enable=true"
      - "traefik.ports=19999"
      - "traefik.http.routers.netdata.rule=Host(`netdata.traefik.example.com`)"
      - "traefik.http.routers.netdata.entrypoints=websecure"
      - "traefik.http.routers.netdata.tls=true"   
    networks:
      - traefikweb
    restart: unless-stopped
    cap_add:
      - SYS_PTRACE
      - SYS_ADMIN
    security_opt:
      - apparmor:unconfined
    volumes:
      - netdataconfig:/etc/netdata
      - netdatalib:/var/lib/netdata
      - netdatacache:/var/cache/netdata
      - /etc/passwd:/host/etc/passwd:ro
      - /etc/group:/host/etc/group:ro
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /etc/os-release:/host/etc/os-release:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro

volumes:
  netdataconfig:
  netdatalib:
  netdatacache:
© www.soinside.com 2019 - 2024. All rights reserved.