Веб-сайт на LAMP- или LEMP-стеке
LAMP
С помощью этой инструкции вы научитесь разворачивать LAMP (LEMP) в инфраструктуре Yandex Cloud: в результате вы запустите виртуальную машину, на которой будет работать веб-сервер вашего сайта.
Чтобы настроить LAMP- или LEMP-сайт:
- Подготовьте облако к работе.
- Создайте облачную сеть.
- Создайте группу безопасности.
- Создайте ВМ с предустановленным веб-сервером.
- Загрузите файлы веб-сайта.
- Настройте DNS.
- Проверьте работу сайта.
Если сайт вам больше не нужен, удалите все используемые им ресурсы.
Также инфраструктуру для размещения веб-сервера LAMP- или LEMP-сайта на ВМ можно развернуть через Terraform с помощью готового файла конфигурации.
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки LAMP-сервера входит:
- Плата за постоянно запущенную ВМ (см. тарифы Yandex Compute Cloud).
- Плата за использование динамического или статического внешнего IP-адреса (см. тарифы Yandex Virtual Private Cloud).
- Плата за использование DNS (см. тарифы Yandex Cloud DNS).
Создайте облачную сеть
Все ресурсы, созданные в сценарии, будут относиться к одной облачной сети.
Чтобы создать сеть:
- В консоли управления
выберите сервис Virtual Private Cloud. - Нажмите кнопку Создать сеть.
- Укажите Имя сети:
web-network
. - В поле Дополнительно выберите опцию Создать подсети.
- Нажмите кнопку Создать сеть.
См. раздел Как создать инфраструктуру с помощью Terraform.
Создайте группу безопасности
Группы безопасности содержат правила, которые разрешают обращаться к ВМ из интернета. В сценарии будет создана группа безопасности sg-web
.
Чтобы создать группу безопасности:
- В консоли управления
выберите сервис Virtual Private Cloud. - Откройте вкладку Группы безопасности.
- Создайте группу безопасности для балансировщика:
-
Нажмите кнопку Создать группу.
-
Укажите Имя группы:
sg-web
. -
Выберите Сеть
web-network
. -
В блоке Правила создайте следующие правила по инструкции под таблицей:
Направление
трафикаОписание Диапазон
портовПротокол Тип источника /
назначенияИсточник /
назначениеИсходящий any Весь Любой CIDR 0.0.0.0/0 Входящий ext-http 80 TCP CIDR 0.0.0.0/0 Входящий ext-https 443 TCP CIDR 0.0.0.0/0 - Выберите вкладку Исходящий трафик или Входящий трафик.
- Нажмите кнопку Добавить правило.
- В открывшемся окне в поле Диапазон портов укажите один порт или диапазон портов, куда или откуда будет поступать трафик.
- В поле Протокол укажите нужный протокол или оставьте Любой, чтобы разрешить передачу трафика по всем протоколам.
- В поле Назначение или Источник выберите назначение правила:
- CIDR — правило будет применено к диапазону IP-адресов. В поле CIDR блоки укажите CIDR и маски подсетей, в которые или из которых будет поступать трафик. Чтобы добавить несколько CIDR, нажимайте кнопку Добавить CIDR.
- Группа безопасности — правило будет применено к ВМ из текущей группы или из выбранной группы безопасности.
- Нажмите кнопку Сохранить. Таким образом создайте все правила из таблицы.
-
Нажмите кнопку Сохранить.
-
См. раздел Как создать инфраструктуру с помощью Terraform.
Создайте ВМ с предустановленным веб-сервером
-
На странице каталога в консоли управления
нажмите кнопку Создать ресурс и выберите пункт Виртуальная машина. -
В поле Имя введите имя ВМ:
lamp-vm
илиlemp-vm
. Требования к имени:- длина — от 3 до 63 символов;
- может содержать строчные буквы латинского алфавита, цифры и дефисы;
- первый символ — буква, последний — не дефис.
-
Выберите зону доступности, в которой будет создана ВМ. Если вы не знаете, какая зона доступности вам нужна, оставьте выбранную по умолчанию.
-
В блоке Выбор образа/загрузочного диска перейдите на вкладку Cloud Marketplace и выберите образ ВМ с нужным набором компонентов:
-
В блоке Вычислительные ресурсы:
- Выберите платформу ВМ.
- Укажите необходимое количество vCPU и объем RAM.
Для функционального тестирования сайта хватит минимальной конфигурации:
- Платформа — Intel Ice Lake.
- Гарантированная доля vCPU — 20%.
- vCPU — 2.
- RAM — 1 ГБ.
-
В блоке Сетевые настройки нужно выбрать сеть
web-network
и подсеть, к которым нужно подключить ВМ. -
В поле Публичный адрес оставьте значение Автоматически, чтобы назначить ВМ случайный внешний IP-адрес из пула Yandex Cloud, или выберите статический адрес из списка, если вы зарезервировали его заранее.
-
Укажите данные для доступа на ВМ:
-
В поле Логин введите имя пользователя.
-
В поле SSH-ключ вставьте содержимое файла открытого ключа.
Пару ключей для подключения по SSH необходимо создать самостоятельно, см. раздел Подключиться к виртуальной машине Linux по SSH.
Внимание
IP-адрес и имя хоста (FQDN) для подключения к ВМ назначается ей при создании. Если вы выбрали вариант Без адреса в поле Публичный адрес, вы не сможете обращаться к ВМ из интернета.
-
-
Нажмите кнопку Создать ВМ.
Создание ВМ может занять несколько минут. Когда ВМ перейдет в статус
RUNNING
, вы можете загрузить на нее файлы веб-сайта.
См. раздел Как создать инфраструктуру с помощью Terraform.
Загрузите файлы веб-сайта
Чтобы проверить работу веб-сервера, загрузите на ВМ файл index.html
. Можно использовать тестовый файл
-
В блоке Сеть на странице ВМ в консоли управления
найдите публичный IP-адрес ВМ. -
Подключитесь к ВМ по протоколу SSH.
-
Выдайте права на запись для вашего пользователя на директорию
/var/www/html
:sudo chown -R "$USER":www-data /var/www/html
-
Загрузите на ВМ файлы веб-сайта с помощью протокола SCP
.Linux/macOSWindowsИспользуйте утилиту командной строки
scp
:scp -r <путь_до_директории_с_файлами> <имя_пользователя_ВМ>@<IP-адрес_ВМ>:/var/www/html
С помощью программы WinSCP
скопируйте локальную директорию с файлами в директорию/var/www/html
на ВМ.
Настройте DNS (если есть доменное имя)
Если у вас есть зарегистрированное доменное имя, воспользуйтесь сервисом Cloud DNS для управления доменом.
Также настроить DNS можно с помощью Terraform, подробнее см. в разделе Как создать инфраструктуру с помощью Terraform.
В инструкции ниже описана настройка DNS для доменного имени example.com
.
Добавьте зону
Чтобы добавить публичную зону:
- Откройте раздел Cloud DNS в каталоге, где требуется создать зону DNS.
- Нажмите кнопку Создать зону.
- Задайте настройки зоны:
- Имя зоны:
example-zone-1
. - Зона:
example.com.
. Укажите ваш зарегистрированный домен. - Тип — Публичная.
- Имя зоны:
- Нажмите кнопку Создать.
Добавьте ресурсные записи
Создайте в публичной зоне записи DNS:
- В блоке Сеть на странице виртуальной машины в консоли управления
найдите публичный IP-адрес ВМ. - Создайте запись типа А:
- Откройте раздел Cloud DNS в каталоге, где находится зона
example.com
. - Выберите зону
example.com
из списка. - Нажмите кнопку Создать запись.
- Задайте параметры записи:
- Имя: оставьте пустым.
- Тип записи: оставьте значение
А
. - TTL (время кэширования записи): оставьте значение по умолчанию.
- Значение: введите публичный адрес вашей ВМ.
- Нажмите кнопку Создать.
- Откройте раздел Cloud DNS в каталоге, где находится зона
- Создайте запись типа CNAME:
- Выберите зону
example.com
из списка. - Нажмите кнопку Создать запись.
- Задайте параметры записи:
- Имя:
www
. - Тип записи: выберите значение
CNAME
. - TTL (время кэширования записи): оставьте значение по умолчанию.
- Значение: введите
example.com
.
- Имя:
- Нажмите кнопку Создать.
- Выберите зону
Делегируйте доменное имя
Делегирование — это перенос ответственности с серверов регистратора на ваши серверы. Для домена создаются ресурсные записи типа NS (ns1.yandexcloud.net
и ns2.yandexcloud.net
).
Чтобы делегировать домен, укажите для него DNS-серверы в личном кабинете регистратора.
Делегирование происходит не сразу. Серверы интернет-провайдеров обычно обновляют записи до 24 часов (86400 секунд). Это обусловлено значением TTL, в течение которого кэшируются записи для доменов.
Проверить делегирование домена можно с помощью сервиса Whoisdig
:
dig +short NS example.com
Результат:
ns2.yandexcloud.net.
ns1.yandexcloud.net.
Проверьте работу сайта
Чтобы проверить работу сайта, введите в браузере его IP-адрес или доменное имя:
http://<публичный_IP-адрес_ВМ>
.http://www.example.com
.
Как удалить созданные ресурсы
Чтобы перестать платить за созданные ресурсы:
- Удалите ВМ.
- Удалите статический публичный IP-адрес, если вы зарезервировали его специально для этой ВМ.
- Удалите зону DNS, если вы настраивали DNS.
Как создать инфраструктуру с помощью Terraform
Terraform
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform
При изменении файлов конфигураций Terraform автоматически определяет, какая часть вашей конфигурации уже развернута, что следует добавить или удалить.
Чтобы разместить веб-сервер LAMP- или LEMP-сайта на ВМ с помощью Terraform:
-
Укажите источник для установки провайдера Yandex Cloud (раздел Настройте провайдер, шаг 1).
-
Подготовьте файлы с описанием инфраструктуры:
Готовый архивВручную- Создайте папку для файлов.
- Скачайте архив
(1 КБ). - Разархивируйте архив в папку. В результате в ней должны появиться конфигурационный файл
lamp-lemp.tf
и файл с пользовательскими даннымиlamp-lemp.auto.tfvars
.
-
Создайте папку для файла с описанием инфраструктуры.
-
Создайте в папке конфигурационный файл
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 ] }
-
Создайте в папке файл с пользовательскими данными
lamp-lemp.auto.tfvars
:lamp-lemp.auto.tfvarszone = "<зона_доступности>" folder_id = "<идентификатор_каталога>" vm_image_family = "<семейство_образа_ВМ>" vm_user = "<имя_пользователя_ВМ>" ssh_key_path = "<путь_к_публичному_SSH-ключу>" dns_zone = "<зона_DNS>"
Более подробную информацию о параметрах используемых ресурсов в Terraform см. в документации провайдера:
-
В файле
lamp-lemp.auto.tfvars
задайте пользовательские параметры:zone
— зона доступности, в которой будет находиться ВМ.folder_id
— идентификатор каталога.family_id
— укажите семейство одного из образов ВМ с нужным набором компонентов:vm_user
— имя пользователя ВМ.ssh_key_path
— путь к файлу с открытым SSH-ключом для аутентификации пользователя на ВМ. Подробнее см. Создание пары ключей SSH.dns_zone
— зона DNS. Укажите ваш зарегистрированный домен с точкой в конце, напримерexample.com.
.
-
Создайте ресурсы:
-
В терминале перейдите в папку, где вы отредактировали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминале слово
yes
и нажмите Enter.
-