- 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.
4.0 KiB
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 (сырые .mmdb по HTTPS):
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 на условиях лицензии. Сторонние зеркала и репозитории используйте на свой риск; для продакшена часто нужен свой ключ MaxMind и обновление БД.
Библиотека чтения: github.com/oschwald/geoip2-golang.