Перенос SiteKnockerBot состоялся

Вчера наконец-то определился, что делать с серверами. Решил всё же объединять SiteKnockerBot и сайт идеалистов и перейти на VDS с более высоким тарифом. Смущало, правда, что там канал всего 100 Мбит/с вместо 1 Гбит/с, как на прежнем. Но потом выяснилось, что этот 1 Гбит/с — это разделяемый канал между всеми VDSами на сервере, а на новом 100 Мбит/с — выделенный.
В итоге вчера весь день ушёл на то, чтобы переписать SiteKnockerBot на работу с Postgres и протестировать его локально. Сначала я думал, что всё будет предельно просто, исправлять потребуется только PHP-часть. Как оказалось, был неправ! Как раз с PHP-частью (она отвечает за интерфейс бота) всё прошло достаточно легко и быстро, а вот с Go пришлось повозиться. Сказался недостаток опыта. Первая ошибка вылезла из-за того, что для новых сайтов время последнего изменения было равно NULL, а я пытался сохранять его в обычную переменную time.Date. Как выяснилось, в этих случаях нужно использовать специальный тип pq.NullTime. Потом выяснилось, что передача параметризированных запросов тоже иначе сделана: через $1, $2 и т.д. вместо знаков вопроса. Ну и наконец, обнаружилось, что при конвертации таблицы проверок из MySQL в PostgreSQL не прописалось значение по умолчанию NOW() для столбца со временем. В итоге со всем этим просидел весь вечер, и даже не хватило времени поиграть в Heroes III. Ещё была мысль сделать настройки через .env-файл, как полагается, но руки так и не дошли. Ещё искал статьи по оптимизации настроек ядра для большого количества исходящих HTTP-соединений, вычитал про то, что имеет смысл поменять congestion control с cubic на bbr. Интереса ради спросил у ChatGPT и DeepSeek, какой они congestion control порекомендуют для этой ситуации, и они тоже предложили такое! (Эх, надо бы на Хабр или Hashnode статью написать про оптимизацию настроек под такое, но вряд ли соберусь. Какой-то блок в голове мешает, несмотря на то, что есть что сказать.)
А сегодня создал новый сервер и начал перенос. На удивление всё прошло достаточно хорошо и почти без нервов. Возможно, потому что сначала как следует продумал, что и как переносить. Только когда первый раз запустил интерфейсную часть бота, долго не мог понять, почему вроде всё работает, а бот не отвечает на команды. Разгадка оказалась простой: я забыл исправить обратно token Telegram, и он пытался получить запросы для тестового бота, а не основного. Следующий шаг: вроде всё работает, ошибок нигде нет, но время последней проверки не меняется. Вот тут я чуть было не сломал мозг. А разгадка оказалась простой: дело в часовых поясах. На новом сервере по умолчанию UTC+2, а при конвертации лога проверок это не было учтено. Поэтому записи шли с временной меткой 17:20, 17:39, а в логе были уже 18:10.
Но главный сюрприз ждал меня в конце. Когда я решил, что всё, перенос закончен, и собрался было удалить старый сервер, оказалось, что я этого сделать не могу из-за того, что не указал контактный телефон при регистрации. А при попытке его указать возникает ошибка, что не получается отправить проверочный код в SMS. В общем, так и пришлось писать в техподдержку. Но ответят только завтра, и получается лишний проплаченный день.
В целом мне новый сервер понравился! Прогнал бота в тестовом режиме, вроде лавинообразного возникновения ошибок из-за слишком большого количества соединений не наблюдалось. Да и потом, когда запустил уже в обычном режиме, не видел ни одного разрыва ложного срабатывания. (Эх, надо бы прикрутить к боту какой-нибудь анализатор событий, чтобы копить статистику, но всё руки не доходят.)
Сайт Идеалистов пока ещё не переносил, займусь этим завтра.