Files
Denozordec 2a8390e687
Publish telemt-api gateway Docker image / test (push) Successful in 27s
Publish telemt-api gateway Docker image / build-and-push (push) Successful in 1m27s
Enhance Dockerfile and documentation for GeoIP directory permissions
- Updated Dockerfile to create and set ownership for the /var/lib/telemt-gateway directory, ensuring the gateway user has the necessary permissions.
- Added documentation in GEOIP.md to clarify directory permissions required for GeoIP data downloads, including guidance on volume mounting and user ID consistency.
2026-03-30 01:54:29 +07:00

51 lines
4.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# GeoIP / GeoLite2 в шлюзе
При включённом **`geoip`** шлюз открывает один или два файла **MaxMind DB** (`.mmdb`) и обогащает ответ **`GET /api/agg/unique-ips`** (если не передан `?geo=false`).
## Нужны ли все три базы (City, Country, ASN)?
| База | Нужна ли отдельно | Зачем |
| --- | --- | --- |
| **GeoLite2-City** | Для геолокации — **да** (или только она) | Страна, город, англ. названия. |
| **GeoLite2-Country** | **Нет**, если есть City | В City уже есть страна; Country даёт только страну и **дублирует** часть данных City. |
| **GeoLite2-ASN** | **Опционально** | Номер автономной системы (ASN) и имя организации (провайдер/сеть), **не** заменяет город. |
Итого: минимум — **одна база City** для страны/города. Для «кто оператор сети» добавляют **ASN** (City + ASN вместе дают полную картину). **Three MMDB не обязательны** — достаточно **12 файлов** (City + при желании ASN).
## Поля в JSON
- Из **City**: `country_code`, `country_name`, `city_name`
- Из **ASN**: `asn`, `as_organization`
## Конфигурация
Нужен **хотя бы один** путь: `database_path` (City) и/или `asn_database_path` (ASN).
Пример с репозитория [P3TERX/GeoLite.mmdb](https://github.com/P3TERX/GeoLite.mmdb) (сырые `.mmdb` по HTTPS):
```yaml
geoip:
enabled: true
database_path: /var/lib/telemt-gateway/GeoLite2-City.mmdb
download_url: "https://github.com/P3TERX/GeoLite.mmdb/raw/download/GeoLite2-City.mmdb"
asn_database_path: /var/lib/telemt-gateway/GeoLite2-ASN.mmdb
asn_download_url: "https://github.com/P3TERX/GeoLite.mmdb/raw/download/GeoLite2-ASN.mmdb"
```
- Если локального файла нет, а указан соответствующий `*_download_url`, при старте выполняется загрузка.
- URL с суффиксом **`.gz`** обрабатываются как gzip; иначе тело ответа пишется в файл как есть (подходит для GitHub raw `.mmdb`).
### Права на каталог (permission denied)
Загрузка пишет файл во **всех** родительские каталоги `database_path` / `asn_database_path` (создаёт их через `mkdir`, если возможно). Процесс шлюза должен иметь право **создавать каталог** и **писать** в него.
- **Docker-образ** этого репозитория создаёт `/var/lib/telemt-gateway` и отдаёт его пользователю `gateway` — пути из примера выше подходят из коробки.
- Если вы монтируете свой volume на этот путь, убедитесь, что uid/gid совпадают с пользователем контейнера (например `65532`) или задайте в конфиге путь внутри уже доступного тома.
- Для быстрого теста без `/var/lib` можно указать, например, **`/tmp/telemt-gateway/GeoLite2-City.mmdb`** (учтите, что `/tmp` может очищаться).
## Лицензия
GeoLite2 распространяется MaxMind на условиях [лицензии](https://dev.maxmind.com/geoip/geolite2-free-data-feed). Сторонние зеркала и репозитории используйте на свой риск; для продакшена часто нужен свой ключ MaxMind и обновление БД.
Библиотека чтения: [`github.com/oschwald/geoip2-golang`](https://github.com/oschwald/geoip2-golang).