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

4.0 KiB
Raw Permalink Blame History

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 (сырые .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.