Публикация статического сайта в облаке яндекса#
Существует множество генераторов сайтов, которые выдают статические html и JS файлы, которые необходимо опубликовать для общего доступа. Примеры приложений:
генератор сайтов sphinx, с помощью которого создан данный ресурс
генератор статических сайтов docusaurus, с помощью которого создан сайт https://massage-republika.ru/
система отчетности allure-report
Одна из подходящих площадок для публикации статических сайтов - это yandex cloud с сервисом S3.
Процедура публикации:
Создать bucket
Загрузить подготовленные файлы веб сайта c помощью cyberduck
настроить webсайт в бакете
подключить website и выставить базовые параметры
в сервисе Cloud DNS яндекс облака создать публичную зону
В публичной зоне создать DNS записи для перенаправления трафика на website бакета
В сервисе Certificate Manager заказать сертификаты lets-encrypt
Настроить https для вебсайта в бакете
Создание бакета в сервисе Object Storage#
В консоли управления выберите каталог, в котором нужно создать бакет.
Выбрать сервис Object Storage.
Нажать кнопку Создать бакет.
На странице создания бакета:
Ввести имя бакета в соответствии с правилами именования.
По умолчанию бакет с точкой в имени доступен только по протоколу HTTP.
Чтобы поддержать для бакета протокол HTTPS,
нужно загрузить собственный сертификат или создать Lets Encrypt в менеджере сертификатов
Ограничить максимальный размер бакета минимальным значением в 1 Gb
Поставить тип доступа для сценария использования - вебсайт:
На чтение объектов - публичный
Доступ к списку объектов - ограниченный
Доступ на чтение настроек - ограниченный
Выбрать класс хранилища - стандартное. Там чуть дороже хранить данные, но зато дешевле операции управления объектами и чтение.
Загрузить подготовленные файлы веб сайта c помощью Cyberduck#
Подготовка#
Создайте сервисный аккаунт.
Назначьте нужную роль сервисному аккаунту. Подробнее о ролях см. в документации Identity and Access Management.
Создайте статический ключ доступа.
Добавьте сервисному аккаунту роли
storage.editor,storage.uploader
Установка#
дистрибутив CyberDuck для вашей операционной системы и запустите его. https://cyberduck.io/download/
Подключение#
Запустите CyberDuck.
Нажмите кнопку Open Connection.
Выберите тип подключения — Amazon S3.
Укажите параметры подключения:
Server — storage.yandexcloud.net.
Port — 443.
Access Key ID — идентификатор статического ключа, полученный ранее.
Secret Access Key — секретный ключ, полученный ранее.
Нажмите кнопку Connect.
После подключения откроется бакет, созданный ранее. Файлы в бакете можно удалить и залить новые
Детали: https://yandex.cloud/ru/docs/storage/tools/cyberduck
Настройка вебсайта для бакета#
Для работы хостинга необходим публичный доступ к бакету. Иначе при обращении к сайту вернет пользователю ответ с кодом 403.
Загрузить в бакет содержимое сайта и указать главную страницу сайта#
xml
<WebsiteConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<IndexDocument>
<Suffix>index.html</Suffix>
</IndexDocument>
<ErrorDocument>
<Key>error.html</Key>
</ErrorDocument>
</WebsiteConfiguration>
В консоли управления
перейдите в бакет, для которого хотите настроить хостинг.
Откройте публичный доступ к операциям с бакетом
Перейдите на вкладку Веб-сайт. В разделе Хостинг:
В поле Главная страница укажите абсолютный путь к файлу главной страницы сайта;
(опционально) в поле Страница ошибки укажите абсолютный путь к файлу, который будет отображаться при ошибках 4хх. По умолчанию Object Storage возвращает собственную страницу.
Нажмите кнопку Сохранить.
Для переадресации всех запросов.#
Указать хост, на который будут перенаправляться все запросы, а также задать протокол для передачи запросов. Обычно не требуется.
xml
<WebsiteConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<RedirectAllRequestsTo>
<HostName>gruzdenko.ru</HostName>
<Protocol>http</Protocol>
</RedirectAllRequestsTo>
</WebsiteConfiguration>
Для условной переадресации запросов#
Используя правила маршрутизации можно перенаправлять запросы в соответствии с префиксами имен объектов или HTTP-кодами ответов. Можно перенаправить на другую веб-страницу запрос к удаленному объекту или перенаправить запросы, возвращающие ошибку. Как правило нужно для популярных проиндексированных в поисковиках страниц, URL которых изменен. Чтобы пользователи при переходе из поисковика получали доступ к требуемому контенту. В обычных обстоятельствах конфигурация не требуется.
xml
<WebsiteConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<RoutingRules>
<RoutingRule>
<Condition>
<KeyPrefixEquals>temp/</KeyPrefixEquals>
</Condition>
<Redirect>
<ReplaceKeyWith>folderdeleted.html</ReplaceKeyWith>
</Redirect>
</RoutingRule>
</RoutingRules>
</WebsiteConfiguration>
Настроить [хостинг статического сайта](../operations/hosting/setup.md#hosting), [переадресацию всех запросов](../operations/hosting/setup.md#redirects) или [условную переадресацию запросов](../operations/hosting/setup.md#redirects-on-conditions) можно с помощью консоли управления {{ yandex-cloud }}.
Проверка конфигурации#
После настройки бакета для хостинга сайт становится доступен по адресу:
http(s)://<имя_бакета>.website.yandexcloud.net
Включение https#
По умолчанию бакет с точкой в имени доступен только по протоколу HTTP. Чтобы поддержать для бакета протокол HTTPS нужно выписать бесплатный сертификат
В списке сервисов выберите Certificate Manager.
Нажмите кнопку Добавить сертификат.
В открывшемся меню выберите Сертификат от Let’s Encrypt.
В открывшемся окне в поле Имя введите имя сертификата.
(Опционально) В поле Описание введите описание сертификата.
В поле Домены введите список доменов, для которых нужно выпустить сертификат.
Имена доменов могут содержать маску, например *.example.com.
В этом случае при выборе типа проверки прав на домен необходимо будет выбрать DNS.
Подробнее см. в разделе Проверка прав на домен.
Выберите тип проверки прав на домен: DNS или HTTP.
Нажмите кнопку Создать.
В списке сертификатов появится новый сертификат со статусом Validating. Этот статус означает, что запрос на выпуск сертификата от Let’s Encrypt® создан, и для его успешной обработки вам необходимо пройти процедуру проверки прав на домены.
Собственный домен#
Создайте в сервисе Cloud DNS публичную зону DNS и ресурсную запись, которая связывает ваше доменное имя и бакет:
В консоли управления перейти в бакет, для которого хотите использовать собственный домен.
Перейти на вкладку Веб-сайт.
В разделе Хостинг в блоке Домены в Cloud DNS нажмите кнопку Создать запись
В открывшемся окне нажмите кнопку Создать зону и выберите доменную зону, которая соответствует имени бакета, например gruzdenko.ru.
Нажмите кнопку Создать.
Раскройте блок Дополнительные настройки.
В поле TTL (в секундах) укажите время жизни ресурсной записи или выберите из предложенных.
Нажмите кнопку Создать.
Чтобы получить доступ к именам из публичной зоны, делегируйте домен. Для этого в личном кабинете вашего доменного регистратора укажите адреса серверов ns1.yandexcloud.net и ns2.yandexcloud.net.
Делегирование домена и обновление ресурсных записей могут занять некоторое время.
Справочная информация#
https://yandex.cloud/ru/docs/storage/tools/cyberduck https://yandex.cloud/ru/docs/storage/operations/hosting/certificate https://yandex.cloud/ru/docs/storage/operations/hosting/own-domain