Тихо и незаметно вышла первая версия проекта geoip — self-hosted сервиса GeoIP REST API, написанного на Rust.
Функциональность:
- Получение информации об 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 образ для быстрого развёртывания
docker run \ -e MAXMIND_ACCOUNT_ID=XXXX \ -e MAXMIND_LICENCE_KEY=YYYY \ -e OSM_TILES_URL="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png" \ # Необязательно -v geoip_data:/data \ -p 8080:8080 \ ghcr.io/quoi-dev/geoip:latest
Лицензия: MIT.
Проект нацелен на упрощение интеграции GeoIP в другие приложения, позволяя абстрагировать обновления баз данных и работу с форматом MMDB. Поддерживается работа на ОС Linux и Mac OS X, должен без проблем работать на других UNIX-совместимых системах, на Windows не поддерживается работа с таймзонами (но можно использовать WSL).
>>> GitHub




