Решил я в понедельник развернуть на тестовом стенде один из внутренних проектов. Сейчас это по сути набор сверстанных страниц на react/nextjs.
Разворачивать решил на хостинге timeweb.cloud с помощью Coolify. Вы сразу спросите (или не спросите): а зачем timeweb, он ведь не самый стабильный хостинг в ру-сегменте? Все в порядке, там крутятся либо тестовые стенды либо внутренние проекты. Проще оплачивать через СБП. Остальные его плюшки и проблемы заслуживают отдельного поста.
Про Coolify мы уже писали, вот тут, с ним задеплоить приложение суперпросто и быстро, особенно frontend. Если Coolify уже развернут, достаточно подключить по ssh новый сервер, добавить нужный репозиторий, прописать DNS записи для какого-нибудь домена/поддомена и указать переменные окружения. Все остальное Coolify сделает сам:
• нет docker — ну не беда, сам посмотрит что за приложение, и скорее всего поймет как его деплоить, какие скрипты запускать;
• сам настроит traefik, выпустит сертификаты и тд;
Но в этот раз что-то пошло не так. Сборка проходит, контейнер запускается, Next.js слушает 0.0.0.0:3000 — а сайт не открывается. ERR_TIMED_OUT.
Что только не проверяли: сети docker, labels для traefik, порты, DNS. Всё на месте. Traefik работает, контейнер работает, друг друга видят. Но сайт — нет.
Копнули глубже — проблема в SSL. Let's Encrypt не мог выдать сертификат, Traefik редиректил HTTP → HTTPS, HTTPS без сертификата — таймаут. Замкнутый круг.
Почему не выдавал сертификат? Запустили letsdebug.net и увидели:
«A timeout was experienced while communicating with 37.252.21.88 over port 80»
Серверы Let's Encrypt просто не могут достучаться до российских IP. Порт 80 снаружи — недоступен.
Вот и весь детектив. Решили переехать на хостер вне России. Hetzner, DigitalOcean и всё заработало бы с первого раза без танцев с бубном.
Coolify тут ни при чём. Но магия, к которой я привык — «подключил репо, всё само заработало», немного угасла. Потому что теперь появился ещё один шаг: думать про сертификаты отдельно. И это на внутреннем проекте, где я сам волен выбирать где хоститься.
В продакшене всё сложнее, т.к. условия диктует бизнес. Где хоститься, какие требования к инфраструктуре. И если придётся получать сертификаты через какую-нибудь минцифру — это уже совсем другая история.
P. S. Раз уж заговорили о сертификатах: если у вас есть скрипты с автообновлением, срочно проверьте их. Убедитесь что в очередной период обновления всё не сломается тихо и незаметно.
#михаил_дашкевич
🤟 Сайт | ТГ-канал | Наш чат
