Грабли

"Сумасшедший человек делает одни и те же действия в надежде получить различный результат"©

Пару недель назад я наступил на те же грабли, которые дали мне по лбу год тому.

У нас есть несколько старых проектов, которые заказчик иногда просит поставить заново. Сдуть пыль, обновить зависимости, запустить. В прошлом году я решил переписать проект с Laravel на Rails, ожидаемо затянул сроки, получил минус в репутацию, хотя в итоге все работает хорошо.

В этом году нас попросили поднять еще один старый проект, сделанный на ларе. Учтя опыт, я не стал думать о том, чтобы его переписать, да и клиент не собирался платить деньги и ждать время. Но была одна проблема—приложение всегда деплоилось руками на VPS, надо было подымать nginx+php-fpm+mysql и настраивать всё вручную. Было несколько установочных скриптов, но они скорее всего уже устарели, так как версия PHP уже deprecated и не поддерживается.

Я решил сделать докер образ. Как это ни странно, но туториалов в интернетах по докеру для лары нет :) Вы конечно можете сейчас загуглить и тыкнуть первую ссылку, но там всё не то. Единого образа, в котором есть всё нужное и который не монтирует папку с проектом, а запекает её внутрь, нет.

Провозившись некоторое время с попытками собрать свой образ, я забил. Решил действовать по-другому, а именно—задеплоить всё на хероку. Мотивация у меня была такая: 100% к нам через пол-года-год придут с этим же проектом, надо будет его заново ставить. Если я сделаю деплой в хероку, то это будет работать одной кнопкой.

Хероку сам умеет всё ставить. Некоторое время потратил на то, чтобы объяснить ему, что мне нужна старая версия пыхи, в итоге всё как-то запустилось.

Однако дальше начались проблемы. Дело в том, что хероку по-умолчанию поддерживает только Postgresql. Mysql доступен в аддонах. Я наивно решил что с pg не будет проблем, и поставил его. О, как же я жалею об этом моменте! Внезапно оказалось, что у нас в приложении есть много запросов, которые используют mysql-специфичные конструкции, которые постгрес не ест. Группировки и сравнения по датам, временные интервалы, неявное приведение типов.

Дело еще больше осложнялось тем, что мой товарищ—кофаундер шлюпки, который в своё время писал этот проект, был доступен только парттайм. Кроме того, он (что естественно) за пару лет забыл уже что там было.

Часть запросов я поправил сам, часть запросов он, за что ему огромное спасибо.

После запросов пошли еще приколы. Как известно, на heroku эфемерная файловая система. У нас была функциональность, которая работала именно через файлы на диске. Конкретно—небольшая цмска и хранилище сертификатов для интеграции с платёжной системой. После редеплоя, естественно, всё это пропадало.

Товарищ переписал всё на хранение файлов в s3, благо это пара строк.

Следующая проблема была связана с платёжным шлюзом. Дело в том, что он требует наличия статического ІР адреса, которого у Хероку конечно же нет))))) Я попробовал сделать прокси на одном из серверов с белым ІР, но это не помогло, потому что я сделал HTTP прокси, а надо было SOCKS5. Подключил сервис прокси для Heroku, а дальше долго мучился с опциями cURL для PHP чтобы запрос правильно проходил (там ssl запрос с самоподписными сертификатами). Заработало.

Есть ещё проблемы, которые всплывают одна за другой, и они пока что не заканчиваются.

Честно говоря, я жалею о том, что не потратил день на настройку VPS. Тогда ничего из этого меня бы не ждало (ну, кроме случая, когда VPS полностью упадёт). Без товарища я бы реально не разобрался.

Второй раз я наступил на грабли, связанные с переписыванием проекта, или изменением его компонент. Больше так не буду.


Понравился материал? Подписывайся на мой телеграм канал: https://t.me/full_of_hatred