【发布时间】:2021-11-28 21:15:23
【问题描述】:
我有一个使用 pm2 在端口 3000 上运行的节点进程。 我想配置 Traefik 以便它在端口 80 上反向代理此服务。
在this 出色的博文之后,我能够使用 docker compose 快速启动 Traefik 并为节点服务器设置骨架配置。
但是,该示例假设节点进程也托管在 docker 中。我无法让它为我的节点进程 (*) 工作,所以我只想能够通过以某种方式指向端口 3000 来配置 Traefik。看起来很简单,但无法让它发挥作用。
我坚持使用以下配置(这是各种博客文章的混合,但实际上并不知道我在做什么):
services:
reverse-proxy:
image: traefik:v2.4
container_name: "traefik"
command:
- "--api.insecure=true"
- "--api.dashboard=true"
- "--api.debug=true"
- "--providers.docker=true"
- "--log.LEVEL=DEBUG"
- "--entryPoints.web.address=:80"
- "--entryPoints.websecure.address=:443"
- "--providers.docker.exposedbydefault=false"
- "--certificatesresolvers.myresolver.acme.httpchallenge=true"
- "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web"
- "--certificatesresolvers.myresolver.acme.email=xxxx@xxx.com"
- "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
ports:
- "443:443"
- "80:80"
- "8080:8080"
volumes:
- "./letsencrypt:/letsencrypt"
- "/var/run/docker.sock:/var/run/docker.sock:ro"
node-server:
loadBalancer:
servers:
- url: http://127.0.0.1:3000/
labels:
- "traefik.enable=true"
- "traefik.http.routers.node-server.rule=Host(`xxxxxx.com`)"
- "traefik.http.routers.node-server.entrypoints=websecure"
- "traefik.http.routers.node-server.tls.certresolver=myresolver"
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
- "traefik.http.routers.redirs.rule=hostregexp(`{host:.+}`)"
- "traefik.http.routers.redirs.entrypoints=web"
- "traefik.http.routers.redirs.middlewares=redirect-to-https"
这给出了错误:'不支持的配置选项 services.node-server: 'loadBalancer'"
长话短说:我将如何配置 Traefik 以反向代理在端口 3000 上运行的服务?
*) 一个 Docker 的新手,我无法让这种情况正常工作,其中节点进程依赖于父目录中的自定义 javascript 模块。也许有一种方法可以做到这一点,而我可以用“docker 中的主机节点”的方式来做到这一点。我都在听
【问题讨论】:
-
我会开始在 docker-compose 中添加
version: "3"并检查缩进是否正确
标签: node.js docker docker-compose traefik