Очень несекретные дела

Программируем и говорим об ужасах высшего образования

Как создать новый блог на Pelican или как докатиться до жизни такой

Как не пытался я вести свою писану в телеге, так и не получается. Потому что она, телега, неудобная. Не для писанины ее придумали, а для общения.

Поэтому родилось это чудо-юдо. Заморочился, оно адаптивно, умеет само переключать тему, автоматически генерирует контент из приватной репы на гитхабе по пушу, подсвечивает код и вообще охеренно. В общем, полный фарш.

Использую генератор Pelican и свою тему для него под кодовым названием limelight.

Вкратце, как вся автоматизация работает.

  • Исходим из того, что вы смогли настроить генерацию пеликана и осилили его документацию: знаете, как его запускать, как указать в нем тему (хотя про это есть в репе) и все такое.
  • У вас есть свой сервер, на который настроен доступ по SSH-ключу. Это легко гуглится.
  • На сервере есть nginx.
  • У вас есть какой-нибудь домен.
  • Проект пеликана лежит в github репозитории.

Если на эти все пункты у вас ответ "да", то поздравляю, у вас все получится.

Поехали настраивать.

  • Нужно, чтобы вы могли на своем сервере выполнить команду git pull. Убедитесь, что она работает и стягивает изменения из ваших реп.
  • В папке с проектом пеликана создаем файл по пути .github/workflows/publish.yml. Тут будет лежать скрипт, который будет запускать перегенерацию контента сайта. Содержимое файла будет таким:
  • Склонируейте на сервер свой проект. У меня он живет в ~/blogeshnik.
name: Publish static site

run-name: ${{ github.actor }} публикация

on:
  push

jobs:
  server_connect_and_run_commands:
    runs-on: ubuntu-latest
    name: Подключится и сгенерить контент
    steps:
      - name: Запустить скрипт на удаленном сервере
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.SSH_HOST }}
          username: ${{ secrets.SSH_USER }}
          key: ${{ secrets.SSH_KEY }}
          script: |
            cd blogeshnik/ # Тут путь, куда склонирован репозиторий
            git pull
            source ./venv/bin/activate
            make clean
            pelican -t ./themes/blogeshnik
            deactivate
  • Создаем в настройках своего репозитария три секрета:
    • SSH_HOST - адрес сервера, который будет хостить ваш сайт;
    • SSH_USER - имя пользователя, от которого гитхаб будет заходить на сервер;
    • SSH_KEY - приватный ключ, с которого можно зайти на сервер.
  • Осталось настроить nginx. Найдите инструкцию, где какие файлы создавать. А сам конфиг для отображения статики очень сложный и выглядит так:
server {
    server_name blog.milssky.ru;

    location / {
        root /home/milssky/blogeshnik/output;  # Укажите свой путь до output
        index index.html;
    }
}
  • Вот и все. Осталось в папке content писать свои гениальные мысли в md файликах, следуя доке пеликана. И все заработает, кроме цвета на ссылка, которые будут генерироваться из md-разметки. Чтобы решить эту проблему, придется немного настроить проект пеликана и использовать специальный тег. В pelicanconf.py добавляем следующий код
MARKDOWN = {
    'extension_configs': {
        'markdown.extensions.extra': {},
        'markdown.extensions.codehilite': {'css_class': 'highlight'},
        'markdown.extensions.toc': {'permalink': True},
        'markdown.extensions.attr_list': {},  # Включение расширения attr_list
    },
    'output_format': 'html5',
}

Теперь в md-файлах можно указывать кастомный css-класс для ссылки с помощью расширенного тега ссылки. Для моей темы красивый цвет ссылки задается классом .has-text-primary. Задаю его так:

[Pelican](https://getpelican.com){: .has-text-primary}
  • После создания файла, просто добавляем его в гит-репозиторий и пушим. Все остальное гитхаб сделает сам: сходит на ваш сервер, стянет из репы свежые изменения и перегенерирует сайт.

Ставьте звезды на репе с темой, любите друг друга. До новых встреч.