[Документация Yandex Cloud](../../../index.md) > [Yandex Compute Cloud](../../index.md) > [Практические руководства](../index.md) > [Развертывание Nextcloud в интеграции с Object Storage](index.md) > Развертывание Nextcloud на ВМ из образа Container Optimized Image

# Развертывание Nextcloud на виртуальной машине Compute Cloud из образа Container Optimized Image в интеграции с Yandex Object Storage

В этом руководстве вы развернете решение Nextcloud на [виртуальной машине](../../concepts/vm.md) Compute Cloud с помощью образа [Container Optimized Image](../../../cos/concepts/index.md) и подключите к нему [бакет](../../../storage/concepts/bucket.md) Object Storage. Для реализации этого решения вам потребуется [доменное имя](https://ru.wikipedia.org/wiki/Доменное_имя), по которому будет осуществляться доступ к ресурсам в Nextcloud.

Чтобы развернуть Nextcloud с интеграцией бакета Object Storage на ВМ с помощью образа Container Optimized Image:

1. [Подготовьте облако к работе](#before-you-begin).
1. [Создайте и настройте облачную сеть](#setup-network).
1. [Создайте сервисный аккаунт и статический ключ доступа](#setup-sa).
1. [Создайте бакет Object Storage](#create-bucket).
1. [Создайте виртуальную машину](#create-vm).
1. [Создайте ресурсную A-запись в публичной зоне DNS вашего домена](#create-a-record).
1. [Настройте Nextcloud на виртуальной машине](#setup-nextcloud).
1. [Протестируйте работу решения](#test).

Если созданные ресурсы вам больше не нужны, [удалите их](#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}

В стоимость предлагаемого решения входят: 
* плата за [диски](../../concepts/disk.md) и постоянно запущенные [ВМ](../../concepts/vm.md) ([тарифы Yandex Compute Cloud](../../pricing.md));
* плата за использование [публичных IP-адресов](../../../vpc/concepts/address.md#public-addresses) ([тарифы Yandex Virtual Private Cloud](../../../vpc/pricing.md));
* плата за [хранение данных](../../../storage/concepts/bucket.md) в Object Storage и [операции](../../../storage/operations/index.md) с ними ([тарифы Yandex Object Storage](../../../storage/pricing.md));
* при использовании Yandex Cloud DNS плата за [DNS-зоны](../../../dns/concepts/dns-zone.md#public-zones) и публичные DNS-запросы ([тарифы Cloud DNS](../../../dns/pricing.md)).

## Создайте и настройте облачную сеть {#setup-network}

1. Создайте [облачную сеть](../../../vpc/concepts/network.md#network) и [подсети](../../../vpc/concepts/network.md#subnet), необходимые для работы создаваемой облачной инфраструктуры:
   
   {% list tabs group=instructions %}
   
   - Консоль управления {#console}
   
     1. В [консоли управления](https://kz.console.yandex.cloud) выберите [каталог](../../../resource-manager/concepts/resources-hierarchy.md#folder), в котором вы будете создавать инфраструктуру.
     1. Перейдите в сервис **Virtual Private Cloud**.
     1. В правом верхнем углу нажмите **Создать сеть**.
     1. В поле **Имя** укажите имя сети `nextcloud-network`.
     1. Убедитесь, что опция **Создать подсети** включена, и нажмите **Создать сеть**.
   
   {% endlist %}
1. Создайте [группу безопасности](../../../vpc/concepts/security-groups.md), разрешающую необходимый для работы инфраструктуры Nextcloud трафик:

    {% list tabs group=instructions %}

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

      1. В [консоли управления](https://kz.console.yandex.cloud) выберите каталог, в котором вы создаете инфраструктуру.
      1. Перейдите в сервис **Virtual Private Cloud**.
      1. На панели слева выберите ![shield](../../../_assets/console-icons/shield.svg) **Группы безопасности**. 
      1. Нажмите **Создать группу безопасности**.
      1. В поле **Имя** укажите имя `nextcloud-sg`.
      1. В поле **Сеть** выберите созданную ранее сеть `nextcloud-network`.
      1. В блоке **Правила** [создайте](../../../vpc/operations/security-group-add-rule.md) следующие правила для управления трафиком:

          | Направление<br/>трафика | Описание | Диапазон портов | Протокол | Источник /<br/>Назначение | CIDR блоки |
          | --- | --- | --- | --- | --- | --- |
          | Входящий | `http`           | `8080` | `TCP` | `CIDR` | `0.0.0.0/0` |
          | Входящий | `https`           | `443` | `TCP` | `CIDR` | `0.0.0.0/0` |
          | Входящий | `ssh`            | `22`   | `TCP`  | `CIDR` | `0.0.0.0/0` |
          | Исходящий | `any`           | `Весь` | `Любой` | `CIDR` | `0.0.0.0/0` |
      1. Нажмите **Создать**.

    {% endlist %}

## Создайте сервисный аккаунт и статический ключ доступа {#setup-sa}

Чтобы обеспечить доступ из Nextcloud к бакету Object Storage, создайте [сервисный аккаунт](../../../iam/concepts/users/service-accounts.md) и [статический ключ доступа](../../../iam/concepts/authorization/access-key.md).

1. Создайте сервисный аккаунт:

    {% list tabs group=instructions %}

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

      1. В [консоли управления](https://kz.console.yandex.cloud) выберите каталог, в котором вы создаете инфраструктуру.
      1. Перейдите в сервис **Identity and Access Management**.
      1. Нажмите кнопку **Создать сервисный аккаунт**.
      1. Укажите имя сервисного аккаунта — `nextcloud-sa`.
      1. Нажмите кнопку ![plus](../../../_assets/console-icons/plus.svg) **Добавить роль** и выберите [роль](../../../iam/roles-reference.md#editor) `editor`.
      1. Нажмите кнопку **Создать**.

    {% endlist %}

1. Создайте статический ключ доступа:

    {% list tabs group=instructions %}

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

      1. В [консоли управления](https://kz.console.yandex.cloud) выберите каталог, в котором вы создаете инфраструктуру.
      1. Перейдите в сервис **Identity and Access Management**.
      1. На панели слева выберите ![FaceRobot](../../../_assets/console-icons/face-robot.svg) **Сервисные аккаунты** и выберите созданный ранее сервисный аккаунт `nextcloud-sa`.
      1. На панели сверху нажмите кнопку ![plus](../../../_assets/console-icons/plus.svg) **Создать новый ключ** и выберите **Создать статический ключ доступа**.
      1. Нажмите кнопку **Создать**.
      1. Сохраните идентификатор и секретный ключ.

          {% note alert %}

          После закрытия диалога значение ключа будет недоступно.

          {% endnote %}

    {% endlist %}

## Создайте бакет Object Storage {#create-bucket}

Создайте бакет Object Storage, который вы будете подключать к Nextcloud:

{% list tabs group=instructions %}

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

  1. В [консоли управления](https://kz.console.yandex.cloud) выберите каталог, в котором вы создаете инфраструктуру.
  1. Перейдите в сервис **Object Storage**.
  1. Справа сверху нажмите **Создать бакет**.
  1. В поле **Имя** укажите имя бакета. Например: `my-nextcloud-bucket`. Имя бакета должно быть [уникальным](../../../storage/concepts/bucket.md#naming) в пределах Yandex Object Storage.
  1. В поле **Макс. размер** задайте нужный размер бакета или включите опцию **Без ограничения**.
  1. Значения остальных параметров оставьте без изменений и нажмите **Создать бакет**.

{% endlist %}

## Создайте виртуальную машину {#create-vm}

Создайте виртуальную машину, на которой будет развернут Nextcloud:

{% list tabs group=instructions %}

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

  1. В [консоли управления](https://kz.console.yandex.cloud) выберите каталог, в котором вы создаете инфраструктуру.
  1. Перейдите в сервис **Compute Cloud**.
  1. На панели слева выберите ![image](../../../_assets/console-icons/server.svg) **Виртуальные машины** и нажмите кнопку **Создать виртуальную машину**.
  1. В блоке **Образ загрузочного диска** перейдите на вкладку **Container Solution** и нажмите кнопку **Настроить**. В открывшемся окне:

      1. Перейдите на вкладку **Docker-compose** и в открывшееся поле скопируйте [спецификацию docker compose](https://github.com/nextcloud/all-in-one/blob/main/compose.yaml) `compose.yaml` из официального репозитория Nextcloud на GitHub.
      1. Нажмите кнопку **Применить**.
  1. В блоке **Расположение** выберите [зону доступности](../../../overview/concepts/geo-scope.md), в которой будет создана ваша виртуальная машина.
  1. В блоке **Диски и файловые хранилища** задайте размер диска не менее `40 ГБ`.
  1. В блоке **Вычислительные ресурсы** выберите конфигурацию `2 vCPU 4 ГБ RAM`.

      Указанной конфигурации будет достаточно для одновременной работы до 10 пользователей. Если активных пользователей решения будет больше, увеличьте объем доступных виртуальной машине ресурсов.
  1. В блоке **Сетевые настройки**:

      * В поле **Подсеть** выберите сеть `nextcloud-network` и подсеть в зоне доступности создаваемой виртуальной машины.
      * В поле **Публичный IP-адрес** оставьте значение `Автоматически`, чтобы назначить ВМ случайный публичный IP-адрес из пула Yandex Cloud.
      * В поле **Группы безопасности** выберите группу безопасности `nextcloud-sg`.
  1. В блоке **Доступ** выберите вариант **SSH-ключ** и укажите данные для доступа к ВМ:

      * В поле **Логин** введите имя пользователя, например: `yc-user`. Не используйте имя `root` или другие имена, зарезервированные ОС. Для выполнения операций, требующих прав суперпользователя, используйте команду `sudo`.
      * В поле **SSH-ключ** выберите SSH-ключ, сохраненный в вашем профиле [пользователя организации](../../../organization/concepts/membership.md).
        
        Если в вашем профиле нет сохраненных SSH-ключей или вы хотите добавить новый ключ:
        
        1. Нажмите кнопку **Добавить ключ**.
        1. Задайте имя SSH-ключа.
        1. Выберите вариант:
        
            * `Ввести вручную` — вставьте содержимое открытого [SSH](../../../glossary/ssh-keygen.md)-ключа. Пару SSH-ключей необходимо [создать](../../operations/vm-connect/ssh.md#creating-ssh-keys) самостоятельно.
            * `Загрузить из файла` — загрузите открытую часть SSH-ключа. Пару SSH-ключей необходимо создать самостоятельно.
            * `Сгенерировать ключ` — автоматическое создание пары SSH-ключей.
            
              При добавлении сгенерированного SSH-ключа будет создан и загружен архив с парой ключей. В ОС на базе Linux или macOS распакуйте архив в папку `/home/<имя_пользователя>/.ssh`. В ОС Windows распакуйте архив в папку `C:\Users\<имя_пользователя>/.ssh`. Дополнительно вводить открытый ключ в консоли управления не требуется.
        
        1. Нажмите кнопку **Добавить**.
        
        SSH-ключ будет добавлен в ваш профиль пользователя организации. Если в организации [отключена](../../../organization/operations/os-login-access.md) возможность добавления пользователями SSH-ключей в свои профили, добавленный открытый SSH-ключ будет сохранен только в профиле пользователя внутри создаваемого ресурса.
  1. В блоке **Общая информация** задайте имя ВМ: `nextcloud-vm`.
  1. Нажмите кнопку **Создать ВМ**.

{% endlist %}

{% note tip %}

Чтобы в будущем [публичный IP-адрес](../../../vpc/concepts/address.md#public-addresses) созданной виртуальной машины не изменился в случае ее возможной остановки, [сделайте](../../../vpc/operations/set-static-ip.md) его статическим.

{% endnote %}

## Создайте ресурсную A-запись в публичной зоне DNS вашего домена {#create-a-record}

Для выполнения этого шага вам понадобится зарегистрированное доменное имя. Например: `example.com`.

Для того чтобы запросы, поступающие к вашему домену, направлялись на созданную ранее виртуальную машину, создайте в вашей [публичной зоне DNS](../../../dns/concepts/dns-zone.md#public-zones) ресурсную [A-запись](../../../dns/concepts/resource-record.md#a), указывающую на публичный IP-адрес виртуальной машины. Порядок действий на этом шаге будет зависеть от того, управляет вашим доменом сервис [Yandex Cloud DNS](../../../dns/index.md) или сторонний DNS-провайдер.

{% cut "**Если вашим доменом управляет сервис Yandex Cloud DNS**" %}
 
{% list tabs group=instructions %}

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

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

      {% note info %}

      Если для нужного доменного имени у вас еще нет публичной зоны DNS, [создайте](../../../dns/operations/zone-create-public.md) ее.

      {% endnote %}

      1. В поле **Имя** выберите `Создать поддомен` и введите `nextcloud`, чтобы создать поддомен (например, `nextcloud.example.com`) в вашей доменной зоне.
      1. В поле **Тип** выберите `A`.
      1. В поле **Значение** укажите публичный IP-адрес виртуальной машины.

          Узнать публичный IP-адрес виртуальной машины вы можете в [консоли управления](https://kz.console.yandex.cloud) на странице с информацией о ВМ в блоке **Сеть** в поле **Публичный IPv4-адрес**.
      1. Значения других параметров оставьте без изменения и нажмите кнопку **Создать**.

{% endlist %}

{% endcut %}

{% cut "**Если вашим доменом управляет сторонний DNS-провайдер**" %}

Разместите у своего DNS-провайдера или на собственном [DNS-сервере](../../../glossary/dns.md#dns-server) ресурсную A-запись со следующими значениями:

* Хост — `nextcloud.<имя_вашего_домена>.`.
* Тип — `A`.
* Значение — `<IP-адрес_ВМ>`.

{% endcut %}

## Настройте Nextcloud на виртуальной машине {#setup-nextcloud}

В рамках этого руководства вы выполните базовую настройку вашего экземпляра Nextcloud и интеграцию в Nextcloud бакета Object Storage.

### Выполните базовую настройку Nextcloud {#initialize}

Выполните базовую настройку решения Nextcloud на созданной виртуальной машине. Для настройки используйте веб-интерфейс Nextcloud:

1. В окне браузера введите зарегистрированный ранее поддомен с номером порта `8080`. Например: `https://nextcloud.example.com:8080`.

    Браузер выдаст предупреждение о небезопасном соединении, так как для вашего экземпляра Nextcloud еще не настроен [TLS](https://ru.wikipedia.org/wiki/TLS)-сертификат. Переходите на страницу, несмотря на предупреждение. Позднее Nextcloud самостоятельно настроит сертификат для вашего экземпляра.
1. В открывшемся окне скопируйте парольную фразу из поля **Passphrase**.

    {% note warning %}

    Парольная фраза отображается всего один раз: повторно вывести ее на экран не получится. Без парольной фразы вы не сможете получить пароль администратора и настроить Nextcloud.

    {% endnote %}
1. Нажмите кнопку **Open Nextcloud AIO login**.
1. В окне **Nextcloud AIO Login** введите скопированную парольную фразу и нажмите кнопку **Log in**.
1. В открывшемся окне в секции **New AIO instance** введите имя домена, по которому доступен ваш экземпляр Nextcloud (например, `nextcloud.example.com`), и нажмите **Submit Domain**.
1. В следующем окне в секции **Optional containers** отключите опцию `Nextcloud Talk` и нажмите кнопку **Save changes**.

    В рамках этого руководства этот модуль не является обязательным. При необходимости вы сможете установить его позднее в административном интерфейсе Nextcloud.
1. Нажмите кнопку **Download and start containers**.

    Загрузка и запуск необходимых контейнеров могут занять несколько минут. Дождитесь завершения этого процесса.
1. После запуска всех контейнеров в окне браузера в поле **Initial Nextcloud password:** отобразится пароль администратора вашего экземпляра Nextcloud. Сохраните этот пароль и нажмите кнопку **Open your Nextcloud**.
1. В окне аутентификации введите имя пользователя `admin` и пароль, полученный на предыдущем шаге. Затем нажмите кнопку **Log in**.

### Настройте интеграцию бакета Object Storage {#integrate-bucket}

1. Откройте меню управления приложениями. Для этого в правом верхнем углу экрана нажмите на значок пользователя и в открывшемся контекстном меню выберите ![plus](../../../_assets/console-icons/plus.svg) **Apps**.
1. В открывшемся окне на панели слева выберите ![person](../../../_assets/console-icons/person.svg) **Your apps**.
1. В открывшемся списке найдите приложение `External storage support` и в строке с этим приложением нажмите кнопку **Enable**.

    При необходимости для подтверждения действия во всплывающем окне введите ваш пароль администратора Nextcloud.
1. Откройте основное меню настроек. Для этого в правом верхнем углу экрана нажмите на значок пользователя и в открывшемся контекстном меню выберите ![admin-icon](../../../_assets/tutorials/integrate-nextcloud/admin-icon.svg) **Administration settings**.
1. В открывшемся окне на панели слева в блоке **Administration** выберите ![app-dark-icon](../../../_assets/tutorials/integrate-nextcloud/app-dark-icon.svg) **External storage** и в открывшемся окне в блоке **External storage** задайте настройки интеграции с Object Storage:

    1. В секции **External storage** выберите `Amazon S3`.
    1. В секции **Authentication** выберите `Access key`.
    1. В секции **Configuration**:

        * В поле **Bucket** укажите имя созданного ранее бакета. Например: `my-nextcloud-bucket`.
        * В поле **Hostname** укажите `storage.yandexcloud.kz`.
        * В поле **Port** укажите `443`.
        * В поле **Access key** вставьте идентификатор созданного ранее статического ключа доступа.
        * В поле **Secret key** вставьте секретный ключ созданного ранее статического ключа доступа.
    1. В секции **Available for** включите опцию **All people**.
    1. В правой части редактируемого блока нажмите значок ![check](../../../_assets/console-icons/check.svg), чтобы сохранить изменения.

        Для подтверждения действия во всплывающем окне введите ваш пароль администратора Nextcloud.

## Протестируйте работу решения {#test}

Чтобы проверить работу интеграции Object Storage с Nextcloud:

1. На вашем локальном компьютере откройте браузер и в адресной строке введите имя домена, на котором развернут ваш экземпляр Nextcloud:

    ```text
    https://nextcloud.example.com
    ```
1. Аутентифицируйтесь в Nextcloud с помощью логина `admin` и сохраненного пароля.
1. В левой части верхнего меню выберите ![folder-fill](../../../_assets/console-icons/folder-fill.svg) **Files**.
1. В меню слева выберите **External storage** и выберите **AmazonS3**.
1. Нажмите ![plus](../../../_assets/console-icons/plus.svg) **New** и выберите ![arrow-shape-up-from-line](../../../_assets/console-icons/arrow-shape-up-from-line.svg) **Upload files**, чтобы загрузить в хранилище файл с локального компьютера.
1. Выберите файл на локальном компьютере и загрузите его в хранилище.

    Загруженный файл отобразится в хранилище `AmazonS3` Nextcloud.
1. В сервисе Yandex Object Storage [убедитесь](../../../storage/operations/objects/list.md), что файл был загружен в бакет.

На этом завершено развертывание экземпляра решения Nextcloud и его интеграция с хранилищем Object Storage.

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

1. Удалите ресурсную запись [в Yandex Cloud DNS](../../../dns/operations/resource-record-delete.md) или в личном кабинете вашего регистратора доменных имен.
1. Если вы создавали публичную зону DNS, удалите ее в [Yandex Cloud DNS](../../../dns/operations/zone-delete.md) или в личном кабинете вашего регистратора доменных имен.
1. [Удалите](../../operations/vm-control/vm-delete.md) виртуальную машину.
1. [Удалите](../../../storage/operations/objects/delete.md) созданные в бакете объекты, затем [удалите](../../../storage/operations/buckets/delete.md) сам бакет.
1. [Удалите](../../../iam/operations/sa/delete.md) сервисный аккаунт.
1. Последовательно удалите [подсети](../../../vpc/operations/subnet-delete.md), [группу безопасности](../../../vpc/operations/security-group-delete.md) и [облачную сеть](../../../vpc/operations/network-delete.md).

#### Полезные ссылки {#see-also}

* [Развертывание Nextcloud вручную на виртуальной машине или в группе виртуальных машин Compute Cloud в интеграции с Yandex Object Storage](fault-tolerant.md)
* [Развертывание Nextcloud на виртуальной машине или в группе виртуальных машин Compute Cloud в интеграции с Yandex Object Storage с помощью Terraform](terraform.md)