Для начала немного о 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.
В остальном следуйте скриншоту лога установки:
Как вы можете заметить на приведённом логе, на одном из шагов установщик устанавливает права после ввода пароля пользователя pilot для sudo (серая строка):
Это вызывает ошибку установки:
Для её исправления укажем права для пользователя 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 установлен и готов к работе!
Небольшой дисклеймер в заключение
Я почти не знаком с технологией Node.js и при подготовке статьи прошёл путь новичка по установке популярного Node.js приложения на сервер с ispmanager.
Я мог не учесть множество нюансов и пропустить какие-то важные шаги. Я не уделил внимания вопросам безопасности, которые, на мой взгляд, достойны отдельной большой статьи.
Я прошел этот квест как мог и надеюсь, мой путь будет полезен тем, кто захочет использовать отличную современную систему для ведения блога.
Ghost действительно работает очень быстро!