Ghost CMS можно разместить на собственном VPS с помощью готового шаблона Unihost в Portainer. Откройте Templates, выберите Ghost CMS, укажите параметры базы данных и разверните стек. Затем настройте публичный адрес сайта, HTTPS через обратный прокси и SMTP для отправки писем. Перед обновлением обязательно создавайте резервные копии базы данных и содержимого Ghost.

Совместимость: Ghost CMS в Docker и Portainer на Linux. Поддержка базы данных зависит от версии Ghost.

Требования

Перед установкой подготовьте:

  • VPS с Linux, Docker и Portainer.
  • Базу данных, доступную контейнеру Ghost. В исходном шаблоне Unihost используется MariaDB, а официальная производственная конфигурация современных Ghost поддерживает MySQL 8.
  • Домен и доступ к настройкам DNS.
  • Nginx Proxy Manager или Traefik для HTTPS.
  • Место для контента и резервных копий.

Для базовой установки Ghost указывается минимум 1 ГБ RAM, но для Docker-стека с базой данных и прокси потребуются дополнительные ресурсы. Учитывайте нагрузку сайта.

Шаги

Шаг 1. Выберите шаблон Ghost CMS

В Portainer откройте Templates → Application → Ghost CMS. Выберите шаблон Unihost и заполните параметры. Если вы впервые используете Portainer, ознакомьтесь с вводной статьёй. Что такое Portainer.

Шаблон Ghost CMS в Portainer

Шаг 2. Настройте базу данных и адрес сайта

В исходном шаблоне указываются хост базы данных, имя базы, пользователь и пароль. При совместимой конфигурации база создаётся при развёртывании. Проверьте поддержку выбранной СУБД установленной версией Ghost.

Параметры базы данных и адреса Ghost в шаблоне

Для официального контейнера Ghost используются переменные:

url=https://blog.example.com
database__client=mysql
database__connection__host=db
database__connection__user=ghost
database__connection__password=REPLACE_WITH_STRONG_PASSWORD
database__connection__database=ghost

Значение url должно точно совпадать с публичным HTTPS-доменом сайта. Не публикуйте пароли базы данных в репозиториях и клиентском коде.

Шаг 3. Разверните Ghost и настройте HTTPS

После развёртывания Ghost опубликуйте сайт через Nginx Proxy Manager (NPM):

  1. Создайте DNS-запись A для blog.example.com, направленную на IP VPS.
  2. Откройте NPM → Hosts → Proxy Hosts → Add Proxy Host.
  3. Укажите blog.example.com в Domain Names и Scheme: http.
  4. В Forward Hostname / IP укажите имя сервиса Ghost, доступное из NPM, а в Forward Port установите 2368.
  5. На вкладке SSL запросите сертификат Let’s Encrypt, включите Force SSL и сохраните настройки.

Убедитесь, что NPM подключается к Ghost по Docker-сети. Установите для Ghost url значение https://blog.example.com. Панель управления доступна по адресу https://blog.example.com/ghost.

Инструкция по установке Nginx Proxy Manager и настройке HTTPS

Traefik через Portainer можно использовать как альтернативу.

blog.example.com -> SERVER_IP

Настройка Proxy Host для Ghost на порту 2368

На скриншоте показана исходная настройка HTTP-прокси. Для публичного сайта используйте HTTPS и тот же домен с https:// в переменной url.

База Ghost в phpMyAdmin

Главная страница Ghost CMS после установки

Откройте сайт, затем перейдите на /ghost для создания учётной записи администратора.

https://blog.example.com/ghost

Создание администратора Ghost CMS

Шаг 4. Настройте SMTP

SMTP необходим для служебных писем Ghost, в том числе приглашений и восстановления пароля. Добавьте в стек Portainer параметры своего почтового провайдера:

mail__transport=SMTP
mail__from=blog@example.com
mail__options__host=smtp.example.com
mail__options__port=587
mail__options__secure=false
mail__options__auth__user=SMTP_USERNAME
mail__options__auth__pass=SMTP_PASSWORD

Для порта 587 обычно используется STARTTLS, для 465 – TLS при подключении и mail__options__secure=true. Для массовых рассылок может потребоваться отдельная интеграция, например Mailgun.

Шаг 5. Создайте резервные копии

Сохраняйте базу данных и постоянный том /var/lib/ghost/content. Для MySQL используйте mysqldump, а для исходного шаблона с MariaDB – mariadb-dump. Выполните подходящую команду на Docker-хосте:

docker exec DB_CONTAINER sh -c 'exec mysqldump -u root -p"$MYSQL_ROOT_PASSWORD" ghost' > ghost-db-backup.sql
docker exec DB_CONTAINER sh -c 'exec mariadb-dump -u root -p"$MARIADB_ROOT_PASSWORD" ghost' > ghost-db-backup.sql
docker exec GHOST_CONTAINER tar -czf - -C /var/lib/ghost content > ghost-content-backup.tar.gz

Используйте фактическое имя контейнера и способ авторизации. Дополнительно сохраняйте контент и конфигурацию Ghost, храните копии отдельно от сервера и проверяйте восстановление.

Шаг 6. Обновите образ Ghost

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

Проверка

Убедитесь, что Ghost и база данных запущены, сайт открывается через HTTPS, панель /ghost доступна, почта отправляется и резервные копии базы и контента существуют. При ошибках проверьте журналы:

docker ps
docker logs --tail 50 GHOST_CONTAINER

Устранение проблем

Ghost не подключается к базе данных

Проверьте database__connection__host, пользователя, пароль, имя базы и Docker-сеть. Официально поддерживаемая производственная база Ghost – MySQL 8.

Ошибки HTTPS или перенаправления

Проверьте DNS, reverse proxy, TLS-сертификат и url. Прокси должен передавать исходную схему HTTPS.

Не отправляются письма

Проверьте SMTP-сервер, порт, пароль, режим TLS и журналы Ghost.

FAQ

Можно ли бесплатно использовать self-hosted Ghost?

Да. Ghost распространяется с открытым исходным кодом, но сервер и дополнительные почтовые сервисы оплачиваются отдельно.

Как настроить отправку писем в Ghost?

Добавьте mail__transport=SMTP и параметры mail__options__* своего провайдера, пересоздайте контейнер и проверьте отправку.

Как обновить Ghost в Docker?

Создайте резервные копии базы и контента, выберите совместимый тег образа в Portainer и обновите контейнер с сохранением томов.

Сколько оперативной памяти нужно Ghost?

Для базовой установки Ghost указывается минимум 1 ГБ RAM. Docker-стек с MySQL и прокси потребует больше памяти в зависимости от нагрузки.

Связанные статьи

Ghost(Pro) или self-hosted?

Ghost(Pro) Self-hosted Ghost
Управляемый хостинг Собственный VPS или сервер
Обновления провайдера Самостоятельные обновления и копии
Подписка Оплата инфраструктуры и сервисов

Ghost CMS на серверах Unihost

Разворачивайте Ghost и другие приложения на собственной инфраструктуре через шаблоны Portainer.

Официальная документация Ghost