Как установить Ghost на VPS

Вот что «думает» Midjourney про эти ваши Ghost'ы
Вот так выглядит установка Ghost по мнению Midjourney

Где еще как не на сайте, работающем на Ghost CMS рассказать про установку этой системы? Для этого потребуется совсем немного времени, денег и кофе.

мем лучше всего про установку ghost писать на сайте, работающем на ghost
We need to go deeper

Почему не Wordpress?

Wordpress за последнее время разросся до каких-то монструозных размеров. Для небольших сайтов он стал слишком избыточным. Да, для WP написано огромное количество тем и плагинов, а инструкций, наверное, еще больше, но это тоже своего рода проблема. Какой плагин выбрать? Какую тему? А что произойдет при обновлении Wordpress? Не сломается ли что-то, так как автор темы не обновил ее под новую версию? Проходили знаем. А отказываться от обновлений WP не вариант, так как он то еще решето и уязвимости находят в нем регулярно.

А Ghost - легкий движок для небольшого сайта. Да и попробовать что то новое всегда интересно.

Подготовка к установке.

Для установки Ghost буду использовать VPS от Timeweb Cloud. Для этого подойдет и минимальная конфигурация за 188 рублей в месяц с 1 x 3.3 ГГц, 1 Гб оперативной памяти и 15 Гб NVME SSD. Для пробы и тренировки самое то, но если точно настроены серьезно, то лучше выбрать старшие конфигурации. На младшем VPS, например, при обновлении Ghost могут возникнуть проблемы из-за нехватки оперативки (но обойти при желании их можно).

После регистрации в Timeweb Cloud попадаете в панель управления.

Главная страница личного кабинета в Timeweb Cloud
Главная страница панели управления в Timeweb Cloud

Выбираем «Облачный сервер», необходимую конфигурацию. Если просто пробуете и тренируетесь, то бекапы можно пока что не подключать. А так всегда лучше их использовать (но подключить можно будет и потом, при желании и необходимости).

В качестве операционной системы Ubuntu 22.04. Просто привычнее, да и официальная инструкция также предлагает использовать эту ОС.

Выбор конфигурации сервера в Timeweb Cloud
Длинная картинка с примером конфигурации, которую по хорошему убрать бы под спойлер, но я что то не нашел пока что как это сделать.

Для дальнейших действий необходимо «привязать» домен к приобретенному серверу, прописав необходимые DNS-записи.

Как настроить DNS-записи

Вот неплохая инструкция от Timeweb для разных регистраторов. После того, как все сделаете необходимо подождать какое то время, для того, чтобы DNS обновился.

Если домена еще нет, то вот как это можно сделать.

Как зарегистрировать домен

Инструкция. Тыц.

Настройка VPS

После того как купили VPS и привязали домен можно перейти к настройке сервера. Для этого понадобится PowerShell, который умеет работать по SSH.

Сохраняйте себе всю важную информацию: имена пользователей, пароли, порты...

Открываем окно PowerShell и набираем следующую команду:

ssh root@server_ip

Вместо server_ip необходимо указать ip-адрес сервера из письма от Timeweb Cloud. Пароль будет доступен в панели управления

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

sudo apt update && sudo apt upgrade -y

Теперь необходимо сменить пароль для root-пользователя. Естественно лучше использовать как можно более сложный пароль и стоит его сохранить (в идеале в менеджере паролей, да и для генерации пароля лучше использовать тот же менеджер паролей).

sudo passwd root

Для смены пароля его необходимо ввести дважды.

Теперь перейдем к смене порта для SSH:

sudo nano /etc/ssh/sshd_config

Открывается конфиг-файл в редакторе nano. Ищем строчку «#Port 22» и над ней печатаем:

Port port_number

Вместо port_number необходимо ввести произвольный номер порта, лучше использовать пятизначный

Перезапускаем SSH, чтобы новые настройки вступили в силу.

systemctl restart sshd

В дальнейшем для подключения по SSH надо будет указывать номер этого порта: ssh root@server_ip -p port_number

Теперь перейдем к настройке firewall'а.

sudo ufw allow port_number/tcp

Вместо port_number указываем выбранный номер порта для SSH

Включаем firewall:

sudo ufw enable

И проверяем статус:

sudo ufw status

Теперь необходимо создать нового пользователя.

sudo adduser user_name

user_name заменить на выбранное вами имя пользователя

Дважды вводим пароль для нового пользователя. Он должен отличаться от пароля для root. Остальные поля можно оставить пустыми. Теперь добавим созданному пользователю sudo права.

usermod -aG sudo user_name

user_name - имя пользователя из предыдущего шага

Переключаемся на этого пользователя и продолжим настройку сервера из-под него.

su - user_name

Установка необходимого софта и создание директорий

Nginx

Устанавливаем веб-сервер Nginx:

sudo apt install nginx

И открываем доступ для Nginx в firewall'е.

sudo ufw allow 'Nginx Full'

При желании можно проверить настройки firewall'а (это необязательно).

sudo ufw status

MySQL

Теперь перейдем к установке MySQL. Именно из-за этого у меня не получалось установить Ghost по официальному мануалу, возникала ошибка с настройкой базы данных.

sudo apt install mysql-server

Заходим в MySQL.

sudo mysql

Задаем пароль для root-пользователя.

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Вместо password указать выбранный пароль. Он должен отличаться от от всех других паролей

Теперь добавим пользователя MySQL для Ghost:

CREATE USER 'user_name'@'localhost' IDENTIFIED BY 'password';

user_name - имя пользователя, password - пароль для этого пользователя

Создаем базу данных для будущего сайта

CREATE DATABASE databese_name;

database_name - имя базы данных, которое вы придумали

И даем новому пользователю полный доступ к созданной базе данных.

GRANT ALL PRIVILEGES ON database_name.* TO 'user_name'@'localhost';
FLUSH PRIVILEGES;

И выходим из MySQL:

exit

Node.js

Ghost рекомендует использовать Node.js 16 версии. Ее и поставим.

Update от 28.11.2023. Необходимая версия для свежего Ghost - 18.x, инструкцию обновил в соответствии с изменениями

Скачиваем и устанавливаем GPG-ключ.

sudo apt update
sudo apt install -y ca-certificates curl gnupg
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg

Создаем deb-репозиторий:

NODE_MAJOR=18 # Указывается необходимая версия. В данном случае - 18
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

Обновляем пакеты и устанавливаем Node.js

sudo apt update
sudo apt install nodejs -y

Ghost CLI

Ghost CLI - это инструмент командной строки, который автоматически установит Ghost и необходимые зависимости.

sudo npm install ghost-cli@latest -g

Создание директории для сайта

sudo mkdir -p /var/www/site_name

site_name - заменить на адрес вашего сайта

Меняем владельца созданной папки на нашего пользователя:

sudo chown user_name:user_name /var/www/site_name

user_name - имя пользователя, которого создавали ранее, site_name - имя папки сайта

И задаем необходимые разрешения:

sudo chmod 775 /var/www/site_name

site_name - имя папки сайта

Переходим в директорию сайта:

cd /var/www/site_name

site_name - имя папки сайта, которую вы создали

Установка и настройка Ghost

Вот и подошли к последним шагам по установке. Для ее начала вводим команду:

ghost install

Практически все

Blog URL - ввести адрес сайта: https://example.com Именно с «https», это необходимо для получения SSL-сертификата.

MySQL hostname - так как БД располагается локально, то просто все оставляем по умолчанию и нажимаем Enter.

18 версия Node.js ,eltn bcgjkmpjdfnm ipv6 и будет возникать ошибка подключения к базе данных. Необходимо указывать не localhost, а 127.0.0.1

MySQL username / password - имя пользователя БД, которого создали ранее, и его пароль.

Ghost database name - имя базы данных, которую создавали для сайта.

Set up NGINX? - Соглашаемся, y, Enter.

Set up SSL? - Соглашаемся, y, Enter. Здесь будет необходимо ввести email.

Set up systemd? - Соглашаемся, y, Enter.

Start Ghost? - Соглашаемся, y, Enter.

Переходим по адресу https://example.com/ghost и завершаем установку, создав свой аккаунт на сайте.

Даже котик с лапками справился с установкой Ghost.