#1232: Конфигурация с несколькими балансировщиками
Отредактирована: 110 дней назадСимптомы
Необходимо настроить две и более витрины, которые будут находиться в разных географических точках и с разными доменными именами, которые будут ходить в один и тот же инстанс Swarmica. Как это сделать?
Решение
В данной статье приводится решение для двух внешних балансировщиков nginx, по аналогии можно применять решение и для другого количества и типов балансировщиков.

Подготовка Swarmica
1. В файле /root/swarmica/.env добавьте адреса балансировщиков в переменную DJANGO_ALLOWED_HOSTS:
DJANGO_ALLOWED_HOSTS=my.swarmica.tld,balancer1.swarmica.tld,balancer2.swarmica.tld
2. В файле /root/swarmica/docker-compose.yml везде, где используется директива Host, добавьте адреса балансировщиков, например, так:
services:
frontend:
image: reg.gl.swd.im/swarmica/frontend:${SW_FRONTEND_VERSION}
depends_on:
- django
restart: always
volumes:
- ./robots.txt:/robots.txt:ro
- swarmica_static:/admin_static:ro
- swarmica_ugc:/attachments:ro
labels:
- "traefik.enable=true"
- "traefik.http.routers.nginx.entrypoints=web-secure"
- "traefik.http.routers.nginx.rule=Host(`${SW_HOSTNAME}`) || Host(`balancer1.swarmica.tld`) || Host(`balancer2.swarmica.tld`)"
- "traefik.http.routers.nginx.tls.certresolver=letsencrypt"
- "traefik.http.routers.nginx.middlewares=secure-headers,compression"
- "traefik.http.routers.nginx.priority=10"
Как правило, это необходимо сделать для сервисов frontend, django, django-websocket, helpcenter.
3. Перезагрузите сервисы:
sudo su -
cd /root/swarmica
docker compose down
docker compose up -d
Настройки балансировщиков (nginx)
1. Предварительно, установите и настройте nginx на каждом балансировщике
2. Получите SSL сертификаты для доменных имен и добавьте их в конфигурацию nginx
3. В директиве server сайта (виртуального хоста), который отвечает за обслуживание доменного имени балансировщика, замените секцию, отвечающую за location /, так, чтобы получилась такая конфигурация:
server {
listen 80 default_server;
listen [::]:80 default_server;
listen 443 ssl;
server_name balancer1.swarmica.tld;
ssl_certificate /etc/nginx/ssl/balancer1.swarmica.tld.crt;
ssl_certificate_key /etc/nginx/ssl/balancer1.swarmica.tld.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
proxy_pass https://my.swarmica.tld;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
add_header X-Upstream $upstream_addr;
}
}
4. Перезагрузите nginx
invoke-rc.d nginx restart
5. Если необходимо использование различных брендов, то в балансировщики можно добавить указание бренда через заголовок:
proxy_set_header X-Swarmica-Brand: UID