From 4adba055329e755b0f4fe621031421cc2d2c7c20 Mon Sep 17 00:00:00 2001 From: PTah Date: Wed, 22 Apr 2026 10:16:34 +1000 Subject: [PATCH] docs: restore haproxy-kalinamall.md with git.kalinamall.ru guide Made-with: Cursor --- README.md | 3 +- docs/haproxy-kalinamall.md | 85 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 docs/haproxy-kalinamall.md diff --git a/README.md b/README.md index fc3923a..cffda46 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ - `haproxy/haproxy.cfg` — полный конфиг HAProxy (с Gitea, Zabbix, Synology, RDP, SMTP). - `docs/haproxy-kalinamall.cfg` — периметровый HAProxy kalinamall.ru (TCP+SNI `:443`, Exchange/RDS/ERP/SMTP) **и** Gitea `git.kalinamall.ru` → `192.168.160.129:443`, SSH `:2222`. +- `docs/haproxy-kalinamall.md` — описание схемы kalinamall.ru, `git.kalinamall.ru`, DNS и `app.ini`. - `gitea/docker-compose.yml` — запуск Gitea в Docker. - `gitea/app.ini.example` — шаблон конфигурации Gitea. - `scripts/migrate-github-to-gitea.sh` — массовая миграция репозиториев GitHub в Gitea. @@ -40,7 +41,7 @@ - Внутренний доступ к Gitea: `192.168.128.100:3000`. - Git SSH: внешний `:2222` на HAProxy -> внутренний `192.168.128.100:2222`. -Отдельный контур **kalinamall.ru**: TLS на бэкендах (GlobalSign wildcard); HAProxy только маршрутизирует по SNI на `:443`. Конфиг с Gitea см. [`docs/haproxy-kalinamall.cfg`](docs/haproxy-kalinamall.cfg). На Gitea в `app.ini`: `ROOT_URL=https://git.kalinamall.ru/` и настройки SSH-домена/порта под внешний `:2222`. +Отдельный контур **kalinamall.ru**: TLS на бэкендах (GlobalSign wildcard); HAProxy только маршрутизирует по SNI на `:443`. Подробнее — [`docs/haproxy-kalinamall.md`](docs/haproxy-kalinamall.md), конфиг — [`docs/haproxy-kalinamall.cfg`](docs/haproxy-kalinamall.cfg). На Gitea в `app.ini`: `ROOT_URL=https://git.kalinamall.ru/` и настройки SSH-домена/порта под внешний `:2222`. ## 1) Установка Gitea diff --git a/docs/haproxy-kalinamall.md b/docs/haproxy-kalinamall.md new file mode 100644 index 0000000..b1001d0 --- /dev/null +++ b/docs/haproxy-kalinamall.md @@ -0,0 +1,85 @@ +# HAProxy и Gitea для kalinamall.ru + +Этот документ описывает **боевую схему kalinamall.ru**: HAProxy на периметре в режиме **TCP + SNI на порту 443** без завершения TLS на самом HAProxy — соединение с шифрованием уходит на внутренние серверы (**GlobalSign wildcard *.kalinamall.ru** на каждом бэкенде, включая Gitea). + +Актуальный конфиг целиком лежит в репозитории: + +- **[`docs/haproxy-kalinamall.cfg`](haproxy-kalinamall.cfg)** + +## Общая логика + +| Снаружи клиент видит | HAProxy делает | Бэкенд | +|----------------------|----------------|--------| +| HTTPS по имени из списка SNI | Прозрачный TCP-туннель по выбранному правилу | Сервер с TLS на своём порту | + +Для **git.kalinamall.ru**: + +- По **SNI `git.kalinamall.ru`** на `:443` трафик идёт на **`192.168.160.129:443`** (`backend be_gitea`), проверка `check ssl verify none`. +- Сертификат **wildcard** должен быть настроен **на узле Gitea** (или на промежуточном TLS-терминаторе перед Gitea на этом IP): HAProxy только пересылает уже установленное клиентом TLS-соединение. + +По **SSH для Git**: + +- На HAProxy слушатель **`*:2222`** → **`192.168.160.129:2222`** (типичный SSH-порт контейнера Gitea на хосте). + +Остальные имена на том же `:443` (Exchange, RDS, ERP, SMTP на `:25`, stats на `:8404`) — как в файле конфигурации и комментариях к нему. + +## Имена и адреса для Gitea + +| Роль | Значение | +|------|----------| +| Публичный URL веб-интерфейса и HTTPS Git | `https://git.kalinamall.ru` | +| SSH Git (`clone` / `push`) | хост `git.kalinamall.ru`, порт **2222** (на периметре) | +| Бэкенд в LAN | **`192.168.160.129`** — HTTPS **443**, SSH **2222** | + +Если на HAProxy имя `git.kalinamall.ru` резолвится во внутренний адрес — это удобно для диагностики из LAN; для самого HAProxy маршрутизация задаётся по **SNI**, а не по DNS на прокси. + +## Gitea: `app.ini` + +На сервере Gitea (не на HAProxy): + +- **`ROOT_URL=https://git.kalinamall.ru/`** +- В настройках SSH для пользователей укажите домен **`git.kalinamall.ru`** и внешний порт **`2222`** (тот, что опубликован на HAProxy). + +Убедитесь, что Gitea реально отдаёт **HTTPS на 443** на `192.168.160.129`, если в конфиге HAProxy указан именно этот порт. Если контейнер слушает только HTTP `:3000`, нужен отдельный TLS-фронт на этом хосте или изменение схемы публикации (см. комментарии в [`haproxy-kalinamall.cfg`](haproxy-kalinamall.cfg)). + +После правок перезапустите Gitea. + +## DNS + +- **Из интернета:** записи для нужных имён (в том числе `git.kalinamall.ru`) должны указывать на публичный IP HAProxy (или NAT на него). +- **Из LAN:** по желанию **Split DNS**, чтобы те же FQDN резолвились во внутренний адрес HAProxy или сервера. + +## Проверка после выкладки конфига HAProxy + +На узле HAProxy: + +```bash +sudo haproxy -c -f /etc/haproxy/haproxy.cfg +sudo systemctl reload haproxy +``` + +Проверки с клиента (после того как DNS и сертификаты готовы): + +```bash +curl -fsS -o /dev/null -w "%{http_code}\n" https://git.kalinamall.ru/api/healthz +ssh -T -p 2222 git@git.kalinamall.ru +``` + +Статистика HAProxy в примере конфига на порту `:8404`; в файле репозитория пароль — **заглушка**, на сервере задайте свой и не коммитьте секреты в Git. + +## Клиент SSH (`~/.ssh/config`) + +Пример: + +```sshconfig +Host git-kalinamall + HostName git.kalinamall.ru + User git + Port 2222 + IdentityFile ~/.ssh/id_ed25519 + IdentitiesOnly yes +``` + +## Отличие от варианта «TLS на HAProxy» + +В [`haproxy/haproxy.cfg`](../haproxy/haproxy.cfg) для домашней сети используется режим **HTTP на HAProxy**, сертификат PEM на прокси и бэкенд Gitea по **HTTP :3000**. В kalinamall.ru наоборот: **TLS до бэкенда**, один общий паттерн с Exchange/RDS/ERP.