# Только EU: WireGuard и дополнение к ai-hub

Применяется к полному `compose.yml` из `../../deployment/` с Open WebUI. Адреса, DNS и разрешения firewall — в [общем README](../README.md).

## WireGuard

```sh
sudo apt-get update
sudo apt-get install -y wireguard
sudo -i
install -d -m 700 /etc/wireguard
cd /etc/wireguard
umask 077
wg genkey > wg-ai.key
wg pubkey < wg-ai.key > wg-ai.pub
cat wg-ai.pub
```

Передайте только публичный `wg-ai.pub` на RU. Сохраните [EU-шаблон](wg-ai.conf.example) как `/etc/wireguard/wg-ai.conf`: `PrivateKey` — из локального `wg-ai.key`, `PublicKey` соседа — из RU `wg-ai.pub`. Публичный адрес RU используется в правиле firewall UDP 51820; Endpoint на EU не нужен, его сообщает подключившийся RU-peer.

```sh
chmod 600 /etc/wireguard/wg-ai.conf
systemctl enable --now wg-quick@wg-ai
exit
```

## ai-hub

Добавьте в существующий `.env` два домена RU:

```text
RU_ROUTER_DOMAIN=router-ru.example.com
RU_CHAT_DOMAIN=chat-ru.example.com
```

В `compose.yml`, в `services.caddy.environment`, допишите:

```yaml
      RU_ROUTER_DOMAIN: ${RU_ROUTER_DOMAIN:?Set RU_ROUTER_DOMAIN}
      RU_CHAT_DOMAIN: ${RU_CHAT_DOMAIN:?Set RU_CHAT_DOMAIN}
```

В `services.open-webui.environment` измените две строки, чтобы чат работал по обоим доменам:

```yaml
      WEBUI_URL: ""
      CORS_ALLOW_ORIGIN: https://${CHAT_DOMAIN:?Set CHAT_DOMAIN};https://${RU_CHAT_DOMAIN:?Set RU_CHAT_DOMAIN}
```

В существующем `Caddyfile` добавьте RU-домены к блокам роутера и чата. Итоговый файл:

```text
{
	email {$ACME_EMAIL}
	servers {
		protocols h1 h2
	}
}

{$ROUTER_DOMAIN}, {$RU_ROUTER_DOMAIN} {
	reverse_proxy router:20128 {
		flush_interval -1
	}
}

{$CHAT_DOMAIN}, {$RU_CHAT_DOMAIN} {
	reverse_proxy open-webui:8080 {
		flush_interval -1
	}
}
```

Из каталога `ai-hub` примените изменения:

```sh
chmod 600 .env
docker compose config --quiet
docker compose up -d --force-recreate caddy open-webui
```

В `CORS_ALLOW_ORIGIN` два HTTPS-адреса разделены `;`. Старые EU-домены остаются в Caddy рядом с новыми RU-доменами.

Итоговые файлы для сверки: [compose.yml](compose.yml), [.env.example](env.example), [Caddyfile](Caddyfile.txt). В рабочем каталоге остаются существующие `.env`, `compose.yml` и `Caddyfile`.
