Представлен первый рабочий выпуск geoip 0.1, открытого self-hosted сервиса GeoIP REST API, написанного на Rust. Решение опубликовано на GitHub под лицензией MIT.

Проект нацелен на упрощение интеграции GeoIP в другие приложения. Решение позволяет абстрагировать обновления баз данных и работу с форматом MMDB. В проекте поддерживается работа на ОС Linux и Mac OS X. Сборки решения должны без проблем работать на других UNIX-совместимых системах, на Windows не поддерживается работа с таймзонами (но можно использовать WSL). В сети доступно демо решения.

Основные возможности проекта geoip:

  • получение информации об IP‑адресе (страна, город, почтовый индекс, координаты, оператор и тому подобное) по REST API с использованием данных MaxMind GeoLite2 (бесплатно) и MaxMind GeoIP (платно);

  • определение текущего IP‑адреса (отдельный эндпойнт + параметр ip основного эндпойнта опционален);

  • настраиваемые автоматические обновления баз данных (либо с официальных URL MaxMind с указанием Account ID и Licence Key, либо со своего кастомного URL без и с авторизацией, также можно задавать периодичность проверок обновлений);

  • ко всем результатам содержащим поле timezone добавляется дополнительное поле posix_timezone (например, Europe/Paris превращается в «CET-1CEST,M3.5.0,M10.5.0/3»). Это позволяет реализовывать автоматическую настройку часового пояса на встраиваемых системах (например, ESP32 и другие newlib таргеты без tzdata). Уникальная функция, недоступная в других проектах;

  • база данных часовых поясов также автоматически обновляется (можно настраивать интервал, URL, авторизацию, по умолчанию используется официальный сайт IANA), при отключённых обновлениях используется системная;

  • архивы с актуальными базами данных могут быть загружены с самого сервиса по HTTP(S) (таким образом, один сервис может проксировать данные для других, чтобы уменьшать использование квоты MaxMind);

  • можно защитить эндпоинты с данными опциональным API ключом;

  • имеется веб‑интерфейс для ручных запросов с опциональной поддержкой OpenStreetMap;

  • имеется OpenAPI спецификация и Swagger UI в самом сервисе для удобной интеграции со своими проектами;

  • имеется готовый Docker образ для быстрого развёртывания.