Как настроить Caddy 2 в файле для создания докеров для обратного прокси-сервера без привязки Caddyfile?

У меня есть файл docker-compose с двумя службами:

  • мое веб-приложение выставляет порт 3000
  • caddy, он работает как обратный прокси для моего веб-приложения и дает HTTPS

Он отлично работает, если я использую Caddyfile с привязкой:

caddy:
    image: caddy:2.0.0-alpine
    ports:
      - 80:80
      - 443:443
    volumes:
      - caddy:/data
      - .Caddyfile:/etc/caddy/Caddyfile

Файл Caddy довольно прост:

my-domain.com {
    reverse_proxy my-app:3000
}

Но я хотел бы развернуть его на сервере без загрузки Caddyfile. Я хочу настроить свой docker-compose.yml примерно так:

version: "3"

services:
  my-app:
    image: my-app
    expose:
      - 3000

  caddy:
    image: caddy:2
    ports:
      - 80:80
      - 443:443
    environment:
      - reverse_proxy_from=my-app:3000
      - reverse_proxy_to=my-domain.com
    volumes:
      - caddy:/data


volumes:
  caddy:

Также, возможно, это можно сделать через Caddy API. Когда я попытался настроить обратный прокси-сервер на голой ОС, он работает. Но когда я попытался сделать это с помощью докера (docker-compose exec caddy caddy reverse-proxy --from my-site.net --to my-app:3000), я получил некоторые непонятные мне сообщения об ошибках:

root@test:/xxx# docker-compose exec caddy caddy reverse-proxy --from my-site.net --to app:3000
2020/05/15 11:49:57.787 WARN    admin   admin endpoint disabled
2020/05/15 11:49:57.787 INFO    http    server is listening only on the HTTPS port but has no TLS connection policies; adding one to enable TLS {"server_name": "proxy", "https_port": 443}
2020/05/15 11:49:57.787 INFO    http    enabling automatic HTTP->HTTPS redirects    {"server_name": "proxy"}
2020/05/15 11:49:57 [INFO][cache:0xc000726820] Started certificate maintenance routine
2020/05/15 11:49:57.788 INFO    tls cleaned up storage units
reverse-proxy: loading new config: http app module: start: tcp: listening on :80: listen tcp :80: bind: address already in use

person Max Block    schedule 15.05.2020    source источник
comment
Я определенно не эксперт по Docker, так что не верьте мне на слово о The Right Way, но в разделе services/caddy вы можете указать command для указания аргументов для передачи команде caddy.   -  person λuser    schedule 24.05.2020


Ответы (2)


Это может быть интересно:

https://hub.docker.com/r/lucaslorentz/caddy-docker-proxy

Согласно описанию в репозитории github, на которое он ссылается, как он работает, он сканирует метаданные Docker в поисках меток, указывающих, что служба или контейнер должны быть представлены на caddy.

Затем он создает в памяти Caddyfile с записями веб-сайта и директивами прокси, указывающими на DNS-имя каждой службы Docker или IP-адрес контейнера.

Каждый раз, когда объект Docker изменяется, он обновляет Caddyfile и запускает перезагрузку Caddy с нулевым временем простоя.

person r0tt3n    schedule 28.05.2020

@λuser был прав, вы можете переопределить параметр command и достичь своей цели:

caddy:
    image: caddy:2.4.3-alpine
    restart: unless-stopped
    command: caddy reverse-proxy --from https://my-domain.com:443 --to http://my-app:3000
    ports:
      - 80:80
      - 443:443
    volumes:
      - caddy:/data
    depends_on:
      - my-app

› Я получил непонятные мне сообщения об ошибках
› listen tcp :80: bind: адрес уже используется

Освободите порт 80, и все готово.

person limitedeternity    schedule 05.07.2021