Вроде бы прошло уже прилично времени, но я только сейчас разгрузился от переноса рабочих проектов. Теперь буду переносить это сайт. Буду описывать все проблемы и особенности, с которыми столкнусь “по ходу пьесы”.
Замена переменных для GitLab CI
Здесь все относительно просто. При первоначально настройке деплоя сайта опирался на docker образ amazon/aws-cli. Так что пришлось только обновить переменные в настройках репозитория.

Тут все как у всех, но стоит обратить внимание на AWS_ACCESS_KEY_ID, он состоит из двух частей <tenant_id>:<key_id>.
Ключи key_id получается как везде, через сервисный аккаунт. А вот tenant_id нужно найти в консоли сервиса. Найти его
можно по пути “Хранение данных”, “Object Storage”, “Параметры работы с API”:

Тут же есть регион. В моем случае он отличался от Яндекса, в Яндексе регион был ru-central1, в Cloud.ru же он имеет
значение ru-central-1. Так же указываем новый AWS_ENDPOINT_URL_S3 как https://s3.cloud.ru. Остальные настройка
просто копируются из данных сервисного аккаунта и названия бекета.
Статический сайт
Тут есть как плюс, так и минус. Имя для статического сайта можно указать отличное от имени бакета. Но оно не может содержать ничего кроме латинских букв, цифр и знаки дефиса:

Так же оно будет ТОЛЬКО в виде [доменное имя].s3.cloud.ru. Как задать ему свой домен, пока-что не понятно. А значит
придется на уровне Cloudflare поправить обработку домена. Так же это создает проблему: сайт будет всегда доступен по
этому домену, значит нужно настраивать доступ ТОЛЬКО с ip адресов Cloudflare.
Ограничение доступа для всех, кроме Cloudflare
Получить список адресов Cloudflare можно либо на странице https://www.cloudflare.com/ips/, либо по апи https://api.cloudflare.com/client/v4/ips. Оттуда мы берем весь список и обновляем правило доступа (ip адреса на 21 октября 2026 года):
| |
Вместо [имя бакета] нужно подставить свой бакет. В конце должно быть правило Allow. Потому что если запрос не попал
вод первое правило (имел правильный ip адрес), то без второго он окажется не попавшим ни в одно правило и все равно
будет заблокирован.
Настройки самого Cloudflare
После простого прописывания домена из Cloud.ru в виде CNAME мы получаем ошибку:

Это из-за того, что в настройках у нас до сих пор стоит строгая проверка сертификата домена. Но это уже не Yandex, и
сертификат отдается для работы с сайтом на s3. Тут нужно первым делом подменить hostname при запросе от Cloudflare,
что бы Cloud.ru хотя бы поняло, на какой статический сайт идет запрос. И тут случается затык, так как функции
переписывания hostname и/или sni - работают ТОЛЬКО в Enterprise версии:

Итог
На текущий момент решить это все можно только поставив свой собственный nginx (или другой прокси на любой вкус). Средствами же Cloud.ru и Cloudflare это сделать нельзя. В следующий раз попробуем использовать Cloudflare pages.