[Документация Yandex Cloud](../../index.md) > [Yandex Cloud Marketplace](../index.md) > Пользователям > [Практические руководства](index.md) > Установка Ghost CMS High Availability с помощью Cloud Apps

# Установка Ghost CMS High Availability с помощью Cloud Apps


{% note warning %}

Часть ресурсов, необходимых для прохождения практического руководства, доступны только в [регионе Россия](../../overview/concepts/region.md).

{% endnote %}


В этом руководстве вы установите и настроите [Ghost CMS High Availability](https://ghost.org/) — платформу для публикации контента и ведения блогов. Приложение будет развернуто с помощью [Yandex Cloud Apps](../../cloud-apps/index.md) на виртуальной машине с автоматической настройкой всех необходимых ресурсов, включая базу данных, веб-сервер и интеграцию с почтовым сервисом.

Чтобы установить Ghost CMS High Availability:

1. [Подготовьте облако к работе](#before-you-begin).
1. [Создайте сеть и подсети VPC](#create-network).
1. [Настройте DNS-зону](#configure-dns).
1. [Создайте секрет Yandex Lockbox](#create-secret).
1. [Установите Ghost CMS High Availability](#install-ghost).
1. [Настройте Ghost CMS High Availability](#configure-ghost).
1. [Проверьте результат](#check-result).

Если созданные ресурсы вам больше не нужны, [удалите их](#clear-out).


## Подготовьте облако к работе {#before-you-begin}

Зарегистрируйтесь в Yandex Cloud и создайте [платежный аккаунт](../../billing/concepts/billing-account.md):
1. Перейдите в [консоль управления](https://kz.console.yandex.cloud), затем войдите в Yandex Cloud или зарегистрируйтесь.
1. На странице **[Yandex Cloud Billing](https://kz.console.yandex.cloud/billing)** убедитесь, что у вас подключен платежный аккаунт, и он находится в [статусе](../../billing/concepts/billing-account-statuses.md) `ACTIVE` или `TRIAL_ACTIVE`. Если платежного аккаунта нет, [создайте его](../../billing/quickstart/index.md) и [привяжите](../../billing/operations/pin-cloud.md) к нему облако.

Если у вас есть активный платежный аккаунт, вы можете создать или выбрать [каталог](../../resource-manager/concepts/resources-hierarchy.md#folder), в котором будет работать ваша инфраструктура, на [странице облака](https://kz.console.yandex.cloud/cloud).

[Подробнее об облаках и каталогах](../../resource-manager/concepts/resources-hierarchy.md).


### Необходимые платные ресурсы {#paid-resources}

В стоимость поддержки создаваемой инфраструктуры входят:

* Плата за использование [виртуальной машины](../../compute/concepts/vm.md) и хранение данных на [диске](../../compute/concepts/disk.md) ([тарифы Yandex Compute Cloud](../../compute/pricing.md)).
* Плата за использование [публичного IP-адреса](../../vpc/concepts/address.md#public-addresses) и исходящий трафик ([тарифы Yandex Virtual Private Cloud](../../vpc/pricing.md)).
* Плата за использование публичной [DNS-зоны](../../dns/concepts/dns-zone.md) и за публичные DNS-запросы ([тарифы Yandex Cloud DNS](../../dns/pricing.md)).
* Плата за выделенные [хостам](../../managed-mysql/concepts/index.md) MySQL® вычислительные ресурсы, объем хранилища и резервных копий ([тарифы Yandex Managed Service for MySQL®](../../managed-mysql/pricing.md)).
* Плата за использование [бакета](../../storage/concepts/bucket.md) для хранения медиафайлов ([тарифы Yandex Object Storage](../../storage/pricing.md)).
* Плата за хранение [секретов](../../lockbox/concepts/secret.md) и операции с ними (тарифы [Yandex Lockbox](../../lockbox/pricing.md)).
* Плата за исходящие письма (тарифы [Yandex Cloud Postbox](../../postbox/pricing.md)).


## Создайте сеть и подсети VPC {#create-network}

Создайте [облачную сеть](../../vpc/concepts/network.md) и [подсети](../../vpc/concepts/network.md#subnet), в которых будут развернуты ресурсы.

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. В [консоли управления](https://kz.console.yandex.cloud) перейдите в каталог, в котором будете разворачивать инфраструктуру.
  1. Перейдите в сервис **Virtual Private Cloud**.
  1. В правом верхнем углу нажмите **Создать сеть**.
  1. В поле **Имя** укажите имя сети. Требования к имени:

      * длина — от 3 до 63 символов;
      * может содержать строчные буквы латинского алфавита, цифры и дефисы;
      * первый символ — буква, последний — не дефис.
  
  1. Оставьте включенной опцию **Создать подсети**.
  1. Нажмите **Создать сеть**.

- Yandex Cloud CLI {#cli}

  Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), [установите и инициализируйте его](../../cli/quickstart.md#install).

  По умолчанию используется каталог, указанный при [создании](../../cli/operations/profile/profile-create.md) профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду `yc config set folder-id <идентификатор_каталога>`. Также для любой команды вы можете указать другой каталог с помощью параметров `--folder-name` или `--folder-id`. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.

  1. Создайте облачную сеть в каталоге по умолчанию:

      ```
      yc vpc network create --name wordpress-network
      ```

  1. Получите список облачных сетей в каталоге:

      ```
      yc vpc network list --folder-id b1g6ci08ma55********
      ```

      Результат:

      ```
      +----------------------+-------------------+
      |          ID          |      NAME         |
      +----------------------+-------------------+
      | enpavfmgapum******** | wordpress-network |
      | enplom7a98s1******** | default           |
      +----------------------+-------------------+
      ```

  1. Выберите `NAME` или `ID` требуемой облачной сети. Создайте подсеть в зоне доступности `kz1-a`:

      ```
      yc vpc subnet create \
        --network-id enpavfmgapum******** \
        --zone kz1-a \
        --range 192.168.0.0/24
      ```

      Где:

      * `--network-id` — идентификатор облачной сети. При создании подсети указывается облачная сеть, в которой создаются подсеть и CIDR.
      * `--zone` — зона доступности, в которой создается подсеть.
      * `--range` — список внутренних IPv4-адресов, определенных для данной подсети. Например, `10.0.0.0/22` или `192.168.0.0/16`. Адреса должны быть уникальными внутри сети. Минимальный размер подсети — /28, а максимальный размер подсети — /16. Поддерживается только IPv4.

      Требования к названию подсети:

      * длина — от 3 до 63 символов;
      * может содержать строчные буквы латинского алфавита, цифры и дефисы;
      * первый символ — буква, последний — не дефис.

  1. Аналогичным образом создайте подсеть в зоне доступности `kz1-d`.

- API {#api}

  Чтобы создать облачную сеть, воспользуйтесь методом REST API [create](../../vpc/api-ref/Network/create.md) для ресурса [Network](../../vpc/api-ref/Network/index.md) или вызовом gRPC API [NetworkService/Create](../../vpc/api-ref/grpc/Network/create.md) и передайте в запросе идентификатор каталога, в котором будет размещена сеть, в параметре `folderId`.

  О том, как узнать идентификатор каталога, читайте в разделе [Получение идентификатора каталога](../../resource-manager/operations/folder/get-id.md).

  Чтобы создать подсети в зонах доступности `kz1-a` и `kz1-d`, воспользуйтесь методом REST API [create](../../vpc/api-ref/Subnet/create.md) для ресурса [Subnet](../../vpc/api-ref/Subnet/index.md) или вызовом gRPC API [SubnetService/Create](../../vpc/api-ref/grpc/Subnet/create.md) и передайте в запросе:

  * Идентификатор каталога, в котором будет размещена подсеть, в параметре `folderId`.
  * Идентификатор сети, в которой будет размещена подсеть, в параметре `networkId`.
  * Идентификатор зоны доступности, в которой будет размещена подсеть, в параметре `zoneId`.
  * Список внутренних IPv4-адресов, определенных для данной подсети, в массиве `v4CidrBlocks[]`. Например, `10.0.0.0/22` или `192.168.0.0/16`. Адреса должны быть уникальными внутри сети. Минимальный размер подсети — `/28`, а максимальный размер подсети — `/16`. Поддерживается только IPv4.

  Чтобы узнать идентификатор подсети, воспользуйтесь методом REST API [list](../../vpc/api-ref/Subnet/list.md) для ресурса [Subnet](../../vpc/api-ref/Subnet/index.md) или вызовом gRPC API [SubnetService/List](../../vpc/api-ref/grpc/Subnet/list.md) и передайте в запросе идентификатор каталога в параметре `folderId`.

{% endlist %}


## Настройте DNS-зону {#configure-dns}

Создайте [публичную DNS-зону](../../dns/concepts/dns-zone.md#public-zones) и делегируйте на нее домен. Подробнее о делегировании домена читайте в [инструкции](../../troubleshooting/dns/how-to/delegate-public-zone.md).

Перед установкой приложения вам необходимо создать публичную DNS-зону и делегировать на нее домен. Подробнее о делегировании домена читайте в [инструкции](../../troubleshooting/dns/how-to/delegate-public-zone.md).

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. [Перейдите](https://kz.console.yandex.cloud/link/dns/) в сервис **Cloud DNS**.
  1. Нажмите кнопку **Создать зону**.
  1. Задайте настройки зоны DNS:
     * **Зона** — укажите ваш зарегистрированный домен, например `example.com.` (с точкой в конце).
     * **Тип** — выберите `Публичная`.
     * **Имя** — укажите имя зоны, например `example-zone`.
  1. Нажмите кнопку **Создать**.

  1. Делегируйте домен на серверы Yandex Cloud. Для этого в личном кабинете вашего регистратора доменных имен укажите адреса DNS-серверов `ns1.yandexcloud.kz` и `ns2.yandexcloud.kz`.

     Делегирование происходит не сразу. Серверы интернет-провайдеров обновляют записи до 24 часов. Проверить делегирование домена можно с помощью [сервиса Whois](https://www.reg.ru/whois/check_site) или утилиты `dig`:

     ```bash
     dig +short NS example.com
     ```

     Результат:

     ```text
     ns2.yandexcloud.kz.
     ns1.yandexcloud.kz.
     ```

- Yandex Cloud CLI {#cli}

  Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), [установите и инициализируйте его](../../cli/quickstart.md#install).

  1. Создайте публичную зону DNS:

     ```bash
     yc dns zone create \
       --name example-zone \
       --zone example.com. \
       --public-visibility=true
     ```

     Где `--zone` — имя вашего домена, например `example.com.`. Значение параметра `--zone` должно заканчиваться точкой.

     Результат:

     ```text
     id: dns39gihj0ef********
     folder_id: b1g681qpemb4********
     created_at: "2024-09-09T15:23:34.919887Z"
     name: example-zone
     zone: example.com.
     public_visibility: {}
     ```

     Подробнее о команде `yc dns zone create` читайте в [справочнике CLI](../../cli/cli-ref/dns/cli-ref/zone/create.md).

  1. Делегируйте домен на серверы Yandex Cloud. Для этого в личном кабинете вашего регистратора доменных имен укажите адреса DNS-серверов `ns1.yandexcloud.kz` и `ns2.yandexcloud.kz`.

     Делегирование происходит не сразу. Серверы интернет-провайдеров обновляют записи в течение 24 часов.

- API {#api}

  Чтобы создать публичную зону DNS, воспользуйтесь методом REST API [create](../../dns/api-ref/DnsZone/create.md) для ресурса [DnsZone](../../dns/api-ref/DnsZone/index.md) или вызовом gRPC API [DnsZoneService/Create](../../dns/api-ref/grpc/DnsZone/create.md).

  Делегируйте домен на серверы Yandex Cloud. Для этого в личном кабинете вашего регистратора доменных имен укажите адреса DNS-серверов `ns1.yandexcloud.kz` и `ns2.yandexcloud.kz`.

{% endlist %}


## Создайте секрет Yandex Lockbox {#create-secret}

Создайте секрет [Yandex Lockbox](../../lockbox/index.md) для хранения пароля базы данных [Managed Service for MySQL®](../../managed-mysql/index.md).

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. Перейдите в сервис **Lockbox**.
  1. Нажмите **Создать секрет**.
  1. В поле **Имя** введите имя секрета: `db-password-secret`.
  1. В поле **Тип секрета** выберите `Пользовательский`.
  1. В поле **Ключ** введите `db_password`.
  1. В поле **Значение** укажите пароль, который будет использоваться для базы данных Managed Service for MySQL®. Требования к паролю:

      * Длина от 8 до 128 символов.
      * Может содержать цифры, латинские буквы в верхнем и нижнем регистре, специальные символы.
      * Не должен состоять только из цифр.

  1. Нажмите **Создать**.

- Yandex Cloud CLI {#cli}

  Выполните команду:

  ```bash
  yc lockbox secret create \
    --name db-password-secret \
    --payload "[{'key': 'db_password', 'text_value': '<пароль>'}]"
  ```

  Где `text_value` — пароль базы данных Managed Service for MySQL®. Требования к паролю:

  * Длина от 8 до 128 символов.
  * Может содержать цифры, латинские буквы в верхнем и нижнем регистре, специальные символы.
  * Не должен состоять только из цифр.

  Результат:

  ```text
  id: e6q0rdjdggjp********
  folder_id: b1g681qpemb4********
  created_at: "2025-07-12T18:23:49.844Z"
  name: db-password-secret
  status: ACTIVE
  current_version:
    id: e6qbp772i014********
    secret_id: e6q0rdjdggjp********
    created_at: "2025-07-12T18:23:49.844Z"
    status: ACTIVE
    payload_entry_keys:
      - db_password
  ```

- API {#api}

  Чтобы создать секрет, воспользуйтесь методом REST API [create](../../lockbox/api-ref/Secret/create.md) для ресурса [Secret](../../lockbox/api-ref/Secret/index.md) или вызовом gRPC API [SecretService/Create](../../lockbox/api-ref/grpc/Secret/create.md).

  В параметре `key` для ключа, в котором будет храниться пароль базы данных Managed Service for MySQL®, укажите `db_password`. Требования к паролю:

  * Длина от 8 до 128 символов.
  * Может содержать цифры, латинские буквы в верхнем и нижнем регистре, специальные символы.
  * Не должен состоять только из цифр.

{% endlist %}


## Установите Ghost CMS High Availability {#install-ghost}

Установите Ghost CMS High Availability с помощью Cloud Apps.

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. Перейдите в сервис **Cloud Apps**.
  1. Нажмите **Установить приложение**.
  1. Выберите приложение **Ghost CMS High Availability** и нажмите **Использовать**.
  1. Задайте параметры приложения:

      #|
      || **Параметр** | **Обязательный** | **Значение по умолчанию** | **Описание** ||
      || **Имя** | Да | — | Название экземпляра приложения. ||
      || **Описание** | — | — | Описание экземпляра приложения. ||
      || **Сервисный аккаунт** | Да | — | Сервисный аккаунт, от имени которого будет происходить установка приложения. Сервисный аккаунт должен иметь роль `admin` на каталог.
      Чтобы сервисный аккаунт с необходимыми правами создался во время установки приложения, выберите `Автоматически`. ||
      || **Идентификатор DNS-зоны** | Да | — | Идентификатор DNS-зоны, в которой будет находиться домен приложения. ||
      || **Поддомен сайта** | — | Пустой | Домен, на котором будет доступен основной сайт. Формируется добавлением поддомена к домену DNS-зоны: `site.example.com` или `example.com`, если поддомен не указан. ||
      || **Поддомен панели администратора** | — | `admin` | Домен, на котором будет доступна панель администратора. Формируется добавлением поддомена к домену DNS-зоны: `admin.example.com/ghost`. ||
      || **Отправитель** | — | `noreply@<домен_сайта>` | Отправитель почты. Используется для настройки [SMTP](https://ru.wikipedia.org/wiki/SMTP) через Yandex Cloud Postbox. ||
      || **Подсеть в kz1-a** | Да | — | Подсеть в зоне доступности kz1-a для кластера Managed Service for MySQL®, созданная ранее.
||
      || **Подсеть в kz1-d** | Да | — | Подсеть в зоне доступности kz1-d для кластера Managed Service for MySQL®, созданная ранее. ||
      || **Подсеть VPC для ВМ** | — | Подсеть в зоне доступности `kz1-d` | Подсеть, в которой будет развернута ВМ. ||
      || **Количество vCPU** | — | `2` | Количество ядер vCPU. ||
      || **Объём RAM** | — | `2` | Объем RAM в ГБ. ||
      || **Гарантированная доля vCPU** | — | `100` | Гарантированная доля vCPU в процентах. Доступные значения — 20%, 50% или 100%. ||
      || **Публичный SSH-ключ** | — | — | Ключ добавится в `authorized_keys` пользователя ВМ `ghost`.
      Рекомендуется указать публичный SSH-ключ, чтобы иметь доступ к ВМ по SSH. Пару ключей для подключения по [SSH](../../glossary/ssh-keygen.md) необходимо [создать самостоятельно](../../compute/operations/vm-connect/ssh.md). ||
      || **Тип диска** | — | `network-ssd` | Тип диска ВМ. ||
      || **Размер диска** | — | `20` | Размер диска ВМ в ГБ. ||
      || **Идентификатор секрета с паролем БД** | Да | — | Секрет с паролем для подключения к кластеру Managed Service for MySQL®. Пароль должен быть указан в ключе `db_password`. ||
      || **Размер диска кластера Managed Service for MySQL®** | — | `20` | Размер диска кластера Managed Service for MySQL® в ГБ. ||
      |#

  1. Нажмите **Установить**.

      Установка приложения и создание необходимых ресурсов займут 5–10 минут.

      После создания всех ресурсов на ВМ будет происходить настройка сайта и выпуск TLS-сертификатов. Дождитесь завершения установки.

{% endlist %}


## Настройте Ghost CMS High Availability {#configure-ghost}

После успешной установки приложения настройте Ghost CMS High Availability:

1. Откройте в браузере адрес панели администратора:

    ```text
    https://<поддомен_панели_администратора>.<домен>/ghost
    ```

    Где:

    * `<поддомен_панели_администратора>` — поддомен панели администратора, который вы указали при создании приложения. По умолчанию — `admin`.
    * `<домен>` — домен, который вы указали при создании DNS-зоны.

    Например: `https://admin.example.com/ghost`.

1. Заполните форму регистрации администратора:

    * **Site title** — укажите название сайта.
    * **Full name** — укажите имя, от которого будут публиковаться посты.
    * **Email address** — укажите адрес электронной почты для входа в панель администратора. На указанный адрес придет уведомление.
    * **Password** — создайте надежный пароль для входа в панель администратора.

1. Нажмите **Create account & start publishing**.

    После регистрации вы будете перенаправлены в панель администратора Ghost CMS High Availability, где сможете начать работу с сайтом.


## Проверьте результат {#check-result}

Убедитесь, что Ghost CMS High Availability работает корректно:

1. Создайте тестовый пост:

    1. В интерфейсе панели администратора возле вкладки **Posts** нажмите ![image](../../_assets/console-icons/plus.svg).
    1. Заполните заголовок и содержимое поста.
    1. Загрузите изображение в пост — оно автоматически сохранится в S3-бакете.
    1. Справа вверху нажмите **Publish** → **Continue, final review** → **Publish post, right now**.
    1. В открывшемся окне скопируйте ссылку на пост — нажмите **Copy link**.


1. Откройте скопированную ссылку в браузере.

    В результате откроется пост с URL вида `https://example.com/new-post/`.


## Как удалить созданные ресурсы {#clear-out}

{% note warning %}

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

{% endnote %}

Чтобы остановить работу и перестать платить за созданные ресурсы:

1. [Удалите](../../storage/operations/objects/delete-all.md) все объекты из бакета Object Storage, созданного при установке приложения.
1. Удалите установленное приложение Ghost CMS High Availability:

    1. Перейдите в сервис **Cloud Apps**.
    1. Найдите установленное приложение Ghost CMS High Availability в списке.
    1. Нажмите ![image](../../_assets/console-icons/ellipsis.svg) рядом с приложением и выберите **Удалить**.
    1. Подтвердите удаление приложения.

        Дождитесь завершения удаления.

1. [Удалите](../../dns/operations/zone-delete.md) публичную DNS-зону.
1. [Удалите](../../lockbox/operations/secret-delete.md) секрет Yandex Lockbox.
1. Удалите [подсети](../../vpc/operations/subnet-delete.md) и [сеть](../../vpc/operations/network-delete.md) VPC.
1. Удалите адрес Yandex Cloud Postbox и связанную с ним [DNS-запись](../../dns/operations/resource-record-delete.md) — они не удалятся автоматически при удалении приложения.