Сайт на 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 Создать бакет

  1. Зайти на console.yandex.cloud
  2. Object Storage → Создать бакет
  3. Имя бакета = ваш домен, например flagsoft.ru
  4. Доступ: Публичный

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 — для небольшого сайта выходит несколько рублей в месяц.