Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Истории успеха
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Доступны в регионе
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • ИИ для бизнеса
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Партнёрская программа
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Истории успеха
  • Документация
  • Блог
Проект Яндекса
© 2025 ТОО «Облачные Сервисы Казахстан»
Yandex Object Storage
    • Все руководства
    • Получение статистики запросов к объекту с использованием S3 Select
    • Получение статистики посещения сайта с использованием S3 Select
    • Получение статистики запросов к объектам с использованием Yandex Query
    • Анализ поресурсной детализации расходов
    • Шифрование на стороне сервера
    • Интеграция L7-балансировщика с CDN и Object Storage
    • Сине-зеленое и канареечное развертывание версий сервиса
    • Анализ логов с использованием DataLens
    • Монтирование бакетов к файловой системе хостов Yandex Data Processing
    • Использование Object Storage в Yandex Data Processing
    • Импорт данных из Object Storage, обработка и экспорт в Managed Service for ClickHouse®
    • Подключение бакета как диска в Windows
    • Миграция данных из Yandex Data Streams с помощью Yandex Data Transfer
    • Использование гибридного хранилища в Yandex Managed Service for ClickHouse®
    • Загрузка данных из Yandex Managed Service for OpenSearch в Yandex Object Storage с помощью Yandex Data Transfer
    • Автоматическое копирование объектов из бакета в бакет
    • Регулярное асинхронное распознавание аудиофайлов в бакете
    • Обучение модели в Yandex DataSphere на данных из Object Storage
    • Подключение к Object Storage из VPC
    • Перенос данных в Yandex Managed Service for PostgreSQL с использованием Yandex Data Transfer
    • Загрузка данных в Yandex MPP Analytics for PostgreSQL с помощью Yandex Data Transfer
    • Загрузка данных в Yandex Managed Service for ClickHouse® с помощью Yandex Data Transfer
    • Загрузка данных в Yandex Managed Service for YDB с помощью Yandex Data Transfer
    • Обмен данными между Yandex Managed Service for ClickHouse® и Yandex Data Processing
    • Загрузка данных из Yandex Managed Service for YDB с помощью Yandex Data Transfer
    • Хостинг статического сайта на фреймворке Gatsby в Object Storage
    • Миграция базы данных из Managed Service for PostgreSQL в Object Storage
    • Обмен данными между Yandex Managed Service for ClickHouse® и Yandex Data Processing
    • Импорт данных из Yandex Managed Service for PostgreSQL в Yandex Data Processing с помощью Sqoop
    • Импорт данных из Yandex Managed Service for MySQL® в Yandex Data Processing с помощью Sqoop
    • Миграция данных из Yandex Object Storage в Yandex Managed Service for MySQL® с помощью Yandex Data Transfer
    • Миграция базы данных из Yandex Managed Service for MySQL® в Yandex Object Storage
    • Выгрузка данных Greenplum® в холодное хранилище Yandex Object Storage
    • Загрузка данных из Яндекс Директ в витрину Yandex Managed Service for ClickHouse® с использованием Yandex Cloud Functions, Yandex Object Storage и Yandex Data Transfer
    • Загрузка состояний Terraform в Object Storage
    • Блокировка состояний Terraform с помощью Managed Service for YDB
    • Визуализация данных Yandex Query
    • Публикация обновлений для игр
    • Резервное копирование ВМ с помощью Хайстекс Акура
    • Резервное копирование в Object Storage с помощью CloudBerry Desktop Backup
    • Резервное копирование в Object Storage через Duplicati
    • Резервное копирование в Object Storage с помощью Bacula
    • Резервное копирование в Object Storage с помощью Veeam Backup
    • Резервное копирование в Object Storage с помощью Veritas Backup Exec
    • Резервное копирование кластера Managed Service for Kubernetes в Object Storage
    • Разработка пользовательской интеграции в API Gateway
    • Сокращатель ссылок
    • Хранение журналов работы приложения
    • Разработка навыка Алисы и сайта с авторизацией
    • Создание интерактивного serverless-приложения с использованием WebSocket
    • Развертывание веб-приложения с использованием Java Servlet API
    • Разработка Telegram-бота
    • Репликация логов в Object Storage с помощью Fluent Bit
    • Репликация логов в Object Storage с помощью Data Streams
    • Загрузка аудитных логов в SIEM ArcSight
    • Загрузка аудитных логов в SIEM Splunk
    • Создание сервера MLFlow для логирования экспериментов и артефактов
    • Работа с данными с помощью Yandex Query
    • Федеративные запросы к данным с помощью Query
    • Распознавание архива изображений в Vision OCR
    • Регулярное распознавание изображений и PDF-документов из бакета Object Storage
    • Конвертация видео в GIF на Python
    • Автоматизация задач с помощью Managed Service for Apache Airflow™
    • Обработка файлов детализации в сервисе Yandex Cloud Billing
    • Развертывание веб-приложения с JWT-авторизацией в API Gateway и аутентификацией в Firebase
    • Поиск событий Yandex Cloud в Yandex Query
    • Поиск событий Yandex Cloud в Object Storage
    • Создание внешней таблицы на базе таблицы из бакета с помощью конфигурационного файла
    • Миграция базы данных из Google BigQuery в Managed Service for ClickHouse®
      • Обзор
      • Развертывание Nextcloud на ВМ из образа Container Optimized Image
      • Развертывание Nextcloud на ВМ или в группе ВМ вручную
      • Развертывание Nextcloud на ВМ или в группе ВМ с помощью Terraform
    • Использование Object Storage в Yandex Managed Service for Apache Spark™
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • Логи бакета
  • История изменений
  • Вопросы и ответы
  • Обучающие курсы

В этой статье:

  • Перед началом работы
  • Необходимые платные ресурсы
  • Разверните Nextcloud в базовой конфигурации
  • Создайте инфраструктуру для базовой конфигурации
  • Установите и настройте Nextcloud на виртуальной машине
  • Протестируйте работу решения в базовой конфигурации
  • Разверните Nextcloud в отказоустойчивой конфигурации
  • Донастройте Nextcloud
  • Расширьте инфраструктуру для отказоустойчивой конфигурации
  • Протестируйте работу решения в отказоустойчивой конфигурации
  • Как удалить созданные ресурсы
  1. Практические руководства
  2. Развертывание Nextcloud в интеграции с Object Storage
  3. Развертывание Nextcloud на ВМ или в группе ВМ с помощью Terraform

Развертывание Nextcloud на виртуальной машине или в группе виртуальных машин Yandex Compute Cloud в интеграции с Object Storage с помощью Terraform

Статья создана
Yandex Cloud
Улучшена
kvendingoldo
Обновлена 10 ноября 2025 г.
  • Перед началом работы
    • Необходимые платные ресурсы
  • Разверните Nextcloud в базовой конфигурации
    • Создайте инфраструктуру для базовой конфигурации
    • Установите и настройте Nextcloud на виртуальной машине
    • Протестируйте работу решения в базовой конфигурации
  • Разверните Nextcloud в отказоустойчивой конфигурации
    • Донастройте Nextcloud
    • Расширьте инфраструктуру для отказоустойчивой конфигурации
    • Протестируйте работу решения в отказоустойчивой конфигурации
  • Как удалить созданные ресурсы

Примечание

В регионе Казахстан доступна только зона доступности kz1-a.

В этом руководстве вы подключите бакет Object Storage к решению Nextcloud, развернутому на виртуальной машине Compute Cloud с базой данных в кластере Yandex Managed Service for MySQL®. Для обеспечения отказоустойчивости и избыточности создаваемой под Nextcloud инфраструктуры вы масштабируете Nextcloud на группу виртуальных машин с распределением нагрузки при помощи L7-балансировщика Yandex Application Load Balancer. В отказоустойчивой конфигурации Nextcloud будет доступен по доменному имени, для которого в Yandex Certificate Manager будет выпущен TLS-сертификат.

Примечание

Для реализации отказоустойчивой конфигурации Nextcloud вам понадобится домен, который будет использоваться L7-балансировщиком.

Схема отказоустойчивого решения:

Где:

  • example.com — ваш домен, для которого в Yandex Certificate Manager выпущен сертификат и который подключен к L7-балансировщику нагрузки.
  • nextcloud-alb — L7-балансировщик, который равномерно распределяет входящий трафик от пользователей между хостами группы виртуальных машин.
  • nextcloud-instance-group — группа виртуальных машин, в которую входят хосты с развернутым решением Nextcloud.
  • nextcloud-db-cluster — кластер Yandex Managed Service for MySQL®, в котором расположена служебная база данных Nextcloud.
  • my-nextcloud-bucket — бакет Yandex Object Storage, подключенный к решению Nextcloud.

Чтобы развернуть Nextcloud в Yandex Cloud с интеграцией бакета Object Storage:

  1. Подготовьте облако к работе.
  2. Разверните Nextcloud в базовой конфигурации:
    1. Создайте инфраструктуру для базовой конфигурации.
    2. Установите и настройте Nextcloud на виртуальной машине.
    3. Протестируйте работу решения в базовой конфигурации.
  3. Разверните Nextcloud в отказоустойчивой конфигурации:
    1. Донастройте Nextcloud.
    2. Расширьте инфраструктуру для отказоустойчивой конфигурации.
    3. Протестируйте работу решения в отказоустойчивой конфигурации.

Если созданные ресурсы вам больше не нужны, удалите их.

Перед началом работыПеред началом работы

Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:

  1. Перейдите в консоль управления, затем войдите в Yandex Cloud или зарегистрируйтесь.
  2. На странице Yandex Cloud Billing убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.

Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака.

Подробнее об облаках и каталогах.

Необходимые платные ресурсыНеобходимые платные ресурсы

В стоимость предлагаемого решения входят:

  • плата за диски, снимки дисков и постоянно запущенные ВМ (см. тарифы Yandex Compute Cloud);
  • плата за использование публичных IP-адресов и NAT-шлюзов (см. тарифы Yandex Virtual Private Cloud);
  • плата за хранение данных в Object Storage и операции с ними (см. тарифы Yandex Object Storage);
  • плата за использование управляемой БД MySQL® (см. тарифы Managed Service for MySQL®);
  • при использовании Yandex Cloud DNS плата за DNS-зоны и публичные DNS-запросы (см. тарифы Cloud DNS);
  • при использовании балансировщика нагрузки плата за количество ресурсных единиц L7-балансировщика (см. тарифы Yandex Application Load Balancer);
  • при использовании лог-группы для записи логов балансировщика плата за запись и хранение данных (см. тарифы Yandex Cloud Logging).

Разверните Nextcloud в базовой конфигурацииРазверните Nextcloud в базовой конфигурации

Базовая конфигурация Nextcloud будет развернута на одной виртуальной машине, при этом служебная база данных Nextcloud будет создана в кластере Managed Service for MySQL® с одним хостом.

Создайте инфраструктуру для базовой конфигурацииСоздайте инфраструктуру для базовой конфигурации

Terraform позволяет быстро создать облачную инфраструктуру в Yandex Cloud и управлять ею с помощью файлов конфигураций. В файлах конфигураций хранится описание инфраструктуры на языке HCL (HashiCorp Configuration Language). При изменении файлов конфигураций Terraform автоматически определяет, какая часть вашей конфигурации уже развернута, что следует добавить или удалить.

Terraform распространяется под лицензией Business Source License, а провайдер Yandex Cloud для Terraform — под лицензией MPL-2.0.

Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform или в зеркале.

Для создания инфраструктуры с помощью Terraform:

  1. Установите Terraform, получите данные для аутентификации и укажите источник для установки провайдера Yandex Cloud (раздел Настройте провайдер, шаг 1).

  2. Подготовьте файлы с описанием инфраструктуры:

    Готовая конфигурация
    Вручную
    1. Клонируйте репозиторий с конфигурационными файлами.

      git clone https://github.com/yandex-cloud-examples/yc-nextcloud-s3.git
      
    2. Перейдите в папку с репозиторием. В ней должны появиться файлы и папки:

      • nextcloud-integrate-storage-basic-config.tf — файл конфигурации создаваемой инфраструктуры в базовом варианте.
      • nextcloud-integrate-storage.auto.tfvars — файл со значениями пользовательских переменных.
      • failsafe — папка, содержащая конфигурацию в отказоустойчивом варианте:
        • nextcloud-integrate-storage-failsafe-config.tf — файл конфигурации создаваемой инфраструктуры в отказоустойчивом варианте.
    1. Создайте папку для конфигурационных файлов.

    2. Создайте в папке:

      1. Конфигурационный файл nextcloud-integrate-storage-basic-config.tf:

        nextcloud-integrate-storage-basic-config.tf
        # Объявление переменных
        
        variable "folder_id" {
          type = string
        }
        
        variable "bucket_name" {
          type = string
        }
        
        variable "ssh_key_path" {
          type = string
        }
        
        variable "db_password" {
          type = string
          sensitive  = true
        }
        
        variable "domain_name" {
          type = string
        }
        
        locals {
          sa_name             = "nextcloud-sa"
          network_name        = "nextcloud-network"
          subnet_a_name       = "nextcloud-subnet-kz1-a"
          subnet-a-cidr       = "192.168.11.0/24"
          sg_name             = "nextcloud-sg"
          gw_name             = "nextcloud-gateway"
          vm_name             = "nextcloud-vm"
          vm_image_id         = "fd8vsghfu10ev5gdatkh"
          ig_name             = "nexcloud-ig"
          cluster_name        = "nextcloud-db-cluster"
          db_name             = "nextcloud"
          db_username         = "user"
        }
        
        # Настройка провайдера
        
        terraform {
          required_providers {
            yandex = {
              source = "yandex-cloud/yandex"
            }
          }
          required_version = ">= 0.13"
        }
        
        provider "yandex" {
          folder_id = var.folder_id
        }
        
        # Создание сети
        
        resource "yandex_vpc_network" "nextcloud-network" {
          name = local.network_name
        }
        
        # Создание NAT-шлюза
        
        resource "yandex_vpc_gateway" "nextcloud-gw" {
          name = local.gw_name
          shared_egress_gateway {}
        }
        
        # Создание таблицы маршрутизации
        
        resource "yandex_vpc_route_table" "nextcloud-rt-table" {
          network_id  = yandex_vpc_network.nextcloud-network.id
        
          static_route {
            destination_prefix = "0.0.0.0/0"
            gateway_id         = yandex_vpc_gateway.nextcloud-gw.id
          }
        }
        
        # Создание подсети
        
        resource "yandex_vpc_subnet" "nextcloud-subnet-a" {
          name           = local.subnet_a_name
          zone           = "kz1-a"
          network_id     = yandex_vpc_network.nextcloud-network.id
          v4_cidr_blocks = [local.subnet-a-cidr]
          route_table_id = yandex_vpc_route_table.nextcloud-rt-table.id
        }
        
        # Создание группы безопасности
        
        resource "yandex_vpc_security_group" "nextcloud-sg" {
          name        = local.sg_name
          network_id  = yandex_vpc_network.nextcloud-network.id
        
          ingress {
            protocol       = "TCP"
            description    = "http"
            v4_cidr_blocks = ["0.0.0.0/0"]
            port           = 80
          }
        
          ingress {
            protocol       = "TCP"
            description    = "https"
            v4_cidr_blocks = ["0.0.0.0/0"]
            port           = 443
          }
        
          ingress {
            protocol       = "TCP"
            description    = "ssh"
            v4_cidr_blocks = ["0.0.0.0/0"]
            port           = 22
          }
        
          ingress {
            protocol       = "ANY"
            description    = "self"
            predefined_target = "self_security_group"
            from_port      = 0
            to_port        = 65535
          }
        
          ingress {
            protocol       = "ANY"
            description    = "healthchecks"
            predefined_target = "loadbalancer_healthchecks"
            from_port      = 0
            to_port        = 65535
          }
        
          egress {
            protocol       = "ANY"
            description    = "any"
            v4_cidr_blocks = ["0.0.0.0/0"]
            from_port      = 0
            to_port        = 65535
          }
        }
        
        # Создание сервисного аккаунта
        
        resource "yandex_iam_service_account" "nextcloud-sa" {
          name = local.sa_name
        }
        
        # Назначение роли сервисному аккаунту
        
        resource "yandex_resourcemanager_folder_iam_member" "editor" {
          folder_id = var.folder_id
          role      = "editor"
          member    = "serviceAccount:${yandex_iam_service_account.nextcloud-sa.id}"
        }
        
        # Создание статического ключа доступа для СА
        
        resource "yandex_iam_service_account_static_access_key" "sa-static-key" {
          service_account_id = yandex_iam_service_account.nextcloud-sa.id
        }
        
        # Создание бакета
        
        resource "yandex_storage_bucket" "nextcloud-bucket" {
          access_key = yandex_iam_service_account_static_access_key.sa-static-key.access_key
          secret_key = yandex_iam_service_account_static_access_key.sa-static-key.secret_key
          bucket     = var.bucket_name
        }
        
        # Создание загрузочного диска для ВМ
        
        resource "yandex_compute_disk" "boot-disk" {
          type     = "network-ssd"
          zone     = "kz1-a"
          size     = "24"
          image_id = local.vm_image_id
        }
        
        # Создание ВМ
        
        resource "yandex_compute_instance" "nextcloud-vm" {
          name        = local.vm_name
          platform_id = "standard-v2"
          zone        = "kz1-a"
        
          resources {
            cores  = "2"
            memory = "4"
          }
        
          boot_disk {
            disk_id = yandex_compute_disk.boot-disk.id
          }
        
          network_interface {
            subnet_id          = yandex_vpc_subnet.nextcloud-subnet-a.id
            nat                = true
            security_group_ids = [yandex_vpc_security_group.nextcloud-sg.id]
          }
        
          metadata = {
            user-data = "#cloud-config\nusers:\n  - name: yc-user\n    groups: sudo\n    shell: /bin/bash\n    sudo: 'ALL=(ALL) NOPASSWD:ALL'\n    ssh-authorized-keys:\n      - ${file(var.ssh_key_path)}"
          }
        }
        
        # Создание кластера MySQL
        
        resource "yandex_mdb_mysql_cluster" "nextcloud-cluster" {
          name        = local.cluster_name
          environment = "PRODUCTION"
          network_id  = yandex_vpc_network.nextcloud-network.id
          version     = "8.0"
          security_group_ids = [yandex_vpc_security_group.nextcloud-sg.id]
        
          resources {
            resource_preset_id = "s2.micro"
            disk_type_id       = "network-ssd"
            disk_size          = 10
          }
        
          host {
            zone      = "kz1-a"
            subnet_id = yandex_vpc_subnet.nextcloud-subnet-a.id
          }
        
          mysql_config = {
            sql_mode             = "ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
            character_set_server = "utf8mb4"
            collation_server     = "utf8mb4_general_ci"
          }
        }
        
        # Создание базы данных в кластере MySQL
        
        resource "yandex_mdb_mysql_database" "nextcloud-db" {
          cluster_id = yandex_mdb_mysql_cluster.nextcloud-cluster.id
          name       = local.db_name
        }
        
        # Создание пользователя БД в кластере MySQL
        
        resource "yandex_mdb_mysql_user" "my_user" {
          cluster_id = yandex_mdb_mysql_cluster.nextcloud-cluster.id
          name       = local.db_username
          password   = var.db_password
        
          permission {
            database_name = yandex_mdb_mysql_database.nextcloud-db.name
            roles         = ["ALL"]
          }
        }
        
        # Вывод данных статического ключа доступа на экран
        
        output "Access_key" {
          value = yandex_iam_service_account_static_access_key.sa-static-key.access_key
        }
        
        output "Secret_key" {
          value = yandex_iam_service_account_static_access_key.sa-static-key.secret_key
          sensitive = true
        }
        
      2. Файл с пользовательскими данными nextcloud-integrate-storage.auto.tfvars:

        nextcloud-integrate-storage.auto.tfvars
        folder_id     = "<идентификатор_каталога>"
        ssh_key_path  = "<путь_к_публичному_SSH-ключу>"
        bucket_name   = "<имя_бакета>"
        db_password   = "<пароль_пользователя_базы_данных>"
        domain_name   = "<имя_домена>"
        

    Более подробную информацию о параметрах используемых ресурсов в Terraform см. в документации провайдера:

    • Сеть — yandex_vpc_network.
    • NAT-шлюз — yandex_vpc_gateway.
    • Таблица маршрутизации — yandex_vpc_route_table.
    • Подсеть — yandex_vpc_subnet.
    • Группа безопасности — yandex_vpc_security_group.
    • Сервисный аккаунт — yandex_iam_service_account.
    • Роль — yandex_resourcemanager_folder_iam_member.
    • Статический ключ доступа — yandex_iam_service_account_static_access_key.
    • Бакет — yandex_storage_bucket.
    • Диск виртуальной машины — yandex_compute_disk.
    • Виртуальная машина — yandex_compute_instance.
    • Кластер Managed Service for MySQL® — yandex_mdb_mysql_cluster.
    • База данных MySQL® — yandex_mdb_mysql_database.
    • Пользователь базы данных MySQL® — yandex_mdb_mysql_user.
  3. В файле nextcloud-integrate-storage.auto.tfvars задайте значения пользовательских переменных:

    • folder_id — идентификатор каталога.

    • ssh_key_path — путь к файлу с публичным SSH-ключом. Подробнее см. Создание пары ключей SSH.

    • bucket_name — имя бакета в соответствии с правилами именования.

    • db_password — пароль пользователя базы данных MySQL®.

    • domain_name — имя домена, на котором будет размещен экземпляр Nextcloud.

      Чтобы получить доступ к именам из публичной зоны, вам нужно делегировать домен. Укажите адреса серверов ns1.yandexcloud.kz и ns2.yandexcloud.kz в личном кабинете вашего регистратора.

      Примечание

      Если вы планируете ограничиться созданием экземпляра Nextcloud в базовой конфигурации и не планируете развертывать отказоустойчивый вариант решения, можете не изменять значение переменной domain_name.

  4. Создайте ресурсы:

    1. В терминале перейдите в папку, где вы отредактировали конфигурационный файл.

    2. Проверьте корректность конфигурационного файла с помощью команды:

      terraform validate
      

      Если конфигурация является корректной, появится сообщение:

      Success! The configuration is valid.
      
    3. Выполните команду:

      terraform plan
      

      В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.

    4. Примените изменения конфигурации:

      terraform apply
      
    5. Подтвердите изменения: введите в терминале слово yes и нажмите Enter.

В результате в выбранном каталоге будет создана вся инфраструктура, необходимая для развертывания Nextcloud в базовой конфигурации.

Terraform выведет на экран идентификатор созданного статического ключа доступа. Это значение понадобится позднее при настройке интеграции Nextcloud с Object Storage. При настройке вам также понадобится секретный ключ. Чтобы получить его, в терминале выполните команду:

terraform output Secret_key

Получив значение секретного ключа, переходите к настройке Nextcloud на виртуальной машине.

Установите и настройте Nextcloud на виртуальной машинеУстановите и настройте Nextcloud на виртуальной машине

  1. Установите Nextcloud на виртуальную машину nextcloud-vm:

    1. Подключитесь к виртуальной машине nextcloud-vm по SSH.

      Для этого в терминале ВМ выполните команду, указав публичный IP-адрес виртуальной машины:

      ssh yc-user@<IP-адрес_ВМ>
      

      Узнать публичный IP-адрес виртуальной машины вы можете в консоли управления на странице с информацией о ВМ в блоке Сеть в поле Публичный IPv4-адрес.

    2. Обновите версии пакетов, установленные на ВМ:

      sudo apt update && sudo apt upgrade
      
    3. Установите необходимые пакеты программного обеспечения и зависимости:

      sudo apt install \
        apache2 mariadb-server libapache2-mod-php php-gd php-mysql php-curl php-mbstring \
        php-intl php-gmp php-bcmath php-xml php-imagick php-zip php-fpm unzip
      
    4. Скачайте архив с последней версией Nextcloud:

      wget https://download.nextcloud.com/server/releases/latest.zip
      
    5. Распакуйте скачанный архив в директорию /var/www:

      sudo unzip latest.zip -d /var/www
      
    6. Измените права доступа к директории с Nextcloud:

      sudo chown -R www-data:www-data /var/www/nextcloud
      sudo chmod -R 755 /var/www/nextcloud/
      
    7. Настройте виртуальный хост по умолчанию:

      1. Откройте файл конфигурации виртуального хоста по умолчанию:

        sudo nano /etc/apache2/sites-available/000-default.conf
        
      2. Замените содержимое открытого файла конфигурации 000-default.conf на следующее:

        <VirtualHost *:80>
            DocumentRoot /var/www/nextcloud/
        
            <Directory /var/www/nextcloud/>
            Require all granted
            AllowOverride All
            Options FollowSymLinks MultiViews
        
            <IfModule mod_dav.c>
            Dav off
            </IfModule>
            </Directory>
            </VirtualHost>
        
    8. Включите необходимые модули веб-сервера Apache:

      sudo a2enmod rewrite
      sudo a2enmod headers
      a2enmod env
      a2enmod dir
      a2enmod mime
      
    9. Увеличьте до 512 МБ объем оперативной памяти, доступной интерпретатору PHP при обработке запросов к Nextcloud:

      1. Откройте файл .htaccess в директории установки Nextcloud:

        sudo nano /var/www/nextcloud/.htaccess
        
      2. В конце открытого файла добавьте строку:

        php_value memory_limit 512M
        

        Не забудьте сохранить внесенные изменения.

    10. Перезапустите веб-сервер:

      sudo systemctl restart apache2
      
  2. Настройте Nextcloud в графическом пользовательском интерфейсе:

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

      http://<публичный_IP-адрес_ВМ>
      

      Узнать публичный IP-адрес виртуальной машины вы можете в консоли управления на странице с информацией о ВМ в блоке Сеть в поле Публичный IPv4-адрес.

    2. В открывшейся форме Create an admin account:

      1. В полях New admin account name и New admin password задайте учетные данные администратора Nextcloud, которые вы будете использовать для входа в систему.

      2. В поле Database account введите user — имя пользователя БД, созданного в кластере MySQL®.

      3. В поле Database password введите пароль пользователя БД, который вы задали в файле nextcloud-integrate-storage.auto.tfvars.

      4. В поле Database name введите nextcloud — имя БД, созданной в кластере MySQL®.

      5. В поле Database host укажите FQDN текущего хост-мастера кластера MySQL® и порт в формате:

        c-<идентификатор_кластера>.rw.mdb.yandexcloud.kz:3306
        

        Узнать идентификатор кластера вы можете в консоли управления на странице с информацией о кластере в поле Идентификатор.

      6. Нажмите кнопку Install.

        Начнется развертывание базы данных Nextcloud в кластере MySQL®. Дождитесь завершения этого процесса.

    3. После завершения установки в открывшемся окне с рекомендованными приложениями нажмите кнопку Skip. Вы сможете вернуться к установке необходимых приложений позднее.

    4. Закройте открывшееся окно с информацией об обновлениях в текущей версии Nextcloud.

    5. Откройте меню управления приложениями. Для этого в правом верхнем углу экрана нажмите на значок пользователя и в открывшемся контекстном меню выберите Apps.

    6. В открывшемся окне на панели слева выберите Your apps.

    7. В открывшемся списке найдите приложение External storage support и в строке с этим приложением нажмите кнопку Enable.

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

    8. Откройте основное меню настроек. Для этого в правом верхнем углу экрана нажмите на значок пользователя и в открывшемся контекстном меню выберите Administration settings.

    9. В открывшемся окне на панели слева в блоке Administration выберите External storage и в открывшемся окне в блоке External storage задайте настройки интеграции с Object Storage:

      1. В секции External storage выберите Amazon S3.

      2. В секции Authentication выберите Access key.

      3. В секции Configuration:

        • В поле Bucket укажите имя созданного ранее бакета. Например: my-nextcloud-bucket.
        • В поле Hostname укажите storage.yandexcloud.kz.
        • В поле Port укажите 443.
        • В поле Access key вставьте полученный ранее идентификатор статического ключа доступа.
        • В поле Secret key вставьте полученный ранее секретный ключ статического ключа доступа.
      4. В секции Available for включите опцию All people.

      5. В правой части редактируемого блока нажмите значок , чтобы сохранить изменения.

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

Протестируйте работу решения в базовой конфигурацииПротестируйте работу решения в базовой конфигурации

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

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

    http://<публичный_IP-адрес_ВМ>
    
  2. Аутентифицируйтесь в Nextcloud с помощью логина и пароля, созданных при настройке решения на предыдущем этапе.

  3. В левой части верхнего меню выберите Files.

  4. В меню слева выберите External storage и выберите AmazonS3.

  5. Нажмите New и выберите Upload files, чтобы загрузить в хранилище файл с локального компьютера.

  6. Выберите файл на локальном компьютере и загрузите его в хранилище.

    Загруженный файл отобразится в хранилище AmazonS3 Nextcloud.

  7. В сервисе Yandex Object Storage убедитесь, что файл был загружен в бакет.

На этом завершено развертывание базовой конфигурации Nextcloud. Теперь вы можете перейти к развертыванию отказоустойчивой конфигурации.

Разверните Nextcloud в отказоустойчивой конфигурацииРазверните Nextcloud в отказоустойчивой конфигурации

Отказоустойчивая конфигурация Nextcloud будет развернута в группе из трех виртуальных машин, при этом нагрузка на хосты Nextcloud будет распределяться с помощью L7-балансировщика Yandex Application Load Balancer. Служебная база данных будет расположена в кластере MySQL®, состоящем из трех хостов. Хосты группы ВМ, балансировщика и кластера MySQL® будут равномерно распределены по трем зонам доступности. Nextcloud будет доступен по доменному имени, для которого в Certificate Manager будет выпущен TLS-сертификат.

Донастройте NextcloudДонастройте Nextcloud

Прежде чем приступать к развертыванию отказоустойчивой конфигурации, добавьте ваш домен в список доверенных адресов и доменов Nextcloud:

  1. Подключитесь к виртуальной машине nextcloud-vm по SSH.

  2. Добавьте ваш домен в массив доверенных адресов и доменов Nextcloud:

    1. В терминале ВМ откройте файл конфигурации Nextcloud:

      sudo nano /var/www/nextcloud/config/config.php
      
    2. В массиве trusted_domains замените IP-адрес хоста на имя вашего домена.

      Например:

      'trusted_domains' =>
      array (
        0 => 'example.com',
      ),
      

      Массив значений trusted_domains позволяет задать ограничение на IP-адреса и/или домены, по которым вы можете обращаться к Nextcloud, и обеспечивает дополнительную защиту от несанкционированного доступа. Вы можете указать несколько адресов и/или доменов, а также ослабить или снять это ограничение с помощью символов подстановки:

      Пример 1
      Пример 2
      'trusted_domains' =>
      array (
        0 => '*.example.com',
        1 => '198.168.*.*',
      ),
      

      В этом примере доступ разрешается с любых поддоменов домена example.com, а также с IP-адресов в диапазоне 192.168.0.0 — 192.168.255.255.

      'trusted_domains' =>
      array (
        0 => '*',
      ),
      

      В этом примере доступ разрешается с любых доменов и IP-адресов.

    3. Удалите строку 'overwrite.cli.url' => 'http://<IP-адрес_ВМ>',.

    4. Сохраните изменения и закройте редактор nano.

  3. Остановите виртуальную машину nextcloud-vm.

Расширьте инфраструктуру для отказоустойчивой конфигурацииРасширьте инфраструктуру для отказоустойчивой конфигурации

  1. Подготовьте файлы с описанием инфраструктуры:

    Готовая конфигурация
    Вручную
    1. В папке со скачанным репозиторием удалите файл nextcloud-integrate-storage-basic-config.tf.
    2. Из папки failsafe переместите файл nextcloud-integrate-storage-failsafe-config.tf в корневую папку репозитория — в ту папку, из которой вы только что удалили файл.
    1. В созданной ранее папке для конфигурационных файлов удалите файл nextcloud-integrate-storage-basic-config.tf.

    2. Создайте в этой папке новый конфигурационный файл nextcloud-integrate-storage-failsafe-config.tf:

      nextcloud-integrate-storage-failsafe-config.tf
      # Объявление переменных
      
      variable "folder_id" {
        type = string
      }
      
      variable "bucket_name" {
        type = string
      }
      
      variable "ssh_key_path" {
        type = string
      }
      
      variable "db_password" {
        type = string
        sensitive  = true
      }
      
      variable "domain_name" {
        type = string
      }
      
      locals {
        sa_name             = "nextcloud-sa"
        network_name        = "nextcloud-network"
        subnet_a_name       = "nextcloud-subnet-kz1-a"
        subnet_b_name       = "nextcloud-subnet-kz1-b"
        subnet_d_name       = "nextcloud-subnet-kz1-d"
        subnet-a-cidr       = "192.168.11.0/24"
        subnet-b-cidr       = "192.168.12.0/24"
        subnet-d-cidr       = "192.168.13.0/24"
        sg_name             = "nextcloud-sg"
        gw_name             = "nextcloud-gateway"
        vm_name             = "nextcloud-vm"
        vm_image_id         = "fd8vsghfu10ev5gdatkh"
        ig_name             = "nextcloud-instance-group"
        cluster_name        = "nextcloud-db-cluster"
        db_name             = "nextcloud"
        db_username         = "user"
        domain_zone_name    = "nexcloud-domain-zone"
        certificate_name    = "mymanagedcert"
        snapshot_name       = "nextcloud-vm-snapshot"
        tg_name             = "nextcloud-target-group"
        backend_name        = "nextcloud-backend"
        bg_name             = "nextcloud-bg"
        http_router_name    = "nextcloud-router"
        vh_name             = "nextcloud-vh"
        route_name          = "nextcloud-route"
        alb_name            = "nextcloud-alb"
        listener_name       = "nextcloud-listener"
      }
      
      # Настройка провайдера
      
      terraform {
        required_providers {
          yandex = {
            source = "yandex-cloud/yandex"
          }
        }
        required_version = ">= 0.13"
      }
      
      provider "yandex" {
        folder_id = var.folder_id
      }
      
      # Создание сети
      
      resource "yandex_vpc_network" "nextcloud-network" {
        name = local.network_name
      }
      
      # Создание NAT-шлюза
      
      resource "yandex_vpc_gateway" "nextcloud-gw" {
        name = local.gw_name
        shared_egress_gateway {}
      }
      
      # Создание таблицы маршрутизации
      
      resource "yandex_vpc_route_table" "nextcloud-rt-table" {
        network_id  = yandex_vpc_network.nextcloud-network.id
      
        static_route {
          destination_prefix = "0.0.0.0/0"
          gateway_id         = yandex_vpc_gateway.nextcloud-gw.id
        }
      }
      
      # Создание подсетей
      
      resource "yandex_vpc_subnet" "nextcloud-subnet-a" {
        name           = local.subnet_a_name
        zone           = "kz1-a"
        network_id     = yandex_vpc_network.nextcloud-network.id
        v4_cidr_blocks = [local.subnet-a-cidr]
        route_table_id = yandex_vpc_route_table.nextcloud-rt-table.id
      }
      
      resource "yandex_vpc_subnet" "nextcloud-subnet-b" {
        name           = local.subnet_b_name
        zone           = "kz1-b"
        network_id     = yandex_vpc_network.nextcloud-network.id
        v4_cidr_blocks = [local.subnet-b-cidr]
        route_table_id = yandex_vpc_route_table.nextcloud-rt-table.id
      }
      
      resource "yandex_vpc_subnet" "nextcloud-subnet-d" {
        name           = local.subnet_d_name
        zone           = "kz1-d"
        network_id     = yandex_vpc_network.nextcloud-network.id
        v4_cidr_blocks = [local.subnet-d-cidr]
        route_table_id = yandex_vpc_route_table.nextcloud-rt-table.id
      }
      
      # Создание группы безопасности
      
      resource "yandex_vpc_security_group" "nextcloud-sg" {
        name        = local.sg_name
        network_id  = yandex_vpc_network.nextcloud-network.id
      
        ingress {
          protocol       = "TCP"
          description    = "http"
          v4_cidr_blocks = ["0.0.0.0/0"]
          port           = 80
        }
      
        ingress {
          protocol       = "TCP"
          description    = "https"
          v4_cidr_blocks = ["0.0.0.0/0"]
          port           = 443
        }
      
        ingress {
          protocol       = "TCP"
          description    = "ssh"
          v4_cidr_blocks = ["0.0.0.0/0"]
          port           = 22
        }
      
        ingress {
          protocol       = "ANY"
          description    = "self"
          predefined_target = "self_security_group"
          from_port      = 0
          to_port        = 65535
        }
      
        ingress {
          protocol       = "ANY"
          description    = "healthchecks"
          predefined_target = "loadbalancer_healthchecks"
          from_port      = 0
          to_port        = 65535
        }
      
        egress {
          protocol       = "ANY"
          description    = "any"
          v4_cidr_blocks = ["0.0.0.0/0"]
          from_port      = 0
          to_port        = 65535
        }
      }
      
      # Создание сервисного аккаунта
      
      resource "yandex_iam_service_account" "nextcloud-sa" {
        name = local.sa_name
      }
      
      # Назначение роли сервисному аккаунту
      
      resource "yandex_resourcemanager_folder_iam_member" "editor" {
        folder_id = var.folder_id
        role      = "editor"
        member    = "serviceAccount:${yandex_iam_service_account.nextcloud-sa.id}"
      }
      
      # Создание статического ключа доступа для СА
      
      resource "yandex_iam_service_account_static_access_key" "sa-static-key" {
        service_account_id = yandex_iam_service_account.nextcloud-sa.id
      }
      
      # Создание бакета
      
      resource "yandex_storage_bucket" "nextcloud-bucket" {
        access_key = yandex_iam_service_account_static_access_key.sa-static-key.access_key
        secret_key = yandex_iam_service_account_static_access_key.sa-static-key.secret_key
        bucket     = var.bucket_name
      }
      
      # Создание загрузочного диска для ВМ
      
      resource "yandex_compute_disk" "boot-disk" {
        type     = "network-ssd"
        zone     = "kz1-a"
        size     = "24"
        image_id = local.vm_image_id
      }
      
      # Создание ВМ
      
      resource "yandex_compute_instance" "nextcloud-vm" {
        name        = local.vm_name
        platform_id = "standard-v2"
        zone        = "kz1-a"
      
        resources {
          cores  = "2"
          memory = "4"
        }
      
        boot_disk {
          disk_id = yandex_compute_disk.boot-disk.id
        }
      
        network_interface {
          subnet_id          = yandex_vpc_subnet.nextcloud-subnet-a.id
          nat                = true
          security_group_ids = [yandex_vpc_security_group.nextcloud-sg.id]
        }
      
        metadata = {
          user-data = "#cloud-config\nusers:\n  - name: yc-user\n    groups: sudo\n    shell: /bin/bash\n    sudo: 'ALL=(ALL) NOPASSWD:ALL'\n    ssh-authorized-keys:\n      - ${file(var.ssh_key_path)}"
        }
      }
      
      # Создание кластера MySQL
      
      resource "yandex_mdb_mysql_cluster" "nextcloud-cluster" {
        name        = local.cluster_name
        environment = "PRODUCTION"
        network_id  = yandex_vpc_network.nextcloud-network.id
        version     = "8.0"
        security_group_ids = [yandex_vpc_security_group.nextcloud-sg.id]
      
        resources {
          resource_preset_id = "s2.micro"
          disk_type_id       = "network-ssd"
          disk_size          = 10
        }
      
        host {
          zone      = "kz1-a"
          subnet_id = yandex_vpc_subnet.nextcloud-subnet-a.id
        }
      
        host {
          zone      = "kz1-b"
          subnet_id = yandex_vpc_subnet.nextcloud-subnet-b.id
        }
      
        host {
          zone      = "kz1-d"
          subnet_id = yandex_vpc_subnet.nextcloud-subnet-d.id
        }
      
        mysql_config = {
          sql_mode             = "ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
          character_set_server = "utf8mb4"
          collation_server     = "utf8mb4_general_ci"
        }
      }
      
      # Создание базы данных в кластере MySQL
      
      resource "yandex_mdb_mysql_database" "nextcloud-db" {
        cluster_id = yandex_mdb_mysql_cluster.nextcloud-cluster.id
        name       = local.db_name
      }
      
      # Создание пользователя БД в кластере MySQL
      
      resource "yandex_mdb_mysql_user" "my_user" {
        cluster_id = yandex_mdb_mysql_cluster.nextcloud-cluster.id
        name       = local.db_username
        password   = var.db_password
      
        permission {
          database_name = yandex_mdb_mysql_database.nextcloud-db.name
          roles         = ["ALL"]
        }
      }
      
      # Создание снимка диска
      
      resource "yandex_compute_snapshot" "nextcloud-snapshot" {
        name           = local.snapshot_name
        source_disk_id = yandex_compute_disk.boot-disk.id
      }
      
      # Создание публичной DNS-зоны
      
      resource "yandex_dns_zone" "nextcloud-domain-zone" {
        name    = local.domain_zone_name
        zone    = "${var.domain_name}."
        public  = true
      }
      
      # Добавление сертификата Let's Encrypt
      
      resource "yandex_cm_certificate" "nextcloud-certificate" {
        name    = local.certificate_name
        domains = [var.domain_name]
      
        managed {
        challenge_type = "DNS_CNAME"
        challenge_count = 1
        }
      }
      
      # Создание CNAME-записей для валидации доменов при выпуске сертификата
      
      resource "yandex_dns_recordset" "validation-record" {
        count   = yandex_cm_certificate.nextcloud-certificate.managed[0].challenge_count
        zone_id = yandex_dns_zone.nextcloud-domain-zone.id
        name    = yandex_cm_certificate.nextcloud-certificate.challenges[count.index].dns_name
        type    = yandex_cm_certificate.nextcloud-certificate.challenges[count.index].dns_type
        ttl     = 600
        data    = [yandex_cm_certificate.nextcloud-certificate.challenges[count.index].dns_value]
      }
      
      # Ожидание валидации домена и выпуска сертификата Let's Encrypt
      
      data "yandex_cm_certificate" "wait-nextcloud-certificate" {
        depends_on      = [yandex_dns_recordset.validation-record]
        certificate_id  = yandex_cm_certificate.nextcloud-certificate.id
        wait_validation = true
      }
      
      # Создание группы виртуальных машин
      
      resource "yandex_compute_instance_group" "nextcloud-ig" {
        name                = local.ig_name
        service_account_id  = yandex_iam_service_account.nextcloud-sa.id
        instance_template {
          platform_id = "standard-v2"
          resources {
            memory = 4
            cores  = 2
          }
          boot_disk {
            mode = "READ_WRITE"
            initialize_params {
              snapshot_id = yandex_compute_snapshot.nextcloud-snapshot.id
              size     = 24
            }
          }
      
          network_interface {
            subnet_ids         = [yandex_vpc_subnet.nextcloud-subnet-a.id,yandex_vpc_subnet.nextcloud-subnet-b.id,yandex_vpc_subnet.nextcloud-subnet-d.id]
            security_group_ids = [yandex_vpc_security_group.nextcloud-sg.id]
          }
      
          metadata = {
            ssh-keys = "yc-user:${file(var.ssh_key_path)}"
          }
        }
      
        scale_policy {
          fixed_scale {
            size = 3
          }
        }
      
        allocation_policy {
          zones = ["kz1-a","kz1-b","kz1-d"]
        }
      
        deploy_policy {
          max_unavailable = 2
          max_expansion   = 1
        }
      
        application_load_balancer {
          target_group_name = local.tg_name
        }
      
        depends_on = [
          yandex_resourcemanager_folder_iam_member.editor
        ]
      }
      
      # Создаем группу бэкендов
      
      resource "yandex_alb_backend_group" "nextcloud-backend-group" {
        name = local.bg_name
      
        session_affinity {
          connection {
            source_ip = true
          }
        }
      
        http_backend {
          name             = local.backend_name
          weight           = 1
          port             = 80
          target_group_ids = [yandex_compute_instance_group.nextcloud-ig.application_load_balancer[0].target_group_id]
          load_balancing_config {
            mode = "MAGLEV_HASH"
          }
        }
      }
      
      # Создаем HTTP-роутер
      
      resource "yandex_alb_http_router" "nextcloud-router" {
        name = local.http_router_name
      }
      
      # Создаем виртуальный хост
      
      resource "yandex_alb_virtual_host" "nextcloud-vhost" {
        name           = local.vh_name
        http_router_id = yandex_alb_http_router.nextcloud-router.id
        route {
          name = local.route_name
          http_route {
            http_route_action {
              backend_group_id = yandex_alb_backend_group.nextcloud-backend-group.id
              timeout          = "60s"
            }
          }
        }
      }
      
      # Создаем L7-балансировщик
      
      resource "yandex_alb_load_balancer" "nextcloud-alb" {
        name = local.alb_name
      
        network_id = yandex_vpc_network.nextcloud-network.id
      
        allocation_policy {
          location {
            zone_id   = "kz1-a"
            subnet_id = yandex_vpc_subnet.nextcloud-subnet-a.id
          }
          location {
            zone_id   = "kz1-b"
            subnet_id = yandex_vpc_subnet.nextcloud-subnet-b.id
          }
          location {
            zone_id   = "kz1-d"
            subnet_id = yandex_vpc_subnet.nextcloud-subnet-d.id
          }
        }
      
        security_group_ids = [yandex_vpc_security_group.nextcloud-sg.id]
      
        listener {
          name = local.listener_name
          endpoint {
            address {
              external_ipv4_address {
              }
            }
            ports = [443]
          }
      
          tls {
            default_handler {
              certificate_ids = [data.yandex_cm_certificate.wait-nextcloud-certificate.id]
              http_handler {
                http_router_id = yandex_alb_http_router.nextcloud-router.id
              }
            }
          }
        }
      }
      
      # Создание ресурсной A-записи для L7-балансировщика
      
      resource "yandex_dns_recordset" "nextcloud-a-record" {
        zone_id = yandex_dns_zone.nextcloud-domain-zone.id
        name    = yandex_dns_zone.nextcloud-domain-zone.zone
        type    = "A"
        ttl     = 600
        data    = [yandex_alb_load_balancer.nextcloud-alb.listener[0].endpoint[0].address[0].external_ipv4_address[0].address]
      }
      

    Более подробную информацию о параметрах добавляемых ресурсов в Terraform см. в документации провайдера:

    • Снимок диска — yandex_compute_snapshot.
    • DNS-зона — yandex_dns_zone.
    • TLS-сертификат — yandex_cm_certificate.
    • Ресурсная запись DNS — yandex_dns_recordset.
    • Группа виртуальных машин — yandex_compute_instance_group.
    • Группа бэкендов — yandex_alb_backend_group.
    • HTTP-роутер — yandex_alb_http_router.
    • Виртуальный хост — yandex_alb_virtual_host.
    • L7-балансировщик — yandex_alb_load_balancer.
  2. Создайте ресурсы:

    1. В терминале перейдите в папку, где вы отредактировали конфигурационный файл.

    2. Проверьте корректность конфигурационного файла с помощью команды:

      terraform validate
      

      Если конфигурация является корректной, появится сообщение:

      Success! The configuration is valid.
      
    3. Выполните команду:

      terraform plan
      

      В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.

    4. Примените изменения конфигурации:

      terraform apply
      
    5. Подтвердите изменения: введите в терминале слово yes и нажмите Enter.

В результате в выбранном каталоге будет развернуто решение Nextcloud в отказоустойчивой конфигурации.

Протестируйте работу решения в отказоустойчивой конфигурацииПротестируйте работу решения в отказоустойчивой конфигурации

Чтобы проверить работу интеграции Yandex Object Storage с Nextcloud в отказоустойчивой конфигурации:

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

    https://example.com
    
  2. Аутентифицируйтесь в Nextcloud с помощью логина и пароля, созданных при настройке решения.

  3. В левой части верхнего меню выберите Files.

  4. В меню слева выберите External storage и выберите AmazonS3.

  5. Убедитесь, что вы видите загруженный на предыдущем этапе проверки файл.

  6. Скачайте загруженный ранее файл. Для этого в строке с именем файла нажмите значок и выберите Download.

  7. Удалите файл. Для этого в строке с именем файла нажмите значок и выберите Delete file.

  8. В сервисе Yandex Object Storage убедитесь, что файл был удален из бакета.

Как удалить созданные ресурсыКак удалить созданные ресурсы

Важно

Прежде чем удалять инфраструктуру, удалите все объекты в созданном бакете.

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

  1. Откройте конфигурационный файл nextcloud-integrate-storage-failsafe-config.tf и удалите описание создаваемой инфраструктуры из файла.

  2. Примените изменения:

    1. В терминале перейдите в папку, где вы отредактировали конфигурационный файл.

    2. Проверьте корректность конфигурационного файла с помощью команды:

      terraform validate
      

      Если конфигурация является корректной, появится сообщение:

      Success! The configuration is valid.
      
    3. Выполните команду:

      terraform plan
      

      В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.

    4. Примените изменения конфигурации:

      terraform apply
      
    5. Подтвердите изменения: введите в терминале слово yes и нажмите Enter.

См. такжеСм. также

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

Была ли статья полезна?

Предыдущая
Развертывание Nextcloud на ВМ или в группе ВМ вручную
Следующая
Обзор
Проект Яндекса
© 2025 ТОО «Облачные Сервисы Казахстан»