docs: restore haproxy-kalinamall.md with git.kalinamall.ru guide

Made-with: Cursor
This commit is contained in:
PTah
2026-04-22 10:16:34 +10:00
parent 25a9e5d972
commit 4adba05532
2 changed files with 87 additions and 1 deletions
+2 -1
View File
@@ -11,6 +11,7 @@
- `haproxy/haproxy.cfg` — полный конфиг HAProxy (с Gitea, Zabbix, Synology, RDP, SMTP). - `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.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/docker-compose.yml` — запуск Gitea в Docker.
- `gitea/app.ini.example` — шаблон конфигурации Gitea. - `gitea/app.ini.example` — шаблон конфигурации Gitea.
- `scripts/migrate-github-to-gitea.sh` — массовая миграция репозиториев GitHub в Gitea. - `scripts/migrate-github-to-gitea.sh` — массовая миграция репозиториев GitHub в Gitea.
@@ -40,7 +41,7 @@
- Внутренний доступ к Gitea: `192.168.128.100:3000`. - Внутренний доступ к Gitea: `192.168.128.100:3000`.
- Git SSH: внешний `:2222` на HAProxy -> внутренний `192.168.128.100:2222`. - 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 ## 1) Установка Gitea
+85
View File
@@ -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.