跳转到内容
无痕工具库 无痕工具库

Hostinger Docker Manager 中使用 Traefik 连接多个 Docker Compose 项目教程

Hostinger Docker Manager 让你可以轻松地在单台 VPS 上部署多个 Docker Compose 项目。每个项目都在相互隔离的环境中运行,这有利于项目管理和系统稳定性。不过,这也带来了一个常见挑战:当多个应用都需要使用相同端口(例如 80 或 443)时,如何将它们同时暴露到互联网上。

由于主机上的一个端口同一时间只能被一个容器直接绑定,你无法以传统方式让多个项目同时使用 80 或 443 端口。为了解决这个问题,Hostinger 提供了默认的 Traefik 项目模板,它充当所有 Docker Compose 项目的反向代理。

Docker Compose 目录中的 Traefik

Traefik 监听 80 和 443 端口,并根据域名将传入的流量路由到正确的容器。这样,你就可以在单台 VPS 上通过 HTTP 和 HTTPS 安全地提供多个应用的服务。

Traefik 项目的工作原理

Traefik 项目通过 Docker Manager 作为一个独立的 Docker Compose 项目部署。部署完成后,它会成为服务器上所有 Web 流量的统一入口。

Traefik 会通过 Docker 标签(labels)自动检测其他容器。通过读取这些标签,它可以知道哪个域名应该路由到哪个容器,并且还能使用 Let’s Encrypt 自动申请和续期 SSL 证书。

Traefik 项目会创建一个共享的 Docker 网络,供其他项目加入。借助这个网络,Traefik 可以与运行在完全独立的 Docker Compose 项目中的容器进行通信。

通过 Traefik 启用对应用的访问

部署 Traefik 项目模板后,你需要更新任何想要暴露到互联网的项目的 Docker Compose 配置。

在应用的 docker-compose.yml 文件中,你需要为想要开放访问的服务添加 Traefik 确认标签。

示例配置如下:

services:
myapp:
...
labels:
- traefik.enable=true
- traefik.http.routers.${COMPOSE_PROJECT_NAME}.rule=Host(`${COMPOSE_PROJECT_NAME}.${TRAEFIK_HOST}`)
- traefik.http.routers.${COMPOSE_PROJECT_NAME}.entrypoints=websecure
- traefik.http.routers.${COMPOSE_PROJECT_NAME}.tls.certresolver=letsencrypt
- traefik.http.services.${COMPOSE_PROJECT_NAME}.loadbalancer.server.port=3001
networks:
traefik-proxy:
external: true

traefik.enable=true 标签告知 Traefik 需要管理此容器。
路由规则(router rule)定义了哪个域名应与此应用关联。

在多个项目中使用相同端口

采用这种方案后,你的应用容器无需直接暴露 80 或 443 等端口,只有 Traefik 会在主机上使用这些端口。这样,你就可以运行多个不同的项目,全部使用标准 Web 端口而互不冲突。

每个应用都通过自己的域名或子域名访问,而 Traefik 会自动处理路由、SSL 证书和安全连接。

结语

请确保你在 Traefik 标签中使用的域名已通过 DNS 指向你的 VPS IP 地址。部署或更新项目后,Traefik 会自动检测变更并应用新的路由配置,无需重启。

这种方案能让你的 Docker 项目保持整洁、可扩展且可直接用于生产环境,同时借助 Docker Manager 轻松地在单台 Hostinger VPS 上托管多个 Web 应用。要同时监控 Traefik 项目及其他容器的状态,请参阅如何在 Hostinger 管理 Docker 项目。