Статический веб-сайт в Yandex Object Storage
С помощью этой инструкции вы научитесь загружать статические файлы вашего веб-сайта в Object Storage и привязывать к бакету доменное имя.
Чтобы разместить статический веб-сайт в Object Storage:
- Подготовьте облако к работе.
- Создайте публичный бакет.
- Включите веб-сайт для бакета.
- Настройте DNS.
- Загрузите файлы веб-сайта.
- Проверьте работу сайта.
Если сайт вам больше не нужен, удалите файлы из хранилища и зону DNS.
Также инфраструктуру для размещения статического веб-сайта в Object Storage можно развернуть через Terraform с помощью готового файла конфигурации.
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки статического сайта входит:
- Плата за хранение данных статического сайта (см. тарифы Object Storage).
- Плата за операции с данными (см. тарифы Object Storage).
- Стоимость исходящего трафика из Yandex Cloud в интернет (см. тарифы Object Storage).
- Плата за публичные DNS-запросы и зоны (см. тарифы Yandex Cloud DNS).
Создайте публичный бакет
Чтобы создать бакет для файлов статического сайта:
-
Перейдите в консоль управления
Yandex Cloud и выберите каталог, в котором будете выполнять операции. -
На странице каталога нажмите кнопку Создать ресурс и выберите Бакет.
-
В поле Имя введите имя бакета, например,
www.example.com
. Имя бакета станет частью доменного имени сайта. После настройки бакет будет доступен по двум адресам:http(s)://<имя_бакета>.website.yandexcloud.net
http(s)://website.yandexcloud.net/<имя_бакета>
Имя должно удовлетворять требованиям:
- Длина имени должна быть от 3 до 63 символов.
- Имя может содержать строчные буквы латинского алфавита, цифры, дефисы и точки.
- Первый и последний символы должны быть буквами или цифрами.
- Символы справа и слева от точки должны быть буквами или цифрами.
- Имя не должно иметь вид IP-адреса (например
10.1.3.9
).
Примечание
Если вы планируете использовать собственный домен для веб-сайта, имя бакета должно в точности совпадать с именем вашего домена, а домен должен быть третьего и более уровня. Подробнее см. в разделе Собственный домен.
-
Укажите максимальный размер бакета в ГБ.
-
Включите Публичный доступ на чтение объектов.
-
Нажмите кнопку Создать бакет.
См. раздел Как создать инфраструктуру с помощью Terraform.
Включите веб-сайт для бакета
Необходимо загрузить и настроить индексную страницу и страницу ошибки. Для этого:
- Создайте на компьютере файлы:
-
index.html
с текстомHello, world!
.Содержимое файла будет показываться при обращении к главной странице веб-сайта.
-
error.html
с текстомError!
.Содержимое файла будет показываться при ответах веб-сайта с ошибками
4xx
.
-
- На вкладке Объекты на странице вашего бакета нажмите кнопку Загрузить. В открывшемся окне выберите созданные файлы и нажмите кнопку подтверждения.
- Нажмите кнопку Загрузить.
- Откройте вкладку Веб-сайт на странице вашего бакета.
- Выберите Хостинг.
- В поле Главная страница укажите
index.html
. - В поле Страница ошибки укажите
error.html
. - Нажмите кнопку Сохранить.
- Проверьте, что главная страница веб-сайта открывается. Для этого подключитесь к сайту через браузер по ссылке вида
http://<имя_бакета>.website.yandexcloud.net
. - Проверьте, что страница ошибки открывается. Для этого подключитесь к сайту через браузер по ссылке вида
http://<имя_бакета>.website.yandexcloud.net/error-check
.
Примечание
По умолчанию сайт доступен только по протоколу HTTP, например, http://www.example.com
или http://www.example.com.website.yandexcloud.net
. Чтобы поддержать для сайта протокол HTTPS, загрузите собственный сертификат безопасности в Object Storage.
См. раздел Как создать инфраструктуру с помощью Terraform.
Настройте DNS
Если у вас есть зарегистрированное доменное имя, назначьте его бакету. Для этого создайте в DNS-запись типа CNAME.
Вы можете воспользоваться сервисом Cloud DNS для управления доменом.
Примечание
Имя бакета должно в точности совпадать с именем вашего домена, а домен должен быть третьего и более уровня. Подробнее см. в разделе Собственный домен.
В инструкции ниже описана настройка DNS для домена третьего уровня www.example.com
.
Добавьте зону
Чтобы добавить публичную зону:
- Откройте раздел Cloud DNS в каталоге, где требуется создать зону DNS.
- Нажмите кнопку Создать зону.
- Задайте настройки зоны:
- Имя зоны:
example-zone-1
. - Зона:
example.com.
. Укажите ваш зарегистрированный домен. - Тип — Публичная.
- Имя зоны:
- Нажмите кнопку Создать.
См. раздел Как создать инфраструктуру с помощью Terraform.
Добавьте запись типа CNAME
Создайте в публичной зоне запись DNS типа CNAME:
- Выберите зону
example.com
из списка. - Нажмите кнопку Создать запись.
- Задайте параметры записи:
- Имя:
www
. - Тип записи: выберите значение
CNAME
. - TTL (время кеширования записи): оставьте значение по умолчанию.
- Значение: введите
www.example.com.website.yandexcloud.net.
.
- Имя:
- Нажмите кнопку Создать.
См. раздел Как создать инфраструктуру с помощью Terraform.
Делегируйте доменное имя
Делегирование — это перенос ответственности с серверов регистратора на ваши серверы. Для домена создаются ресурсные записи типа NS (ns1.yandexcloud.net
и ns2.yandexcloud.net
).
Чтобы делегировать домен, укажите для него DNS-серверы в личном кабинете регистратора.
Делегирование происходит не сразу. Серверы интернет-провайдеров обычно обновляют записи до 24 часов (86400 секунд). Это обусловлено значением TTL
Проверить делегирование домена можно с помощью сервиса Whoisdig
:
dig +short NS example.com
Результат:
ns2.yandexcloud.net.
ns1.yandexcloud.net.
Загрузите файлы веб-сайта
После настройки и проверки доступности загрузите в бакет остальные файлы, необходимые для работы сайта. Используйте для этого консоль управления
См. раздел Как создать инфраструктуру с помощью Terraform.
Проверьте работу сайта
Чтобы проверить работу сайта, используйте один из стандартных адресов Object Storage:
http://www.example.com.website.yandexcloud.net
http://website.yandexcloud.net/www.example.com
Если вы настроили собственный домен, используйте адрес http://www.example.com
.
Как удалить созданные ресурсы
Чтобы перестать платить за ресурсы:
Как создать инфраструктуру с помощью Terraform
Terraform
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform
При изменении файлов конфигураций Terraform автоматически определяет, какая часть вашей конфигурации уже развернута, что следует добавить или удалить.
Чтобы разместить статический веб-сайт в Object Storage с помощью Terraform:
-
Установите Terraform и укажите источник для установки провайдера Yandex Cloud (раздел Настройте провайдер, шаг 1).
-
Подготовьте файлы с описанием инфраструктуры:
Готовый архивВручную- Создайте папку для файлов.
- Скачайте архив
(2 КБ). - Разархивируйте архив в папку. В результате в ней должны появиться конфигурационный файл
static.tf
, файлыindex.html
иerror.html
.
-
Создайте папку для файлов.
-
Создайте в папке конфигурационный файл
static.tf
:static.tflocals { token = "<OAuth-_или_IAM-токен>" cloud_id = "<идентификатор_облака>" folder_id = "<идентификатор_каталога>" } terraform { required_providers { yandex = { source = "yandex-cloud/yandex" version = ">= 0.47.0" } } } provider "yandex" { token = local.token cloud_id = local.cloud_id folder_id = local.folder_id } resource "yandex_iam_service_account" "sa" { name = "my-sa" } resource "yandex_resourcemanager_folder_iam_member" "sa-editor" { folder_id = local.folder_id role = "storage.editor" member = "serviceAccount:${yandex_iam_service_account.sa.id}" } resource "yandex_iam_service_account_static_access_key" "sa-static-key" { service_account_id = yandex_iam_service_account.sa.id description = "static access key for object storage" } resource "yandex_storage_bucket" "test" { 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 = "www.example.com" acl = "public-read" website { index_document = "index.html" error_document = "error.html" } } resource "yandex_storage_object" "index-html" { 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 = yandex_storage_bucket.test.id key = "index.html" source = "index.html" } resource "yandex_storage_object" "error-html" { 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 = yandex_storage_bucket.test.id key = "error.html" source = "error.html" } resource "yandex_dns_zone" "zone1" { name = "example-zone-1" description = "Public zone" zone = "example.com." public = true } resource "yandex_dns_recordset" "rs1" { zone_id = yandex_dns_zone.zone1.id name = "www" type = "CNAME" ttl = 200 data = ["www.example.com.website.yandexcloud.net."] }
-
Создайте в папке файл
index.html
с текстомHello world!
:index.html<!doctype html> <html> <head> <title>Hello, world!</title> </head> <body> <p>Hello, world!</p> </body> </html>
-
Создайте в папке файл
error.html
с текстомError!
:error.html<!doctype html> <html> <head> <title>Error!</title> </head> <body> <p>Error!</p> </body> </html>
Более подробную информацию о параметрах используемых ресурсов в Terraform см. в документации провайдера:
-
В файле
static.tf
вставьте в блокlocals
следующие значения:token
— OAuth-токен (если вы используете аккаунт на Яндексе) или Yandex Identity and Access Management-токен (если вы используете аккаунт на Яндексе или федеративный аккаунт) для доступа к Yandex Cloud. Время жизни Identity and Access Management-токена — максимум 12 часов, но не больше времени жизни cookie у федерации.cloud_id
— идентификатор облака, в котором будут создаваться ресурсы.folder_id
— идентификатор каталога, в котором будут создаваться ресурсы.
-
Создайте ресурсы:
-
В терминале перейдите в папку, где вы отредактировали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминале слово
yes
и нажмите Enter.
-