DEV Community

Samoilenko Yuri
Samoilenko Yuri

Posted on • Originally published at teletype.in on

Наконец-то GitHub Pages (и GitLab Pages — для симметрии)

Давно присматривался к GitHub Pages, но руки никак не доходили.

Внезапно решил навести порядок на площадках, где публикую статьи и заметки, и решился-таки на статику (как доп. площадку).

Всякие разные Pages

GitHub Pages нативно поддерживает Jekyll — пушнул в репозиторий, и сайт сам собрался. Никаких докеров, никаких CI/CD (ну почти), никаких серверов.

А чтобы было совсем хорошо, решил поддерживать и GitLab Pages — для симметрии. Чтоб не привязываться к одной платформе и чтоб было куда переключиться, если что. Но тут без CI/CD никак.

Структура репозитория и настройки

Репозиторий называется как положено — kinnalru.github.io - тогда он будет доступен по этому доменному имени. Gemfile:

gem "github-pages", group: :jekyll_plugins

group :jekyll_plugins do
  gem "jekyll-feed"
  gem "jekyll-sitemap"
end
Enter fullscreen mode Exit fullscreen mode

Обратите внимание на github-pages — это мета-гем, который тянет Jekyll и все нужные плагины в совместимых версиях. Никаких "а у меня работает", потому что GitHub Pages собирает ровно тем же набором.

Заполняем конфигурацию _config.yml где выбираем тему, плагины, и всякие настройки. Тема minima — адаптивная под светлую/темную тему. И сразу же в конфиге ссылочки на все свои ресурсы: GitLab , GitHub , Teletype , Telegram , Dev.to. Чтоб гость зашел и сразу понял, где меня искать, а то вдруг нигде раньше не нашел ссылок :)

GitLab Pages — симметрия ради симметрии

Для GitLab Pages пришлось чуть заморочиться. GitHub Pages собирает Jekyll сам, а GitLab — нет, нужен .gitlab-ci.yml:

image: ruby:3.2-slim

build:
  script:
    - apt-get update -y; apt-get install -y build-essential
    - bundle
    - JEKYLL_ENV=production bundle exec jekyll build --config _config.yml,_config.gitlab.yml -d ./public/
  pages:
    publish: public
  rules:
    - if: ($CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH) && ($CI_PIPELINE_SOURCE != "schedule")
Enter fullscreen mode Exit fullscreen mode

И отдельный _config.gitlab.yml — переопределяем только url :

url: https://kinnalru.gitlab.io
Enter fullscreen mode Exit fullscreen mode

Jekyll умеет мержить конфиги при сборке: --config _config.yml,_config.gitlab.yml. Всё, что идет справа, переопределяет то, что слева.

Чтоб было "хорошо" — намазал сверху RSS и Sitemap

Просто собирать HTML — это скучно. Мне нужно, чтоб поисковики индексировали, а читатели подписывались. Поэтому сверху еще и:

  • ставим плагин jekyll-sitemap, и он автоматически генерирует /sitemap.xml. Но я не доверяю автоматике до конца, поэтому в _includes/custom-head.html добавил явную ссылку:
  <link rel="sitemap" type="application/xml" title="Sitemap" href="/sitemap.xml" />
Enter fullscreen mode Exit fullscreen mode
  • ставим плагин jekyll-feed — он генерирует базовый /feed.xml
  • но я решил, что хочу RSS с полным контентом статей и расширенными настройками, поэтому написал свой шаблон feed.xml

Кастомные шаблоны

Стандартная minima хороша, но мне хотелось, чтоб на каждом посте была ссылка на оригинальную публикацию. Переопределил _layouts/post.html и _layouts/home.html — добавил canonical_url и пометку "Моя публикация на ...". Теперь зеркало не выглядит как украденный контент, а как полноценный агрегатор.

Что в итоге?

В результате мы имеем:

  • Статический сайт на Jekyll, который собирается автоматически
  • Зеркало на GitHub Pageskinnalru.github.io
  • Зеркало на GitLab Pageskinnalru.gitlab.io
  • RSS с полным контентом для подписчиков и дальнейшей обработки
  • Sitemap для поисковиков
  • Все ссылки на мои ресурсы в одном месте

Keep it simple, stupid — но при этом всё должно работать.


Teletype | Архи DEV | Dev.to | GitHub | Blogger

Top comments (0)