Ghost Blog · 11 min read · Oct 23, 2025
Как развернуть Ghost Blog с Nginx на Debian 12

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
Команда может нарушить существующие ssh-соединения. Продолжить операцию (y|n)? y
Брандмауэр активен и включен при запуске системы
Проверьте статус брандмауэра снова.
$ 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 (долгосрочной поддержкой) версией, которую рекомендует 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.
Импортируйте ключ GPG Docker.
$ 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. Создайте каталог для Docker MySQL.
$ 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, когда будет предложено.
Здесь мы установили корневой пароль и учетные данные 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: Введите ваш корневой пароль, созданный ранее в файле docker.
- Имя базы данных Ghost: Введите имя базы данных (
ghostdb), настроенное в файле docker. - Пароль sudo: Он запросит ваш пароль sudo для выполнения административных задач.
- Настроить Nginx? Обычно Ghost-CLI обнаруживает вашу установку Nginx и автоматически настраивает ее для вашего блога. Но это работает только для Nginx, установленного с помощью пакета ОС. Поскольку мы установили его с помощью репозитория Nginx, Ghost не может его обнаружить и пропустит его автоматически.
- Настроить SSL?: Поскольку он пропустил конфигурацию Nginx, инструмент CLI также пропустит настройку SSL.
- Настроить systemd?: Ghost спросит, хотите ли вы настроить системную службу для Ghost. Нажмите Y, чтобы продолжить.
- Запустить Ghost?: Нажмите 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 или, в данном случае, на настройку, так как вы получаете доступ к ней в первый раз.
Здесь вам будет предложено создать свою учетную запись администратора и выбрать заголовок блога.

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

Мы выберем Изучить админку Ghost, чтобы исследовать и перейти к панели управления напрямую. В конце настройки вас встретит панель администратора 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": "'Поддержка HowtoForge' [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, так как она доступна и не требует ежемесячных платежей.
Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено. После завершения перезапустите приложение Ghost, чтобы изменения вступили в силу.
$ ghost restart
Чтобы настроить параметры рассылки, перейдите в раздел Настройки >> Email newsletter.

Нажмите на ссылку Настройка Mailgun, чтобы развернуть.
Заполните свой регион Mailgun, домен и API-ключ.

Нажмите кнопку Сохранить в правом верхнем углу, чтобы сохранить настройки.
Чтобы протестировать доставку рассылки, создайте новый тестовый пост, нажмите опубликовать и выберите опцию Только по электронной почте. Если вы хотите опубликовать пост также, выберите опцию Опубликовать и отправить по электронной почте.

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

Нажмите кнопку Отправить письмо прямо сейчас, чтобы отправить рассылку. Вы получите следующее сообщение после отправки почты.

Проверьте свою электронную почту для поста.

Шаг 12 - Обновление Ghost
Существуют два типа обновлений Ghost — минорные и мажорные обновления.
Сначала сделайте полную резервную копию, если хотите выполнить минорное обновление. Это создаст резервную копию всех постов, участников, тем, изображений, файлов и файлов перенаправления.
$ cd /var/www/html/ghost
$ ghost backup
Запустите команду обновления, чтобы выполнить минорное обновление.
$ ghost update
Чтобы выполнить мажорное обновление, вам следует следовать официальному подробному руководству по обновлению на сайте Ghost. В зависимости от того, на какой версии вы находитесь в данный момент и на какую мажорную версию вы хотите обновиться, шаги будут различаться.
Заключение
Это завершает наше руководство о том, как настроить Ghost CMS на вашем сервере Debian 12 с использованием Nginx. Если у вас есть какие-либо вопросы или отзывы, поделитесь ими в комментариях ниже.
Get new posts in your inbox
No spam. Unsubscribe anytime.