- 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.
51 lines
4.0 KiB
Markdown
51 lines
4.0 KiB
Markdown
# 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 не обязательны** — достаточно **1–2 файлов** (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).
|