Ghost – это блог-платформа с открытым исходным кодом, которая поможет вам создать профессионально выглядящий блог. Она была запущена в 2013 году как альтернатива WordPress. Она написана на JavaScript и работает на базе библиотеки Node.js.
В этом руководстве мы рассмотрим, как установить Ghost CMS с помощью Nginx и MySQL на сервер под управлением Debian 12. Мы будем использовать SSL-сертификат Let’s Encrypt для защиты нашей установки.
Предварительные условия
- Сервер под управлением Debian 12 с минимум 2 ГБ оперативной памяти.
- Пользователь, не являющийся root, с привилегиями sudo.
- Полное доменное имя (FQDN), например
example.com
, указывающее на ваш сервер. - Убедитесь, что все обновлено.
$ sudo apt update $ sudo apt upgrade
- Несколько пакетов, необходимых вашей системе.
$ sudo apt install wget curl nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release debian-archive-keyring unzip -y
Некоторые из этих пакетов могут быть уже установлены в вашей системе.
Шаг 1 – Настройка брандмауэра UFW
Первым шагом будет настройка брандмауэра. Debian по умолчанию поставляется с ufw (Uncomplicated Firewall).
Проверьте, запущен ли брандмауэр.
$ sudo ufw status
Вы должны получить следующий результат.
Status: inactive
Разрешите порт SSH, чтобы брандмауэр не разорвал текущее соединение при его включении.
$ sudo ufw allow OpenSSH
Разрешите также порты HTTP и HTTPS.
$ sudo ufw allow http $ sudo ufw allow https
Включите брандмауэр
$ sudo ufw enable Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup
Еще раз проверьте состояние брандмауэра.
$ sudo ufw status
Вы должны увидеть аналогичный результат.
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 80/tcp ALLOW Anywhere 443 ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 80/tcp (v6) ALLOW Anywhere (v6) 443 (v6) ALLOW Anywhere (v6)
Шаг 2 – Установите Nginx
Debian 12 поставляется со старой версией Nginx. Чтобы установить последнюю версию, вам нужно загрузить официальный репозиторий Nginx.
Импортируйте ключ подписи Nginx.
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \ | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
Добавьте репозиторий для стабильной версии Nginx.
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \ http://nginx.org/packages/debian `lsb_release -cs` nginx" \ | sudo tee /etc/apt/sources.list.d/nginx.list
Обновите системные репозитории.
$ sudo apt update
Установите Nginx.
$ sudo apt install nginx
Проверьте установку.[sudo
требуется для выполнения команды в Debian.
$ sudo nginx -v nginx version: nginx/1.24.0
Запустите сервер Nginx.
$ sudo systemctl start nginx
Шаг 3 – Установите Node.js
Для работы Ghost Installer необходим Nodejs. Первым шагом будет импорт GPG-ключа Nodesource.
$ curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/nodesource.gpg
Далее создайте файл репозитория Nodesource. Мы установим Node 18x – текущую версию LTS (Long Term Support), которую рекомендует Ghost.
$ NODE_MAJOR=18 $ echo "deb [signed-by=/usr/share/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.
$ sudo apt install nodejs -y
Подтвердите установку Node.
$ node --version v18.18.2
Шаг 4 – Установка MySQL с помощью Docker
Debian больше не поставляется с MySQL. Вместо него поставляется MariaDB. Ghost поддерживает только MySQL. Вы можете настроить Ghost для работы с MariaDB, но это не рекомендуется. Поскольку официальные репозитории MySQL не были обновлены для Debian 12 на момент написания этого руководства, мы установим его с помощью Docker.
Импортируйте ключ Docker GPG.
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg
Создайте файл репозитория Docker.
$ echo \ "deb [arch="$(dpkg --print-architecture)" signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/debian \ "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Обновите список системных репозиториев.
$ sudo apt update
Установите Docker и Docker Compose.
$ sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
По умолчанию Docker требует привилегий root. Если вы хотите избежать использования sudo
каждый раз, когда вы запускаете docker
, добавляйте свое имя пользователя в docker
группу.
$ sudo usermod -aG docker $(whoami)
Чтобы включить это изменение, вам нужно выйти из сервера и снова войти в него под тем же пользователем или использовать следующую команду.
$ su - ${USER}
Убедитесь, что ваш пользователь добавлен в группу Docker.
$ groups navjot wheel docker
Теперь, когда Docker установлен, нам нужно создать файл Docker compose для MySQL. Создайте каталог для MySQL docker.
$ mkdir ~/mysql
Создайте и откройте файл docker-compose.yml
файл для редактирования.
$ nano docker-compose.yml
Вставьте в него следующий код.
services: database: image: container-registry.oracle.com/mysql/community-server:latest container_name: mysql restart: always environment: MYSQL_ROOT_PASSWORD: rootpassword MYSQL_USER: ghost MYSQL_PASSWORD: ghostpassword MYSQL_DATABASE: ghostdb ports: - "3306:3306" volumes: - ./mysql:/var/lib/mysql
Сохраните файл, нажав кнопку Ctrl + X и ввести Y при появлении запроса.
Здесь мы задали пароль root и учетные данные MySQL для базы данных Ghost. Они будут созданы при запуске контейнера.
Запустите контейнер MySQL.
$ docker compose up -d
Проверьте состояние контейнера Docker.
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ec42fb205f1e container-registry.oracle.com/mysql/community-server:latest "/entrypoint.sh mysq…" 4 seconds ago Up 2 seconds 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060-33061/tcp mysql
Ghost может подключаться к контейнеру MySQL через порт 3306 и выполнять с ним операции.
Шаг 5 – Установите Ghost
Мы можем установить Ghost с помощью Docker, что также может упростить процесс, но мы не будем делать этого здесь.
Установка Ghost будет состоять из трех компонентов – инструмента командной строки Ghost-CLI, который устанавливает и управляет обновлениями блога Ghost, и самого пакета блога.
Установка Ghost-CLI
Выполните следующую команду, чтобы установить инструмент Ghost-CLI.
$ sudo npm install ghost-cli@latest -g
Подготовка каталога Ghost
Создайте корневой каталог Ghost.
$ sudo mkdir -p /var/www/html/ghost
Установите право собственности на каталог для текущего пользователя.
$ sudo chown $USER:$USER /var/www/html/ghost
Установите правильные права доступа к каталогу.
$ sudo chmod 755 /var/www/html/ghost
Переключитесь на каталог Ghost.
$ cd /var/www/html/ghost
Установите Ghost
Установка Ghost – это процесс, состоящий из одной команды.
$ ghost install
Во время установки инструмент CLI задаст несколько вопросов для настройки блога.
- URL-адрес блога: Введите полный URL-адрес вашего блога вместе с протоколом https. (
https://example.com
) - Имя хоста MySQL: Нажмите Enter, чтобы использовать значение по умолчанию
localhost
так как наша установка Ghost и MySQL находятся на одном сервере. - Имя пользователя MySQL: Введите
ghost
в качестве имени пользователя MySQL. - Пароль MySQL: Введите пароль root, созданный ранее в файле docker.
- Имя базы данных Ghost: Введите имя базы данных (
ghostdb
), сконфигурированной в файле docker. - Пароль Sudo: Он запросит ваш пароль sudo для выполнения административных задач.
- Настроить Nginx? Обычно Ghost-CLI обнаруживает установленный у вас Nginx и автоматически настраивает его для вашего блога. Но это работает только для Nginx, установленного с помощью пакета ОС. Поскольку мы установили его с помощью репозитория Nginx, Ghost не может его обнаружить и автоматически пропустит.
- Настроить SSL?: Поскольку он пропустил настройку Nginx, инструмент CLI также пропустит настройку SSL.
- Настроить systemd?: Ghost спросит, хотите ли вы установить системную службу для Ghost. Нажмите Y продолжить.
- Запустить Призрака?: Нажмите Y чтобы начать установку Ghost. Однако это не сработает, потому что Nginx и SSL еще не настроены.
Шаг 6 – Установка SSL
Прежде чем мы продолжим, нам нужно установить инструмент Certbot и установить SSL-сертификат для нашего домена.
Для установки Certbot мы воспользуемся программой установки пакетов Snapd. Snapd всегда содержит последнюю стабильную версию Certbot. Однако Debian не поставляется с установленным Snapd. Сначала установите его.
$ sudo apt install snapd
Убедитесь, что ваша версия snapd актуальна.
$ sudo snap install core $ sudo snap refresh core
Установите Certbot.
$ sudo snap install --classic certbot
Используйте следующую команду, чтобы убедиться, что команда Certbot может быть запущена, создав символическую ссылку на файл /usr/bin
каталог.
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Проверьте установку.
$ certbot --version certbot 2.7.1
Сгенерируйте сертификат SSL.
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d example.com
Приведенная выше команда загрузит сертификат в /etc/letsencrypt/live/example.com
каталог на вашем сервере.
Создайте группа Диффи-Хеллмана сертификат.
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Проверьте службу планировщика обновления Certbot.
$ sudo systemctl list-timers
Вы найдете snap.certbot.renew.service
как одну из запланированных к запуску служб.
NEXT LEFT LAST PASSED UNIT ACTIVATES Tue 2023-10-17 00:00:00 UTC 14h left Mon 2023-10-16 00:00:18 UTC 9h ago dpkg-db-backup.timer dpkg-db-backup.service Mon 2023-10-16 19:12:00 UTC 9h left Mon 2023-10-16 07:27:11 UTC 2h 17min ago snap.certbot.renew.timer snap.certbot.renew.service Mon 2023-10-16 20:49:14 UTC 11h left Mon 2023-10-16 07:48:12 UTC 1h 56min ago apt-daily.timer apt-daily.service
Выполните пробный запуск процесса, чтобы убедиться, что обновление SSL работает нормально.
$ sudo certbot renew --dry-run
Если ошибок нет, все готово. Ваш сертификат обновится автоматически.
Шаг 7 – Настройка Nginx
Создайте и откройте файл /etc/nginx/conf.d/ghost.conf
для редактирования.
$ sudo nano /etc/nginx/conf.d/ghost.conf
Вставьте следующий код в файл ghost.conf
файл. Замените все экземпляры example.com
на ваш домен.
server { listen 80; listen [::]:80; server_name example.com; location / { return 301 https://$server_name$request_uri; } } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name example.com; access_log /var/log/nginx/ghost.access.log; error_log /var/log/nginx/ghost.error.log; client_max_body_size 20m; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305; ssl_prefer_server_ciphers off; ssl_session_timeout 1d; ssl_session_cache shared:SSL:10m; ssl_dhparam /etc/ssl/certs/dhparam.pem; ssl_stapling on; ssl_stapling_verify on; resolver 1.1.1.1 1.0.0.1 [2606:4700:4700::1111] [2606:4700:4700::1001] 8.8.8.8 8.8.4.4 [2001:4860:4860::8888] [2001:4860:4860::8844] valid=60s; resolver_timeout 2s; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem; location / { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto https; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://localhost:2368; } }
Приведенная выше конфигурация перенаправит все HTTP-запросы на HTTPS и будет служить прокси-сервером для сервиса Ghost, чтобы обслуживать его через ваш домен.
Сохраните файл, нажав Ctrl + X и ввести Y при появлении запроса.
Откройте файл /etc/nginx/nginx.conf
для редактирования.
$ sudo nano /etc/nginx/nginx.conf
Добавьте следующую строку перед строкой include /etc/nginx/conf.d/*.conf;
.
server_names_hash_bucket_size 64;
Сохраните файл, нажав кнопку Ctrl + X и ввести Y при появлении запроса.
Проверьте конфигурацию Nginx.
$ sudo nginx -t
Если вы не видите ошибок, значит, все в порядке. Перезапустите сервер Nginx, чтобы применить конфигурацию.
$ sudo systemctl restart nginx
Шаг 9 – Запуск сайта
Теперь вы можете проверить свою установку, открыв https://example.com
в своем веб-браузере. Вы получите следующую страницу, свидетельствующую об успешной установке.
Шаг 10 – Завершение установки
Чтобы завершить настройку блога Ghost, перейдите по ссылке https://example.com/ghost
в вашем браузере. Дополнительный /ghost
в конце домена вашего блога перенаправляет вас на панель администратора Ghost или, в данном случае, на настройку, поскольку вы обращаетесь к ней впервые.
Здесь вам нужно будет создать учетную запись администратора и выбрать название блога.
Введите свои данные и нажмите кнопку Создать учетную запись и начать публикацию , чтобы продолжить.
Далее вы попадете на следующий экран, где вам будут предложены такие опции, как написание первого сообщения, настройка сайта и импорт участников.
Мы выберем Explore Ghost admin для изучения и перехода непосредственно к панели управления. По окончании настройки перед вами откроется панель администрирования Ghost.
Если вы хотите переключиться в темный режим, вы можете сделать это, нажав на тумблер рядом с кнопкой шестеренки настроек в нижней части страницы настроек.
Вы увидите пост по умолчанию. Вы можете не публиковать или удалить его и начать публиковать.
Шаг 11 – Настройка почтового сервера
Ghost выступает не только как платформа для ведения блогов, но и как менеджер рассылок. Для повседневных операций вы можете использовать любой транзакционный почтовый сервис для работы с Ghost для отправки почты. Но если вы хотите отправлять рассылки через Ghost, единственным официальным почтовым сервисом, поддерживающим массовую рассылку, является Mailgun. Вы можете использовать и другой сервис рассылки, но для этого вам придется воспользоваться функцией интеграции Zapier в Ghost.
Сначала настроим SMTP-сервис для транзакционных писем. Для этого откройте файл /var/www/html/ghost/config.production.json
для редактирования.
$ nano /var/www/html/ghost/config.production.json
Найдите следующие строки.
"mail": { "transport": "Direct" },
Замените их следующим кодом.
"mail": { "from": "'Unixsru Support' [email protected]", "transport": "SMTP", "options": { "host": "YOUR-SES-SERVER-NAME", "port": 465, "service": "SES", "auth": { "user": "YOUR-SES-SMTP-ACCESS-KEY-ID", "pass": "YOUR-SES-SMTP-SECRET-ACCESS-KEY" } } },
Здесь мы используем почтовый сервис Amazon SES Mail, поскольку он доступен по цене и не требует ежемесячной платы.
Сохраните файл, нажав кнопку Ctrl + X и ввести Y , когда появится запрос. После завершения перезапустите приложение Ghost, чтобы изменения вступили в силу.
$ ghost restart
Чтобы настроить параметры рассылки, посетите страницу Настройки >> Email рассылка раздел.
Нажмите на кнопку Конфигурация Mailgun ссылка на расширение.
Введите регион, домен и API-ключ Mailgun.
Нажмите на кнопку Сохранить Нажмите кнопку в правом верхнем углу, чтобы сохранить настройки.
Чтобы проверить доставку рассылки, создайте новый тестовый пост, нажмите кнопку “Опубликовать” и выберите пункт Только электронная почта вариант. Если вы хотите также опубликовать сообщение, выберите опцию Опубликовать и отправить по электронной почте вариант.
Нажмите на кнопку Продолжение, заключительный обзор , чтобы продолжить. На следующей странице снова появится запрос на окончательное подтверждение.
Нажмите на кнопку Отправить письмо, прямо сейчас нажмите кнопку, чтобы отправить письмо. После отправки письма вы получите следующее сообщение.
Проверьте почту на наличие сообщения.
Шаг 12 – Обновление Ghost
Существует два типа обновлений Ghost – незначительные и значительные.
Сначала сделайте полную резервную копию, если вы хотите запустить незначительное обновление. При этом создается резервная копия всех сообщений, пользователей, тем, изображений, файлов и файлов перенаправления.
$ cd /var/www/html/ghost $ ghost backup
Выполните команду update, чтобы выполнить незначительное обновление.
$ ghost update
Чтобы выполнить крупное обновление, необходимо выполнить следующие действия официальному подробному руководству по обновлению на сайте Ghost. В зависимости от того, на какой версии вы находитесь в данный момент и до какой основной версии вы хотите обновиться, шаги будут отличаться.
Заключение
На этом мы завершаем наш урок по установке Ghost CMS на сервер Debian 12 с помощью Nginx. Если у вас есть вопросы или отзывы, поделитесь ими в комментариях ниже.