Ghost — современная платформа для ведения блогов и публикации контента, написанная на Node.js. Данный инструмент оптимизирован под скорость и производительность, поэтому работает быстрее, чем другие CMS, такие как WordPress. Ghost поддерживает редактор с форматированием Markdown, интеграции с сервисами, а также обладает удобным управлением подписками и рассылками. В отличие от классических движков, используемых в блогах, Ghost ориентирован на создателей контента и профессиональные медиа.
В статье разберём, как установить Ghost на VPS, работающий под управлением Ubuntu 24.04.
Предварительная настройка системы
Поскольку Ghost будет установлен на виртуальный выделенный сервер, сетевой адаптер которого смотрит в интернет и имеет «белый» IP-адрес, то необходимо будет не только установить софт, но и обеспечить защиту данных, передающихся между сервисом и его клиентами. Ghost представляет собой веб-сервис, поэтому настройка мер безопасности в его отношении подразумевает прежде всего возможность подключения к веб-интерфейсу с использованием протокола HTTPS вместо менее безопасного HTTP.
В свою очередь, настройка доступа по HTTPS заключается в установке на веб-сервер TLS-сертификата от доверенного Центра сертификации, каким в частности является, например, Let’s Encrypt — бесплатный открытый Центр сертификации. При этом, Let’s Encrypt может выдать TLS-сертификат только веб-сервису, доступ к которому осуществляется по его доменному имени, но не по IP-адресу. В связи с чем предварительно необходимо связать IP-адрес виртуального сервера с именем домена. Привязка домена к IP-адресу настраивается при помощи специальной DNS-записи — A-записи. Такую настройку можно произвести на сайте-регистраторе домена, либо во вкладке Домены
в личном кабинете RUVDS.

Установка необходимого софта
Перед началом работ по инсталляции нового программного обеспечения необходимо обновить список доступных пакетов в системе:
$ sudo apt update
Установка cron
После этого установите cron
— системный планировщик задач, позволяющий автоматически запускать команды и скрипты в соответствии с расписанием. В данном случае cron
будет использоваться для автоматического продления TLS-сертификатов через acme.sh
— клиента, который предназначен для получения и продления SSL/TLS-сертификатов от Let’s Encrypt. Во время установки Ghost проверяет наличие cron
на сервере и не производит настройку SSL, в случае его отсутствия в системе. Для инсталляции cron
запустите команду:
$ sudo apt install cron
Установка Nginx
Ghost запускается как самостоятельный Node.js-сервис и слушает свой порт, который не следует открывать для доступа извне, руководствуясь тем, что сервис обрабатывает на нём только незащищённые HTTP-запросы без шифрования. Для взаимодействия с клиентами необходимо настроить доступ к платформе таким образом, чтобы он осуществлялся с использованием безопасного протокола HTTPS. Такая конфигурация подразумевает настройку прокси-сервера, который будет принимать все входящие соединения от клиентов на стандартных портах 80 и 443, выполнять шифрование и дешифровку трафика с использованием TLS-сертификата, обрабатывать правила безопасности и перенаправлять запросы к работающему в фоне Ghost, который слушает свой внутренний порт. В качестве подобного прокси может выступать веб-сервер Nginx. Для его установки выполните команду:
$ sudo apt install nginx
Чтобы Nginx мог принимать как зашифрованные, так и незашифрованные веб-запросы, необходимо открыть доступ к серверу для протоколов HTTPS и HTTP. Для этого внесите в правила брандмауэра UFW разрешение для профиля Nginx Full
, который открывает порты для HTTPS и HTTP:
$ sudo ufw allow 'Nginx Full'
Установка и настройка MySQL
Ghost хранит всю свою информацию, а именно, записи блога, страницы, пользователей, настройки и метаданные, в реляционной базе данных. Поэтому на следующем шаге установите систему управления базами данных. В нашем примере такой СУБД будет MySQL:
$ sudo apt install mysql-server
После своей установки СУБД имеет ряд потенциальных уязвимостей. К ним можно отнести то, что учётная запись root
может быть без пароля, в СУБД присутствуют анонимные пользователи, позволяющие подключаться к базе без авторизации, есть тестовая база данных, открытая для всех, а также то, что root
по умолчанию может быть доступен удалённо. Это создаёт риск несанкционированного подключения к серверу и компрометации данных. Следующая команда, запускающая встроенный в MySQL специальный скрипт, пошагово предлагает администратору закрыть данные уязвимости:
$ sudo mysql_secure_installation
После окончания работы скрипта запустите командную оболочку MySQL:
$ sudo mysql
В командной строке MySQL, во-первых, определите использование плагина аутентификации mysql_native_password
и задайте новый пароль для учётной записи root
. В своей команде замените P@ssw0rd
на пароль, предназначенный для суперпользователя вашей СУБД:
ALTER USER 'root'@'localhost' IDENTIFIED WITH 'mysql_native_password' BY 'P@ssw0rd';
Затем создайте базу данных с именем ghostdb
:
CREATE DATABASE ghostdb;
Чтобы Ghost имел собственную учётную запись для подключения к базе данных, а не использовал root
, следующей командой создайте нового пользователя с именем, например, ghostuser
и назначьте ему пароль, который в команде ниже выглядит как P@ssw0rd
. Наличие данного пользователя повысит безопасность, ограничив права только нужной базой. Это соответствует принципу наименьших привилегий, поскольку сервис будет работать только в пределах своей базы данных, не затрагивая системные объекты MySQL.
CREATE USER 'ghostuser'@'localhost' IDENTIFIED BY 'P@ssw0rd';
Затем выдайте пользователю ghostuser
полный набор прав на все таблицы базы данных ghostdb
. Это будет означать, что данный пользователь сможет создавать, изменять и удалять таблицы, вставлять и обновлять данные, а также выполнять все остальные операции внутри этой базы, но не получит доступа к другим базам данных.
GRANT ALL PRIVILEGES ON ghostdb.* TO 'ghostuser'@'localhost';
При помощи следующей команды пересчитайте и перезагрузите таблицы прав из системной базы данных. Это необходимо сделать, чтобы все изменения учётных записей и привилегий начали действовать сразу и без перезапуска сервера:
FLUSH PRIVILEGES;
После чего отключитесь от командной оболочки MySQL:
\q
Как установить Ghost на Ubuntu 24.04
Установка Node.js
Ghost представляет собой серверное приложение на JavaScript, которое запускается в среде Node.js и обрабатывает входящие запросы как отдельный сервис. Следовательно, следующим этапом будет установка Node.js.
Для этого, во-первых, создайте каталог, который будет использоваться для хранения GPG-ключей репозиториев APT:
$ sudo mkdir -p /etc/apt/keyrings
Следующей командой загрузите GPG-ключ репозитория NodeSource и сохраните его в созданном ранее каталоге. Это позволит производить проверку подлинности пакетов при установке через пакетный менеджер APT:
$ curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
Затем создайте в текущей оболочке переменную окружения NODE_MAJOR
со значением 22
, которую можно будет использовать в следующих командах, например, для указания основной версии Node.js при настройке репозитория:
$ NODE_MAJOR=22
После чего добавьте новый репозиторий NodeSource в список источников APT:
$ echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list
Обновите список пакетов:
$ sudo apt update
И затем установите Node.js:
$ sudo apt install nodejs
Установка Ghost-CLI
Далее, с использованием npm установите последнюю версию утилиты Ghost-CLI. Она будет использоваться для установки, настройки и управления Ghost:
$ sudo npm install ghost-cli@latest -g
Дождитесь окончания установки, после чего создайте каталог /var/www/your-site-name.ru
для размещения файлов сайта. В данной команде замените your-site-name.ru
на доменное имя, с использованием которого будет осуществляться доступ к веб-интерфейсу Ghost:
$ sudo mkdir -p /var/www/your-site-name.ru/
Затем измените владельца и группу созданного каталога, назначив их вашему пользователю, чтобы он имел возможность управлять файлами в данной директории. В команде замените your-user
на имя вашего пользователя, а your-site-name.ru
– на имя вашего домена:
$ sudo chown your-user:your-user /var/www/your-site-name.ru/
Для данного каталога установите соответствующие права доступа, чтобы владелец мог читать, записывать и выполнять, а все остальные пользователи — только читать и выполнять. Это позволит заходить в каталог, но не изменять его содержимое:
$ sudo chmod 755 /var/www/your-site-name.ru/
Запуск Ghost и настройка доступа через HTTPS
Перейдите в созданный на предыдущем шаге каталог:
$ cd /var/www/your-site-name.ru/
И запустите установку Ghost в текущей директории с помощью Ghost-CLI:
$ ghost install
В ходе выполнения установки нужно произвести следующие действия:
- в строке
Enter your blog URL
укажите доменное имя вашего Ghost в форматеhttps://your-site-name.ru
, гдеyour-site-name.ru
замените на своё; - значение поля
Enter your MySQL hostname
оставьте предложенным по умолчанию, нажавEnter
; - в поле
Enter your MySQL username
введите имя пользователя, созданного ранее в MySQL; - затем введите пароль данного пользователя в поле
Enter your MySQL password
; - в строке
Enter your Ghost database name
укажите название базы данных, созданной ранее в MySQL; - на вопрос
Do you wish to set up Nginx?
ответьте утвердительно при помощи символаy
; - также утвердительно ответьте на вопрос
Do you wish to set up SSL?
; - в строке
Enter your email (For SSL Certificate)
укажите свой адрес электронной почты; - и наконец, в заключение утвердительно ответьте на вопросы
Do you wish to set up Systemd?
иDo you wish to start Ghost?

В результате команда загрузит и развернёт файлы Ghost, настроит подключение к базе данных, создаст системный сервис для автоматического запуска, сконфигурирует Nginx для работы в качестве обратного прокси, запросит и установит TLS-сертификат от Let’s Encrypt.
После завершения работы команды откройте браузер и перейдите на https://your-site-name.ru
, где вместо your-site-name.ru
укажите имя вашего домена.

В браузере должна открыться стартовая страница Ghost — системы управления контентом для ведения блогов и онлайн-публикаций.