Сайт на Hugo + Yandex Cloud S3 с нуля
Зачем это нужно? Yandex Cloud находится в белых списках провайдеров во время отключений интернета по сигналу беспилотной опасности — ваш сайт будет доступен, когда другие хостинги не работают.
Шаг 1. Установить Hugo
macOS:
brew install hugo
Windows — скачать .exe с github.com/gohugoio/hugo/releases, добавить в PATH.
Linux:
sudo apt install hugo
Проверить:
hugo version
Шаг 2. Создать сайт
hugo new site my-site
cd my-site
git init
Добавить тему (например, PaperMod, как на этом сайте):
git submodule add https://github.com/adityatelange/hugo-PaperMod themes/PaperMod
echo 'theme = "PaperMod"' >> hugo.toml
Создать первую страницу:
hugo new content posts/hello.md
Открыть файл content/posts/hello.md, убрать draft: true.
Проверить локально:
hugo server
# → http://localhost:1313
Шаг 3. Собрать статику
hugo
Файлы появятся в папке public/.
Шаг 4. Настроить Yandex Cloud
4.1 Создать бакет
- Зайти на console.yandex.cloud
- Object Storage → Создать бакет
- Имя бакета = ваш домен, например
flagsoft.ru - Доступ: Публичный
4.2 Включить хостинг
В настройках бакета → Веб-сайт:
- Главная страница:
index.html - Страница ошибки:
404.html
Сохранить. Yandex покажет адрес вида:
http://flagsoft.ru.website.yandexcloud.net
4.3 Настроить права доступа
Бакет → ACL → убедиться что есть правило AllUsers: READ.
Шаг 5. Установить и настроить AWS CLI
Yandex Cloud S3 совместим с AWS CLI.
pip install awscli
Создать сервисный аккаунт в Yandex Cloud:
- IAM → Сервисные аккаунты → Создать
- Роль:
storage.editor - Создать статический ключ доступа (Access Key ID + Secret)
Настроить профиль:
aws configure --profile yc
# AWS Access Key ID: <ваш ключ>
# AWS Secret Access Key: <ваш секрет>
# Default region: ru-central1
# Default output format: json
Шаг 6. Задеплоить сайт
aws s3 sync public/ s3://flagsoft.ru \
--profile yc \
--endpoint-url https://storage.yandexcloud.net \
--delete
Флаг --delete удаляет из бакета файлы, которых больше нет локально.
Готово! Сайт доступен по адресу из шага 4.2.
Шаг 7. Привязать свой домен (опционально)
В настройках DNS-регистратора добавить CNAME-запись:
flagsoft.ru → flagsoft.ru.website.yandexcloud.net
Или у регистраторов типа reg.ru — ALIAS / ANAME на этот же адрес.
Скрипт деплоя (сохранить как deploy.sh)
#!/bin/bash
hugo && aws s3 sync public/ s3://ВАШ-ДОМЕН \
--profile yc \
--endpoint-url https://storage.yandexcloud.net \
--delete
echo "✅ Задеплоено!"
chmod +x deploy.sh
./deploy.sh
Итого
| Шаг | Что делаем |
|---|---|
| 1 | Ставим Hugo |
| 2 | Создаём сайт + тема |
| 3 | hugo → папка public/ |
| 4 | Бакет в Yandex Cloud, включаем хостинг |
| 5 | AWS CLI + сервисный аккаунт |
| 6 | aws s3 sync → публикуем |
| 7 | DNS → свой домен |
Стоимость: хранение и трафик по тарифам Yandex Cloud — для небольшого сайта выходит несколько рублей в месяц.