Для начала немного о Ghost. Как сказано на странице сравнения Ghost с WordPress на их сайте:

Ghost — это быстрая современная альтернатива WordPress, полностью ориентированная на профессиональную издательскую деятельность.

Движок Ghost, работающий на базе Node.js, рассчитан на самые различные применения – от простых текстовых блогов до профессиональных СМИ с любыми типами контента. Среди пользователей платформы — Apple, NASA, Mozilla, DuckDuckGo, x5x.host.

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

В этой статье я расскажу, как установить свой личный Ghost на сервер под управлением панели ispmanager, в которой имеется поддержка Node.js, как говорится, «искаропки».

Установка

Создаём пользователя

Подразумевается, что компонент Node.js уже установлен в меню ispmanager Конфигурация ПО.

В меню Пользователи создаём нового пользователя с такими включёнными параметрами:

Создание пользователя
Создание пользователя

На следующем шаге отключаем создание сайта и почтового домена. Сайт мы создадим на следующем шаге, и это будет описано более детально. Почтовый домен всегда можно создать позднее:

Не создаем сайт и почтовый домен
Не создаем сайт и почтовый домен

Создаём базу данных

В одной из ближайших мажорных версий Ghost будет требовать для размещения своей базы данных MySQL версии не ниже 8.0.

Поэтому мы будем сразу создавать базу данныхименно на этой версии MySQL. Для этого идём в меню ispmanager Базы данных, жмём кнопку Серверы БД и создаём новый сервер баз данных на базе MySQL 8.0:

Создание сервера баз данных
Создание сервера баз данных

Обратите внимание, что порт (3312) нашего созданного сервера баз данных отличается от стандартного 3306, который занимает сервер баз данных, установленный в ispmanager по умолчанию:

Порт созданного сервера БД
Порт созданного сервера БД

Кроме того, имейте в виду, что созданный нами сервер баз данных на базе MySQL 8.0.34 работает в докер-контейнере.

Следующим шагом создадим базу данных на этом сервере для нашего Ghost. Идём в меню Базы данных, жмём кнопку Создать базу данных и создаём её с такими параметрами. Не забудьте установить владельцем созданного нами ранее пользователя и созданный сервер баз данных:

Создание базы данных
Создание базы данных

Создаём сайт

Через меню Сайты создаём наш сайт со следующими параметрами. Заметьте,сертификат мы пока не устанавливаем, это можно сделать позже. Не забываем указать владельцем сайта созданного ранее пользователя pilot. Убеждаемся, что у нас указана верная версия Node.js и привязана созданная ранее база данных ghost.

Создание сайта
Создание сайта

Установка Ghost

Приступим непосредственно к установке Ghost. Большая часть наших действий будет происходить в командной строке. Поэтому необходимо залогиниться на сервер по ssh соединению пользователем root.

Для начала установим на сервер специальную утилиту ghost-cli, которая, по сути, является консольным интерфейсом для управления нашей Ghost платформой. Для этого добавляем в группу sudo пользователя pilot командой:

# usermod -a -G sudo pilot

Запускаем из-под него в консоли команду установки пакета ghost-cli:

# su pilot

$ npm install ghost-cli@latest -g

После этого у вас должна появиться утилита ghost. В этом вы можете убедиться, посмотрев её help:

$ ghost help

Теперь нам нужно в корневой директории нашего сайта создать директорию, где будут располагаться все файлы и директории нашего Ghost. Делаем это так:

$ cd /var/www/pilot/data/www/igorg.th

$ mkdir ghost

Переходим в нашу рабочую директорию ghost:

$ cd ghost

Делаем первую попытку установить Ghost с помощью установленной ранее утилиты ghost:

$ ghost install

Если вы увидели ошибку типа:

Сообщение об ошибке
Сообщение об ошибке

Установите нужные права на директорию /var/www/pilot с помощью команд:

$ chmod 505 /var/www/pilot

$ sudo chmod 755 /var/www

Для последней команды нужно ввести пароль пользователя pilot. Повышение прав на эти директории выглядит не очень хорошо с точки безопасности, но как обойти настойчивое требование Ghost таковыми их установить – я так не нашел.

После последующего запуска команды $ ghost install должна пойти сборка и установка Ghost. В её процессе вам будут заданы разные вопросы. Вам понадобятся URL блога — оставляйте по умолчанию, адрес MySQL сервера — укажите как на скриншоте, не забудьте указать порт, имя пользователя, пароль и название созданной ранее базы данных MySQL, пароль пользователя pilot для sudo. 

В остальном следуйте скриншоту лога установки:

Лог установки Ghost
Лог установки Ghost

Как вы можете заметить на приведённом логе, на одном из шагов установщик устанавливает права после ввода пароля пользователя pilot для sudo (серая строка):

Установка прав на директорию content
Установка прав на директорию content

Это вызывает ошибку установки:

Сообщение об ошибке
Сообщение об ошибке

Для её исправления укажем права для пользователя pilot на директорию /var/www/pilot/data/www/igorg.th/ghost/content командой (потребуется подтвердить вводом пароля пользователя pilot):

$ sudo chown -R pilot:pilot /var/www/pilot/data/www/igorg.th/ghost/content

И запустим Ghost:

$ ghost start

На этот раз, скорее всего, возникнет ошибка соединения с базой данных вида:

Сообщение об ошибке
Сообщение об ошибке

Действительно, почему-то процесс установки Ghost не подразумевает указания кастомного порта MySQL, и в нашем случае конфигурационный файл Ghost, находящийся в директории ghost под именем config.production.json содержит неверную конфигурацию параметра “host” блока “database”:

Неверный параметр
Неверный параметр

Для исправления конфигурации необходимо указать кастомный порт отдельным параметром. Заодно можно изменить параметр “url” на настоящий адрес нашего сайта:

Правильные параметры
Правильные параметры

Ну вот, всё исправили, и теперь наш Ghost должен корректно запуститься. Запускаем всё той же командой $ ghost start и видим, что приложение запустилось корректно:

Лог запуска
Лог запуска

Предупреждение жёлтыми буквами не стоит игнорировать, и после установки SSL сертификата на ваш сайт следует в параметре “url” конфигурационного файла config.production.json указать протокол https вместо http.

Вы всегда можете проверить, что ваше Node.js приложение Ghost запущено или остановлено с помощью команды $ghost ls

Статус приложения
Статус приложения

Конфигурирование проксирования nginx

Мы запустили Node.js приложение и имеем открытый им порт 2371, для которого нам нужно настроить nginx проксирование, чтобы мы могли открывать Ghost в браузере по обращению к URL нашего сайта.

Для этого в меню Сайты выбираем наш сайт и жмём кнопку Файлы конфигурации. В конфигурационном файле nginx заменяем строчки:

proxy_pass http://unix:/var/www/pilot/data/nodejs/0.sock;

proxy_redirect http://unix:/var/www/pilot/data/nodejs/0.sock /;

на:

proxy_pass http://127.0.0.1:2371;

proxy_redirect http://127.0.0.1:2371 /;

И жмём кнопку Сохранить. Дожидаемся, когда Node.js процесс перезагрузится (это видно по значку JS для вашего сайта на странице Сайты).

Существует мнение, что такая наша кастомизация параметров proxy_pass и proxy_redirect в конфиге nginx при некоторых условиях может быть перезаписана ispmanager-ом. Но это требует проверки. В любом случае, мы теперь знаем, что нужно будет проверить в случае, если внезапно nginx перестанет проксировать наш Ghost. 

Теперь, если мы откроем в браузере адрес нашего Ghost http://igorg.th/ghost/, увидим приветственную страницу первоначальной настройки Ghost:

Создание админского аккаунта Ghost
Создание админского аккаунта Ghost

Заполняем поля и на следующем шаге видим страницу онбординга Ghost:

Онбординг Ghost
Онбординг Ghost

Поздравляю, мы прошли весь квест, и наш Ghost установлен и готов к работе!

Небольшой дисклеймер в заключение

Я почти не знаком с технологией Node.js и при подготовке статьи прошёл путь новичка по установке популярного Node.js приложения на сервер с ispmanager. 

Я мог не учесть множество нюансов и пропустить какие-то важные шаги. Я не уделил внимания вопросам безопасности, которые, на мой взгляд, достойны отдельной большой статьи. 

Я прошел этот квест как мог и надеюсь, мой путь будет полезен тем, кто захочет использовать отличную современную систему для ведения блога. 

Ghost действительно работает очень быстро!

Комментарии (2)


  1. vagon333
    23.08.2023 11:34

    Есть смысл упомянуть установку через docker/docker compose.
    https://ghost.org/docs/install/docker/
    https://hub.docker.com/_/ghost


    1. Iron_Butterfly Автор
      23.08.2023 11:34

      Кстати да, используя фичу ispmanager Docker, как вариант, можно поставить Ghost с помощью соответствующего контейнера и проксировать порт.