LINUX.ORG.RU

geoip 0.1.0

 , , ,


1

3

Тихо и незаметно вышла первая версия проекта 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

★★★★★

Проверено: hobbit ()
Последнее исправление: hobbit (всего исправлений: 2)
Ответ на: комментарий от usi_svobodi

На Си неудобно писать асинхронный код (а это нынче стандарт для веб-приложений, чтобы держать нагрузку), плюс дефицит веб-фреймворков (роутинг, авторизация, внедрение зависимостей, вот это всё). Пришлось бы очень много велосипедить. А на Rust достаточно батареек

KivApple ★★★★★
() автор топика
Последнее исправление: KivApple (всего исправлений: 1)
Ответ на: комментарий от LINUX-ORG-RU

Там что то сумбурное про способность софта на си протекать бесконтрольно.

Лучше помоги мне найти утечки памяти в луа, а? Я уже в панике. Казалось - нашел, а это промежуточная цепочка.

LightDiver ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Хотя бы предложи по каким параметрам можно ценивать автоматически. Я полез уже глобальную таблицу парсить. Пока по количествам ключей. По чему еще можно?

LightDiver ★★★★★
()

Это же все можно сделать одним пыхоскриптом на коленке за час.

Anoxemian ★★★★★
()
Ответ на: комментарий от LightDiver

Поменьше бы ллмками генерил, а побольше сам писал =) У тебя уже должно быть понимание как память выделяется и как освобождается, единственный способ «утечки» это когда ты сам явно препятствуешь ещё освобождению когда приходит GC, ну или интерпретатор с багом каким допустим, или дёргается что-то внешнее просто средствами lua.

Ну расставляй ручками collectgarbage("collect") из наружи в глубь, и замеряй паиять, увидишь долгожданный её дроп, вникай в ту область кода куда совал последний раз. В погоне за автоматизацией и автогенерированием, ты теряешь понимание того как у тебя твой язык и его реализация работают и превращаешь всё в тыкание палочкой. (я тоже такой же аболтус, но всё же)

Ну и когда код превращается в один непрерывный конвеер из метатаблиц, так что самый первый край проброшен до самого последнего то получается что куча данных намертво связаны друг с другом, GC приходит, проходит по этой вермишели и видит что нет данных на которые никто не ссылается, всё либо таблица в таблице, либо таблица через метатаблицу в таблице переплетено, машет ручкой типа «ну ок, раз ты так решил» и уходит.

Ну, допустим, где проблемный код? И что ты подразумеваешь под словами «течёт»? Может у тебя происходит некое накопление данных просто.


Но это всё в рамках новости офтоп и нас забанят если будем продолжать.

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 2)

А зачем geoip в виде rest api? Для тех кто не смог найти либу для своего языка? Вспоминается статья на Хабре где описывается реализация фильтра Блума в виде веб сервиса

cobold ★★★★★
()
Последнее исправление: cobold (всего исправлений: 1)
Ответ на: комментарий от cobold

Настраиваемое автообновление баз. Библиотеки решают вопрос чтения MMDB формата, но откуда ты будешь получать эту БД - твои проблемы. А сервис решает именно этот вопрос. В принципе, ничто не мешает каталог с MMDB файлами зашарить со своим приложением и использовать сервис как просто автообновлятор.

Плюс embedded устройства, которым нужно куда-то постучаться и сконфигурироваться под часовой пояс, язык и т. п. локации. Таскать с собой GeoIP БД, да ещё и обновлять её слишком накладно, плюс в любом случае нужно дёрнуть сервис как минимум, чтобы узнать внешний IP. А тут к IP идёт сразу вся информация, плюс POSIX таймзона (то есть подходит даже в ситуации, когда на устройстве нет tzdata вообще - всякие ESP32 и прочие Arduino). И tzdata, используемый для вычислений сервисом, тоже автообновляется.

KivApple ★★★★★
() автор топика
Последнее исправление: KivApple (всего исправлений: 5)
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.