Skip to content

Reverse proxy и TLS

То, как устроены TLS и домены, зависит от способа установки Copula.

Автоматическая установка (мастер): Caddy включён

Мастер разворачивает Caddy (caddy:2.11.4-alpine, сервис copula-caddy) как часть стека:

  • Caddy — единственный сервис, публикующий порты 80 и 443.
  • Он автоматически получает и продлевает сертификат Let's Encrypt для домена инстанса (HTTP-01 challenge — порт 80 должен быть доступен, а DNS уже должен резолвиться).
  • Он проксирует HTTPS-трафик на copula-back.

Дополнительная настройка не требуется. Если вы используете собственный домен, его запись A должна указывать на сервер до начала подготовки — иначе выпуск сертификата завершится ошибкой.

Hairpin NAT

Если сервер не может обратиться к собственному публичному домену изнутри (роутер не поддерживает hairpin NAT), финальная health-проверка деплоя может завершиться ошибкой, хотя сама установка работоспособна. См. Устранение неполадок.

Ручная установка: собственный прокси

В ручном compose-стеке нет ни TLS, ни прокси — бэкенд слушает порт хоста 8901. Поставьте перед ним reverse proxy. Бэкенд обслуживает WebSocket-чат, поэтому прокси должен пересылать WebSocket upgrade.

Пример server-блока nginx, проксирующего https://copula.example.com на бэкенд:

nginx
server {
    listen 443 ssl;
    server_name copula.example.com;

    ssl_certificate     /etc/letsencrypt/live/copula.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/copula.example.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:8901;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # WebSocket support (the backend serves WebSocket chat)
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

Сертификаты получайте через certbot или установите собственные. Когда прокси поднят, добавьте https://<domain> как Space в приложении Copula.