Обложка канала

Типа про IT

1563 @tipaproit

Типа про IT и вот это вот всё — full stack development и современные инструменты, подборки и рекомендации, интересные находки и практические советы. Профессиональный авторский контент.

Типа про IT

4 года назад
Открыть в
🥳 На Громаде первое большое обновление — интеграция с Прихистком. Хороший результат, осталось только доработать поисковую механику дополнительными фильтрами. Но у Громады есть свой канал с новостями, я к вам не с этим, я к вам с наболевшим. Просто удивительно, на какую фигню может уходить куча ценного времени, которого и так мало. И вместо непосредственно разработки занимаешься то траблшутингом, то дебагингом, на самом ровном, казалось бы месте. Впрочем, а когда было не так? Тот же Helm для чего придумали? Чтобы ты такой helm install bla/blabla и у тебя через пару минут на кластере завёлся blabla, automagically. На деле же, у меня не возникло проблем только с bitnami/postgresql и спасибо им за это. Вот например. В качестве геокодинг-движка активно используется Nominatim, о котором я упоминал в прошлом посте. Сам по себе продукт тоже вызывает у меня вопросы, но ничего более зрелого я не нашёл, поэтому маємо шо маємо. У Nominatim довольно лаконичный API, из которого я использую только /reverse и /lookup. Их полнотекстовый /search абсолютно непригоден для адресного автокомплита (они где-то писали, что так и надо), поэтому для полей ввода адреса, которые вы видите на сайте, у меня собственный набор materialized views с индексами под капотом с дальнейшим реверсом через Nominatim. Для обработки данных с Прихистка мне потребовалось использовать в том числе и /search, потому что люди на Прихистке вбивают свою локацию в произвольной форме, точно известен только регион, а мне нужен как бы longitude и latitude, чтобы отобразить маркер. И когда настало время выкатываться, стало понятно, что с Nominatim в кластере что-то не так. Приложение, которое делает reverse geocoding через /search падает. Кубер его пытается переподнять, оно снова падает, ну вы поняли. Смотрю логи контейнера, а там от Nominatim прилетает какой-то непонятный html, потому и падает (оно и должно падать в таком случае). Но почему? Локально работает, остальные endpoint’ы работают, pod явно видит Nominatim… короче странно это всё. Запрос к API на /search , как я понял, зачем-то редиректился на UI, отчего два вопроса — почему у них такой конфиг Apache и зачем мне на сервере какой-то UI? Оказалось, что в Helm chart’е UI включен по-дефолту. Выключаем. Падает весь Nominatim. Включаем обратно 🙂 Форкаю chart, разбираюсь. Вырезаю весь намёк на UI, чищу немного остальные ямлы, раскатываю уже свою версию. Работает, но не /search. При чём не работает он как-то по-тихому. Смотрю логи Nominatim, а ему нужен какой-то tokenizer.php, но по нужному пути его нет. Гугление ничем не помогло… но почему всё работает локально? Потому что локально в одном контейнере поднимаются и Postgres, и сервис, а в Dockerfile есть такой интересный трюк, который нельзя применить в случае, когда у тебя база и приложение разнесены. Да, chart сломан. Простое решение — берём локально tokenizer и доставляем его через ConfigMap по адресу. Ура, всё работает! Вот и ночь прошла. Короче говоря, K8s — это весело.