Ghost на сервере: частые ошибки и решения
Ghost стабилен, но как Node.js-приложение имеет свои типичные грабли: блог не стартует, Nginx отдаёт 502, не подключается к базе MySQL, не выпускается SSL, обрывается обновление или процесс падает из-за нехватки памяти. Практически все частые ошибки Ghost на сервере объясняются несколькими причинами — упавший процесс Node, база, права, конфиг прокси, ресурсы — и решаются понятным набором действий через Ghost-CLI и системные утилиты. Разберём их по порядку, начиная с самых частых.
Где искать причины. Главный инструмент диагностики Ghost — его собственные логи, доступные командой ghost log из каталога блога, а также файлы в content/logs/. Логи Nginx лежат в /var/log/nginx/error.log, база MySQL — в /var/log/mysql/, системный сервис Ghost виден через journalctl. Первый шаг при любой проблеме — выполнить ghost log и ghost status: CLI обычно прямо показывает причину сбоя, будь то ошибка подключения к базе, конфликт версии Node или падение процесса.
Полезно держать в голове цепочку, по которой проходит запрос к блогу: посетитель обращается к Nginx на порт 443, Nginx проксирует запрос на внутренний порт, где слушает Node.js-процесс Ghost, а тот берёт данные из MySQL. Почти любая ошибка укладывается в это звено: либо не отвечает Node (тогда 502), либо недоступна база (тогда Ghost не стартует или отдаёт ошибку), либо проблема на уровне Nginx и SSL (тогда сайт не открывается по HTTPS). Определив, на каком звене рвётся цепочка, вы сразу сужаете поиск и не тратите время на проверку исправных компонентов — это главный принцип диагностики Ghost.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Блог не стартует или показывает 502
Самая частая ситуация: сайт отдаёт 502 Bad Gateway. Это значит, что Nginx работает, но Node.js-процесс Ghost за ним не отвечает — упал или не запущен. Перейдите в каталог блога и проверьте статус:
cd /var/www/ghost
ghost status
Если Ghost остановлен или в состоянии error, попробуйте запустить и посмотреть лог:
ghost start
ghost log
В логе будет причина: чаще всего это ошибка подключения к базе, несовместимая версия Node.js после обновления системы или нехватка памяти. Частая причина падения после apt upgrade — обновление Node.js до версии, которую текущий Ghost не поддерживает. В этом случае верните поддерживаемую LTS-версию Node. Если процесс падает сразу после старта, читайте последние строки лога — там точная ошибка.
Ошибка подключения к базе данных
Ghost при старте пишет об ошибке подключения к MySQL. Проверьте, запущена ли база:
systemctl status mysql
Если сервис не запущен — стартуйте и смотрите, почему падал. Если база работает, но Ghost не подключается, проверьте параметры в конфиге блога config.production.json в каталоге Ghost: хост, имя базы, пользователь, пароль. Частая причина — сменился пароль пользователя базы или Ghost создавался с аутентификацией, несовместимой с текущей настройкой MySQL. Проверьте, что пользователь базы аутентифицируется по паролю (mysql_native_password), — Ghost-CLI требует именно этого.
Ещё одна частая причина — переполненный диск, из-за которого база уходит в режим только для чтения:
df -h
Почистите старые бэкапы, логи и, при необходимости, старые версии Ghost (CLI хранит предыдущие релизы для отката — их можно проредить).
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать VPSНе выпускается SSL Let's Encrypt
При установке или командой ghost setup ssl сертификат не выпускается. Let's Encrypt проверяет домен по HTTP, поэтому нужны условия. Первое: A-запись домена указывает на этот сервер. Проверьте:
dig +short vashdomen.ru
Адрес должен совпадать с IP сервера. Если домен недавно перенаправили, дайте DNS разойтись. Второе: порты 80 и 443 открыты в фаерволе (ufw allow 'Nginx Full') и не заняты другим сервисом. Третье: URL в конфиге Ghost совпадает с доменом, для которого выпускаете сертификат. Если ранее было много неудачных попыток, можно упереться в лимит Let's Encrypt — подождите час. После исправления повторите ghost setup ssl из каталога блога.
Сбой обновления Ghost
Обновление командой ghost update прервалось или блог после него не запускается. Хорошая новость: Ghost-CLI перед обновлением делает бэкап и хранит предыдущую версию, поэтому откат прост. Вернитесь на прошлую рабочую версию командой:
ghost update --rollback
Это восстановит предыдущий релиз. Затем разберитесь с причиной сбоя: чаще всего это несовместимая версия Node.js (новая версия Ghost требует более свежий Node), нехватка места на диске или прав. Проверьте требования к версии Node в примечаниях к релизу, обновите Node до нужной LTS, освободите место и повторите ghost update. Всегда делайте отдельный бэкап контента и базы перед крупным обновлением, помимо автоматического.
Процесс падает из-за нехватки памяти
Блог периодически становится недоступен, в логах Node — ошибки памяти или процесс перезапускается. Ghost экономен, но на 1 ГБ RAM под нагрузкой, при рассылках или тяжёлых темах памяти может не хватать. Посмотрите потребление и факты убийства процессов:
free -m
grep -i 'killed process' /var/log/syslog
Если Node регулярно убивает OOM-killer, серверу мало памяти. Частичное решение — добавить swap как страховку, но своп не заменяет RAM и замедляет работу. Правильный путь при стабильной нагрузке — увеличить память. Официальная рекомендация для Ghost — 2 ГБ, и для блога с рассылками и заметным трафиком это оправданно. На VPS MAATRIX память наращивается без переустановки, что снимает проблему без переноса блога.
Проблемы с рассылками и почтой
Ghost не отправляет письма — регистрационные, транзакционные или рассылки подписчикам. Важно понимать: для массовых рассылок Ghost использует внешний сервис (Mailgun), а не локальный SMTP. Если рассылки не уходят, проверьте настройки Mailgun в админке (Settings → Email newsletter) и корректность API-ключа и региона. Для транзакционных писем (вход, сброс пароля) Ghost использует SMTP, заданный в config.production.json в блоке mail.
Если транзакционные письма не доходят, проверьте настройки SMTP и то, что исходящие соединения не блокируются. Как и для любой почты с сервера, важны корректные DNS-записи домена отправителя (SPF, DKIM), которые настраиваются на стороне почтового сервиса. Диагностику отправки смотрите в ghost log — ошибки почты там отражаются с описанием причины.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать VPSОбсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Частые вопросы
Ghost отдаёт 502 — что делать?
Node.js-процесс за Nginx упал или не запущен. Выполните ghost status и ghost start, затем ghost log — там будет причина: ошибка базы, несовместимая версия Node или нехватка памяти. Частый триггер — обновление Node через apt upgrade.
Как откатить неудачное обновление Ghost?
Командой ghost update --rollback из каталога блога — CLI вернёт предыдущую версию из автоматического бэкапа. Затем устраните причину (обычно версия Node или место на диске) и повторите обновление.
Почему не уходят рассылки?
Массовые рассылки Ghost отправляет через внешний сервис Mailgun, а не локальный SMTP. Проверьте настройки и API-ключ Mailgun в админке. Транзакционные письма идут через SMTP из конфига — проверьте его отдельно.
Блог падает под нагрузкой — почему?
Обычно не хватает памяти, и Node убивает OOM-killer. Проверьте free -m и логи. Официальная рекомендация — 2 ГБ RAM. На VPS MAATRIX память увеличивается без переустановки, что решает проблему без переноса блога.
Нужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.