Ghost CMS: установка на VPS
Ghost — блоговая платформа на Node.js, которую любят за скорость, чистый редактор и встроенные инструменты для платных подписок и рассылок. В отличие от WordPress, у Ghost нет плагинного зоопарка и PHP под капотом — зато есть жёсткие требования к версии Node.js и своя команда установки. Разберём, как поставить Ghost на чистый VPS правильно с первого раза, не упираясь в самую частую ошибку новичков — несовпадение версий Node.js.
Содержание
Что нужно перед установкой
Официальный способ поставить Ghost на свой сервер — через Ghost-CLI, консольный инструмент, который сам разворачивает окружение, настраивает Nginx и SSL. Перед тем как его запускать, подготовьте четыре вещи:
- VPS на Ubuntu (24.04 или 22.04 — самые предсказуемые варианты для Ghost);
- домен, A-запись которого уже указывает на IP сервера;
- пользователя не под root — Ghost-CLI отказывается ставить систему из-под root;
- открытые порты 80 и 443 в фаерволе.
Для одного блога с умеренным трафиком хватает 1–2 ГБ RAM — Ghost сам по себе лёгкий, ресурсы съедает в основном MySQL. Если планируете держать на том же сервере ещё несколько сайтов, закладывайте больше памяти заранее.
Если ещё не настроили доступ по SSH-ключу вместо пароля — сделайте это заранее, это касается любого VPS независимо от того, что на нём разворачивается: см. настройку SSH-ключей.
Создайте пользователя с sudo, если работаете под root:
adduser ghost-user
usermod -aG sudo ghost-user
su - ghost-user
Дальше все команды выполняем от этого пользователя.
Установка Node.js нужной версии — и главная ловушка
Вот здесь чаще всего всё ломается. Ghost жёстко привязан к конкретным веткам Node.js и не запускается на «слишком новой» или «слишком старой» версии — при несовпадении ghost install падает с ошибкой о неподдерживаемой версии Node.js, даже если Node только что стоял свежий с сайта nodejs.org. Перед установкой всегда сверяйтесь с официальной документацией Ghost, какая ветка Node.js поддерживается на момент установки — требования меняются от релиза к релизу, и цифра, актуальная сегодня, через полгода уже может быть не той.
Самый надёжный способ поставить нужную ветку — через NodeSource. Например, для установки 20-й ветки (проверьте на момент установки, что это актуальная поддерживаемая ветка Ghost):
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt -y install nodejs
Проверьте версию:
node -v
npm -v
Если на сервере уже стоит другая версия Node.js (например, из стандартного репозитория Ubuntu или поставленная под другой проект), её нужно снести или переключить через nvm, иначе Ghost-CLI подхватит не ту ветку. Держать на одном сервере Ghost вместе с другим Node.js-проектом, которому нужна другая версия, — источник постоянных конфликтов; для такого случая разумнее развести проекты по разным VPS или использовать nvm с явным указанием версии для каждого.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать VPSУстановка MySQL
Ghost умеет работать на SQLite, но для продакшена официально рекомендуется MySQL — SQLite в документации Ghost помечен как вариант для разработки и локальных тестов, не для боевого сайта с посетителями. Общие принципы установки и защиты MySQL на VPS подробно разобраны в отдельном гайде, здесь — минимум для Ghost. Поставьте сервер MySQL:
sudo apt update
sudo apt -y install mysql-server
sudo mysql_secure_installation
mysql_secure_installation задаст пароль root, уберёт тестовую базу и анонимных пользователей — не пропускайте этот шаг на боевом сервере. Отдельного пользователя и базу под Ghost создавать вручную не обязательно: Ghost-CLI на этапе установки сам спросит данные для подключения к MySQL и с правами root MySQL создаст нужную базу автоматически. Если хотите завести отдельного пользователя базы с ограниченными правами именно под Ghost, сделайте это до запуска ghost install и укажите его данные вручную при настройке — это чуть безопаснее, чем подключение под root MySQL.
Установка Ghost-CLI и nginx
Ghost-CLI ставится глобально через npm:
sudo npm install ghost-cli@latest -g
Проверьте, что команда доступна:
ghost version
Ghost-CLI сам поставит и настроит Nginx как обратный прокси перед Node.js-приложением Ghost — вручную конфиг писать не придётся, если согласиться на предложенные шаги установки (принцип тот же, что при ручной настройке Nginx как реверс-прокси, только за вас это делает CLI). Убедитесь только, что Nginx ещё не установлен и не занят чужим конфигом на 80/443 портах — если на сервере уже крутится другой сайт на Nginx, Ghost-CLI спросит, ставить ли свой конфиг, и корректно впишется рядом при условии, что домены разные.
Установка Ghost командой ghost install
Создайте каталог для сайта (не в домашней папке пользователя — Ghost-CLI требует отдельную директорию, обычно в /var/www/), выдайте на него права и запустите установку:
sudo mkdir -p /var/www/ghost
sudo chown ghost-user:ghost-user /var/www/ghost
cd /var/www/ghost
ghost install
Мастер установки задаст по порядку:
- URL блога (домен с https://, например
https://blog.vashdomen.ru); - хост, пользователь, пароль и имя базы MySQL;
- название инстанса (можно оставить по умолчанию);
- настроить ли Nginx — отвечайте да, если хотите, чтобы Ghost-CLI сам собрал конфиг;
- настроить ли SSL через Let's Encrypt — отвечайте да, если домен уже резолвится на сервер (это обязательное условие для выпуска сертификата);
- настроить ли systemd-сервис — да, чтобы Ghost поднимался автоматически при перезагрузке сервера;
- запустить ли Ghost сразу после установки.
Если на этапе SSL домен ещё не успел раскрутиться в DNS, Ghost-CLI откажется выпускать сертификат — сначала дождитесь, пока dig +short blog.vashdomen.ru начнёт возвращать IP сервера, и только потом соглашайтесь на этот шаг (или выпустите сертификат позже отдельной командой ghost setup ssl). Под капотом используется тот же Let's Encrypt, что и при ручном выпуске SSL для любого другого сайта.
Первый вход в админку и базовая проверка
После успешной установки Ghost доступен по указанному домену, а панель управления — по адресу /ghost:
https://blog.vashdomen.ru/ghost
При первом заходе система предложит создать учётную запись владельца сайта — укажите email и надёжный пароль, заполните название публикации. Это первый и единственный админ по умолчанию; остальных авторов и редакторов добавляют уже из самой панели.
Полезные команды Ghost-CLI для повседневной работы с уже установленным сайтом:
ghost status # состояние сервиса
ghost restart # перезапуск
ghost log # последние логи
ghost update # обновление Ghost до новой версии
Все команды выполняются из каталога установки (cd /var/www/ghost), иначе Ghost-CLI не поймёт, к какому сайту применять команду — это особенно важно, если на одном сервере поднято несколько инстансов Ghost в разных папках.
Резервное копирование и что делать при проблемах
Ghost хранит контент в двух местах: базе MySQL (тексты, настройки) и файловой системе (content/images, content/themes, content/data для встроенных бэкапов настроек). Полноценный бэкап должен включать оба компонента:
mysqldump -u root -p ghost_production > ghost_db_backup.sql
tar -czf ghost_content_backup.tar.gz /var/www/ghost/content
Замените ghost_production на реальное имя базы, если задавали своё при установке — Ghost-CLI создаёт его на основе URL блога.
Если после установки сайт не открывается, порядок диагностики обычно такой:
| Симптом | Куда смотреть |
|---|---|
| Сайт не отвечает | ghost status, затем ghost log |
Ошибка версии Node.js при ghost install | node -v — сверьте с требуемой веткой в документации Ghost |
| 502 от Nginx | конфиг в /etc/nginx/sites-available/, синтаксис nginx -t |
| SSL не выпустился | dig +short домен — резолвится ли домен на IP сервера |
| MySQL не подключается | systemctl status mysql, правильность пароля в config-файле Ghost |
Конфигурация подключения к базе и прочие параметры сайта лежат в файле config.production.json в каталоге установки — если нужно поменять что-то вручную после установки (например, при переносе базы), правки вносят туда и перезапускают Ghost командой ghost restart.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать VPSНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Можно ли поставить Ghost без Ghost-CLI, вручную из исходников?
Технически да, но официально не рекомендуется для продакшена — Ghost-CLI берёт на себя массу нюансов (миграции базы, systemd-юнит, настройку Nginx и SSL), которые при ручной сборке придётся повторять самостоятельно и легче ошибиться.
Почему ghost install пишет про неподдерживаемую версию Node.js?
Ghost поддерживает не любые версии Node.js, а конкретные LTS-ветки, список которых меняется с каждым крупным релизом Ghost. Проверьте актуальные требования в официальной документации перед установкой Node.js, а не после.
Нужен ли MySQL обязательно или подойдёт SQLite?
Для теста и разработки хватит SQLite, который Ghost использует по умолчанию без лишней настройки. Для боевого сайта с реальными посетителями официально рекомендован MySQL — он стабильнее под нагрузкой и с ним проще делать резервные копии.
Сколько ресурсов VPS нужно для одного блога на Ghost?
Ориентировочно 1–2 ГБ RAM и один виртуальный процессор достаточно для блога с умеренной посещаемостью — точные цифры зависят от трафика и числа установленных тем/интеграций, поэтому воспринимайте это как отправную точку, а не гарантию.
Можно ли перенести Ghost на другой сервер позже?
Да — переносится связка «дамп MySQL + каталог content». На новом VPS ставится тот же процесс: Node.js нужной версии, MySQL, Ghost-CLI, ghost install, а затем восстановление базы и content поверх чистой установки.