Skip to content

负载均衡

您可以轻松使用 Traefik 在以下环境之间为应用程序进行负载均衡:

  • 2+ 台服务器
  • 一台服务器中的 2+ 个容器

2+ 台服务器

先决条件

  1. 确保为您的域名设置了正确的 DNS 记录。您的负载均衡域名应指向您设置负载均衡器的服务器的 IP 地址。
  2. 您必须将应用程序部署到多台服务器:点击此处了解更多。
  3. 确保 Traefik 在所有服务器上运行。
  4. 将您的 fqdn 设置为您想要用于访问应用程序的完全限定域名。
  5. 应用程序在所有服务器上部署后,您需要在 /data/coolify/proxy/dynamic 目录中为 Traefik 创建动态配置,以便在服务器之间进行负载均衡。

动态配置

在 Coolify 的 UI 中,您可以转到服务器设置/代理选项卡,在那里您可以添加动态配置。

如果您想使用 https,以下配置有效。

yaml
http:
  middlewares:
    redirect-to-https:
      redirectscheme:
        scheme: https
    gzip:
      compress: true
  routers:
    lb-http:
      middlewares:
        - redirect-to-https
      entryPoints:
        - http
      service: noop
      # 将 <CHANGE_THIS_TO_YOUR_DOMAIN> 更改为您的域名,如 `example.com`,不带 `https://`
      rule: Host(`<CHANGE_THIS_TO_YOUR_DOMAIN>`)
    lb-https:
      middlewares:
        - gzip
      entryPoints:
        - https
      service: lb-https
      tls:
        certResolver: letsencrypt
      # 将 <CHANGE_THIS_TO_YOUR_DOMAIN> 更改为您的域名,如 `example.com`,不带 `https://`
      rule: Host(`<CHANGE_THIS_TO_YOUR_DOMAIN>`)
  services:
    lb-https:
      loadBalancer:
        servers:
          # 将 <CHANGE_THIS_TO_YOUR_IP_ADDRESS> 更改为您的服务器 IP 地址
          - url: 'http://<CHANGE_THIS_TO_YOUR_IP_ADDRESS>'
          - url: 'http://<CHANGE_THIS_TO_YOUR_IP_ADDRESS>'
          # 添加任意数量的服务器进行负载均衡
    noop:
      loadBalancer:
        servers:
          - url: ''

如果您想使用 http,以下配置有效。

yaml
http:
  middlewares:
    gzip:
      compress: true
  routers:
    lb-http:
      middlewares:
        - gzip
      entryPoints:
        - http
      service: lb-http
      # 将 <CHANGE_THIS_TO_YOUR_DOMAIN> 更改为您的域名,如 `example.com`,不带 `http://`
      rule: Host(`<CHANGE_THIS_TO_YOUR_DOMAIN>`)
  services:
    lb-http:
      loadBalancer:
        servers:
          # 将 <CHANGE_THIS_TO_YOUR_IP_ADDRESS> 更改为您的服务器 IP 地址
          - url: 'http://<CHANGE_THIS_TO_YOUR_IP_ADDRESS>'
          - url: 'http://<CHANGE_THIS_TO_YOUR_IP_ADDRESS>'
          # 添加任意数量的服务器进行负载均衡

一台服务器中的 2+ 个容器

先决条件

  1. 确保为您的域名设置了正确的 DNS 记录。您的负载均衡域名应指向您设置负载均衡器的服务器的 IP 地址。
  2. 您必须将应用程序部署到一台服务器中的多个容器。
  3. 确保 Traefik 在服务器上运行。

动态配置

如果您想使用 https,以下配置有效。

yaml
http:
  middlewares:
    redirect-to-https:
      redirectscheme:
        scheme: https
    gzip:
      compress: true
  routers:
    lb-https:
      tls:
        certResolver: letsencrypt
      middlewares:
        - gzip
      entryPoints:
        - https
      service: lb-https
      # 将 <CHANGE_THIS_TO_YOUR_DOMAIN> 更改为您的域名,如 `example.com`,不带 `http://`
      rule: Host(`<CHANGE_THIS_TO_YOUR_DOMAIN>`)
    lb-http:
      middlewares:
        - redirect-to-https
      entryPoints:
        - http
      service: noop
      # 将 <CHANGE_THIS_TO_YOUR_DOMAIN> 更改为您的域名,如 `example.com`,不带 `http://`
      rule: Host(`<CHANGE_THIS_TO_YOUR_DOMAIN>`)
  services:
    lb-https:
      loadBalancer:
        servers:
          # 将 <UUID_OR_HOST.DOCKER.INTERNAL>:<PORT> 更改为您的容器 UUID 或 host.docker.internal 和端口
          # UUID 是当您将端口映射到主机系统时使用
          # host.docker.internal 是当您没有将任何端口暴露给主机系统时使用
          - url: 'http://<UUID_OR_HOST.DOCKER.INTERNAL>:<PORT>'
          - url: 'http://<UUID_OR_HOST.DOCKER.INTERNAL>:<PORT>'
          # 添加任意数量的容器进行负载均衡
    noop:
      loadBalancer:
        servers:
          - url: ''

如果您想使用 http,以下配置有效。

yaml
http:
  middlewares:
    gzip:
      compress: true
  routers:
    lb-http:
      middlewares:
        - gzip
      entryPoints:
        - http
      service: lb-http
      # 将 <CHANGE_THIS_TO_YOUR_DOMAIN> 更改为您的域名,如 `example.com`,不带 `http://`
      rule: Host(`<CHANGE_THIS_TO_YOUR_DOMAIN>`)
  services:
    lb-http:
      loadBalancer:
        servers:
          # 将 <UUID_OR_HOST.DOCKER.INTERNAL>:<PORT> 更改为您的容器 UUID 或 host.docker.internal 和端口
          # UUID 是当您将端口映射到主机系统时使用
          # host.docker.internal 是当您没有将任何端口暴露给主机系统时使用
          - url: 'http://<UUID_OR_HOST.DOCKER.INTERNAL>:<PORT>'
          - url: 'http://<UUID_OR_HOST.DOCKER.INTERNAL>:<PORT>'
          # 添加任意数量的容器进行负载均衡