HERON

Бесплатный хостинг, ваш адрес

GitHub Pages со своим доменом

Чтобы подключить свой домен к GitHub Pages, укажите домен в настройках репозитория в разделе Pages и создайте DNS-записи у регистратора: четыре записи A на адреса GitHub для домена без www и запись CNAME для www на вашеимя.github.io. Когда проверка пройдёт, включите Enforce HTTPS.

Ниже — точные записи, порядок действий, частые ошибки и то же самое для Cloudflare Pages.

DNS-записи для GitHub Pages

Внесите их у регистратора домена. Вместо yourname подставьте имя своего пользователя или организации на GitHub.

ТипИмя (хост)Значение
A@185.199.108.153
A@185.199.109.153
A@185.199.110.153
A@185.199.111.153
AAAA@2606:50c0:8000::153
AAAA@2606:50c0:8001::153
AAAA@2606:50c0:8002::153
AAAA@2606:50c0:8003::153
CNAMEwwwyourname.github.io

По шагам

  1. 1

    Подтвердите домен

    На GitHub: Settings вашего профиля → Pages → Add a domain. GitHub покажет запись TXT — добавьте её у регистратора. Так никто другой не сможет занять ваш домен на GitHub Pages.
  2. 2

    Укажите домен в репозитории

    Репозиторий → Settings → Pages → Custom domain. Впишите example.com и сохраните. Если сайт собирается через GitHub Actions, действует именно эта настройка; если публикуется из ветки, GitHub ещё и добавит в неё файл CNAME с доменом.
  3. 3

    Добавьте DNS-записи

    Создайте записи A, AAAA и CNAME из таблицы выше. Удалите другие записи A и CNAME с теми же именами, например страницу-заглушку регистратора.
  4. 4

    Дождитесь DNS

    Обычно минуты, иногда до суток. Когда GitHub увидит записи, он напишет «DNS check successful».
  5. 5

    Включите HTTPS

    Отметьте Enforce HTTPS в тех же настройках Pages. Сертификат бесплатный и продлевается сам. Если галочка серая, подождите выпуска сертификата — до часа.

Частые ошибки

«Domain's DNS record could not be retrieved»

DNS ещё не обновился, или старая запись указывает в другое место. Удалите лишние записи и подождите.

Enforce HTTPS недоступен

Сертификат ещё не выпущен. Удалите домен в настройках, сохраните, добавьте снова и подождите до часа.

Домен сбрасывается после каждой публикации

Сайт публикуется из ветки, а в публикуемой папке нет файла CNAME. Держите файл CNAME с доменом в корне того, что публикуете.

На домене 404, а адрес github.io работает

Поле Custom domain пустое или в нём опечатка.

Предупреждения о смешанном содержимом

Часть ссылок или картинок ещё на http://. Используйте https:// или адреса относительно сайта.

Cloudflare Pages со своим доменом

Второй бесплатный вариант — Cloudflare Pages. Подключите репозиторий GitHub в панели Cloudflare → Workers & Pages → Create → Pages, затем откройте проект → Custom domains → Set up a domain.

Домен уже в Cloudflare

DNS-запись создаётся одним нажатием.

Домен у другого регистратора

Добавьте CNAME для поддомена на вашпроект.pages.dev. Для домена без www Cloudflare попросит перенести DNS домена к себе.

HTTPS

Выпускается и продлевается автоматически.

Сайт на HERON на GitHub Pages

HERON собирает папку dist/ со всеми страницами, картинками, картой сайта и llms.txt. GitHub Pages её раздаёт.

  1. 1

    Укажите домен

    Впишите домен в site.yaml или в конфигураторе, чтобы канонические адреса и карта сайта шли с ним.
  2. 2

    Соберите

    Строгая сборка проверит каждую ссылку и каждое описание.
  3. 3

    Опубликуйте `dist/`

    Через GitHub Actions при каждом push или отправкой папки в ветку, из которой публикует Pages. Положите файл CNAME с доменом в static/, и он окажется в корне dist/.
  4. 4
  5. 5

Обновление при каждом push

Когда домен заработал, публикация — обычная работа с git: поправили файл страницы, сделали commit и push. GitHub Actions запускает сборку HERON и передаёт dist/ в Pages. В Settings → Pages выберите Source «GitHub Actions» и добавьте этот файл как .github/workflows/pages.yml:

name: pages
on:
  push:
    branches: [main]
permissions:
  contents: read
  pages: write
  id-token: write
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - run: docker run --rm -v "$PWD":/site -w /site --user $(id -u):$(id -g) ghcr.io/fmstm/heron:prod build . --env prod --strict
      - uses: actions/upload-pages-artifact@v3
        with:
          path: dist
  deploy:
    needs: build
    runs-on: ubuntu-latest
    environment:
      name: github-pages
      url: ${{ steps.deploy.outputs.page_url }}
    steps:
      - id: deploy
        uses: actions/deploy-pages@v4

Что происходит при push

GitHub забирает сайт со всей историей (для правильных дат страниц), собирает его стабильным образом HERON, останавливается, если строгая проверка нашла ошибку, и публикует результат.

Где смотреть

Вкладка Actions в репозитории показывает каждый запуск. Красный запуск значит, что сайт не изменился, а в журнале указаны файл и строка.

Каждое следующее обновление

git add . && git commit -m "Страница услуг" && git push, через минуту откройте сайт.

Ограничения и правила GitHub Pages

ЧтоОграничение
Опубликованный сайтДо 1 ГБ
ТрафикМягкий лимит 100 ГБ в месяц
Сборки из веткиМягкий лимит 10 в час; на workflow в GitHub Actions, как выше, не распространяется
Репозиторий на бесплатном аккаунтеТолько открытый; для закрытого нужен GitHub Pro или командный тариф
Для чего нельзяХостинг интернет-бизнеса, магазина или платного сервиса (SaaS)

Вопросы

GitHub Pages со своим доменом бесплатный?

Да, для открытых репозиториев на бесплатном аккаунте. Для закрытых репозиториев Pages доступен на платных тарифах GitHub. Платите только регистратору за домен.

Какой адрес выбрать: с www или без?

Любой. Укажите один как основной в GitHub и создайте записи для обоих: второй GitHub перенаправит на первый.

Через сколько домен заработает?

Обычно через несколько минут после сохранения записей, иногда до суток — зависит от регистратора.

Умеет ли GitHub Pages переадресации со старых адресов?

Настоящие серверные — нет: GitHub Pages только отдаёт файлы. Для честных 301 используйте свой сервер с nginx, куда HERON сам вписывает правила, или правила переадресации Cloudflare по тому же списку из dist/redirects.map.

Есть ли ограничение по размеру?

Да: опубликованный сайт может весить до 1 ГБ, мягкий лимит трафика — 100 ГБ в месяц. Обычный сайт компании весит несколько мегабайт. См. ограничения.