Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Истории успеха
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • ML Services
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Истории успеха
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Практические руководства
    • Все руководства
      • Статический сайт в Object Storage с доступом через Cloud CDN
        • Обзор
        • Консоль управления
        • Terraform
      • Перенос WordPress сайта с хостинга в Yandex Cloud
      • Организация виртуального хостинга
      • Создание веб-приложения на Python с использованием фреймворка Flask
      • Хостинг статического сайта на фреймворке Gatsby
      • Миграция в Cloud CDN из стороннего CDN-провайдера
      • Получение статистики посещения сайта с использованием S3 Select

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

  • Подготовьте облако к работе
  • Необходимые платные ресурсы
  • Создайте инфраструктуру
  • Загрузите файлы сайта
  • Проверьте работу сайта
  • Как удалить созданные ресурсы
  1. Прикладные решения
  2. Создание сайта
  3. Сайт на LAMP- или LEMP-стеке
  4. Terraform

Сайт на LAMP- или LEMP-стеке с помощью Terraform

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

Чтобы создать инфраструктуру для сайта на LAMP- или LEMP-стеке с помощью Terraform:

  1. Подготовьте облако к работе.
  2. Создайте инфраструктуру.
  3. Загрузите файлы сайта.
  4. Проверьте работу сайта.

В качестве примера используется доменное имя example.com.

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

Подготовьте облако к работеПодготовьте облако к работе

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

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

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

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

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

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

  • плата за постоянно запущенную ВМ (см. тарифы Yandex Compute Cloud);
  • плата за использование публичного IP-адреса (см. тарифы Yandex Virtual Private Cloud);
  • плата за публичные DNS-запросы и зоны DNS, если вы используете Yandex Cloud DNS (см. тарифы Cloud DNS).

Создайте инфраструктуруСоздайте инфраструктуру

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

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

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

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

  1. Установите Terraform и получите данные для аутентификации.

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

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

    Готовый архив
    Вручную
    1. Создайте папку для файлов.
    2. Скачайте архив (1 КБ).
    3. Разархивируйте архив в папку. В результате в ней должны появиться конфигурационный файл lamp-lemp.tf и файл с пользовательскими данными lamp-lemp.auto.tfvars.
    1. Создайте папку для файла с описанием инфраструктуры.

    2. Создайте в папке конфигурационный файл lamp-lemp.tf:

      lamp-lemp.tf
      # Объявление переменных для пользовательских параметров
      
      variable "zone" {
        type = string
      }
      
      variable "folder_id" {
        type = string
      }
      
      variable "vm_image_family" {
        type = string
      }
      
      variable "vm_user" {
        type = string
      }
      
      variable "ssh_key_path" {
        type = string
      }
      
      variable "dns_zone" {
        type = string
      }
      
      # Добавление прочих переменных
      
      locals {
        network_name       = "web-network"
        subnet_name        = "subnet1"
        sg_vm_name         = "sg-web"
        vm_name            = "lamp-vm"
        dns_zone_name      = "example-zone"
      }
      
      # Настройка провайдера
      
      terraform {
        required_providers {
          yandex    = {
            source  = "yandex-cloud/yandex"
            version = ">= 0.47.0"
          }
        }
      }
      
      provider "yandex" {
        folder_id = var.folder_id
      }
      
      # Создание облачной сети
      
      resource "yandex_vpc_network" "network-1" {
        name = local.network_name
      }
      
      # Создание подсети
      
      resource "yandex_vpc_subnet" "subnet-1" {
        name           = local.subnet_name
        v4_cidr_blocks = ["192.168.1.0/24"]
        zone           = var.zone
        network_id     = yandex_vpc_network.network-1.id
      }
      
      # Создание группы безопасности
      
      resource "yandex_vpc_security_group" "sg-1" {
        name        = local.sg_vm_name
        network_id  = yandex_vpc_network.network-1.id
        egress {
          protocol       = "ANY"
          description    = "any"
          v4_cidr_blocks = ["0.0.0.0/0"]
        }
        ingress {
          protocol       = "TCP"
          description    = "ext-http"
          v4_cidr_blocks = ["0.0.0.0/0"]
          port           = 80
        }
        ingress {
          protocol       = "TCP"
          description    = "ext-https"
          v4_cidr_blocks = ["0.0.0.0/0"]
          port           = 443
        }
      }
      
      # Добавление готового образа ВМ
      
      resource "yandex_compute_image" "lamp-vm-image" {
        source_family = var.vm_image_family
      }
      
      resource "yandex_compute_disk" "boot-disk" {
        name     = "bootvmdisk"
        type     = "network-hdd"
        zone     = "ru-central1-a"
        size     = "20"
        image_id = yandex_compute_image.lamp-vm-image.id
      }
      
      # Создание ВМ
      
      resource "yandex_compute_instance" "vm-lamp" {
        name        = local.vm_name
        platform_id = "standard-v3"
        zone        = var.zone
        resources {
          core_fraction = 20
          cores         = 2
          memory        = 1
        }
        boot_disk {
          disk_id = yandex_compute_disk.boot-disk.id
        }
        network_interface {
          subnet_id          = yandex_vpc_subnet.subnet-1.id
          nat                = true
          security_group_ids = [yandex_vpc_security_group.sg-1.id]
        }
        metadata = {
          user-data = "#cloud-config\nusers:\n  - name: ${var.vm_user}\n    groups: sudo\n    shell: /bin/bash\n    sudo: 'ALL=(ALL) NOPASSWD:ALL'\n    ssh_authorized_keys:\n      - ${file("${var.ssh_key_path}")}"
        }
      }
      
      # Создание зоны DNS
      
      resource "yandex_dns_zone" "zone1" {
        name    = local.dns_zone_name
        zone    = var.dns_zone
        public  = true
      }
      
      # Создание ресурсной записи типа А
      
      resource "yandex_dns_recordset" "rs-a" {
        zone_id = yandex_dns_zone.zone1.id
        name    = var.dns_zone
        type    = "A"
        ttl     = 600
        data    = [ yandex_compute_instance.vm-lamp.network_interface.0.nat_ip_address ]
      }
      
      # Создание ресурсной записи типа CNAME
      
      resource "yandex_dns_recordset" "rs-cname" {
        zone_id = yandex_dns_zone.zone1.id
        name    = "www"
        type    = "CNAME"
        ttl     = 600
        data    = [ var.dns_zone ]
      }
      
    3. Создайте в папке файл с пользовательскими данными lamp-lemp.auto.tfvars:

      lamp-lemp.auto.tfvars
      zone               = "<зона_доступности>"
      folder_id          = "<идентификатор_каталога>"
      vm_image_family    = "<семейство_образа_ВМ>"
      vm_user            = "<имя_пользователя_ВМ>"
      ssh_key_path       = "<путь_к_публичному_SSH-ключу>"
      dns_zone           = "<зона_DNS>"
      

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

    • Сеть — yandex_vpc_network
    • Подсети — yandex_vpc_subnet
    • Группы безопасности — yandex_vpc_security_group
    • Виртуальная машина — yandex_compute_instance
    • DNS-зона — yandex_dns_zone
    • Ресурсная запись DNS — yandex_dns_recordset
  4. В файле lamp-lemp.auto.tfvars задайте пользовательские параметры:

    • zone — зона доступности, в которой будет находиться ВМ.
    • folder_id — идентификатор каталога.
    • family_id — укажите семейство одного из образов ВМ с нужным набором компонентов:
      • lamp — LAMP (Linux, Apache, MySQL®, PHP).
      • lemp — LEMP (Linux, Nginx, MySQL®, PHP).
    • vm_user — имя пользователя ВМ.
    • ssh_key_path — путь к файлу с открытым SSH-ключом для аутентификации пользователя на ВМ. Подробнее см. Создание пары ключей SSH.
    • dns_zone — зона DNS. Укажите ваш зарегистрированный домен с точкой в конце, например example.com..
      Чтобы получить доступ к именам из публичной зоны, вам нужно делегировать домен. Укажите адреса серверов ns1.yandexcloud.net и ns2.yandexcloud.net в личном кабинете вашего регистратора.
  5. Создайте ресурсы:

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

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

      terraform validate
      

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

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

      terraform plan
      

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

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

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

  6. Получите публичный IP-адрес ВМ — он потребуется далее, чтобы загрузить файлы сайта.

После создания инфраструктуры, загрузите файлы сайта.

Загрузите файлы сайтаЗагрузите файлы сайта

Чтобы проверить работу веб-сервера, загрузите на ВМ файл index.html. Можно использовать тестовый файл, скачайте и распакуйте архив.

  1. В блоке Сеть на странице ВМ в консоли управления найдите публичный IP-адрес ВМ.

  2. Подключитесь к ВМ по протоколу SSH.

  3. Выдайте права на запись для вашего пользователя на директорию /var/www/html:

    sudo chown -R "$USER":www-data /var/www/html
    
  4. Загрузите на ВМ файлы сайта с помощью протокола SCP.

    Linux/macOS
    Windows

    Используйте утилиту командной строки scp:

    scp -r <путь_до_директории_с_файлами> <имя_пользователя_ВМ>@<IP-адрес_ВМ>:/var/www/html
    

    С помощью программы WinSCP скопируйте локальную директорию с файлами в директорию /var/www/html на ВМ.

После загрузки файлов, проверьте работу сайта.

Проверьте работу сайтаПроверьте работу сайта

Чтобы проверить работу сайта, введите в браузере его IP-адрес или доменное имя:

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

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

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

  1. Откройте конфигурационный файл lamp-lemp.tf и удалите описание создаваемой инфраструктуры из файла.

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

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

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

      terraform validate
      

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

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

      terraform plan
      

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

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

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

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

  • Сайт на LAMP- или LEMP-стеке с помощью консоли управления.

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

Предыдущая
Консоль управления
Следующая
Обзор
Проект Яндекса
© 2025 ООО «Яндекс.Облако»