Старая статья - Под капотом у блога
Когда не знаешь про что писать, пиши про “движок” блога. Прошлая статья была написана в 2017 году. За 5 лет технологии и устройство блога изменились, а еще я стал рисовать больше диаграмм, так что с картинки и начнем.
Обзор
1. Мой ноутбук
Основа блога по-прежнему Jekyll, тут почти ничего не изменилось, разве что отказался от Octopress. Пишу и редактирую статьи в Markdown, запускаю локально, проверяю как выглядит в браузере, делаю git commit и git push. Скрипта деплоя который нужно запускать руками больше нет, он перенесен в Gitlab (2). Если в статье есть картинки я загружаю их на Flickr (5) через собственную утилиту, написанную на Ruby и работающую на бесплатном хостинге Heroku (4).
2. Gitlab
Переезд на Gitlab состоялся когда у Github еще не было приватных репозиториев в бесплатных аккаунтах. Плюс у них довольно мощный механизм CI/CD. У меня есть две основных ветки, на которых запускается сборка, тестовая и главная. Сборка из тестовой ветки деплоится на тестовый домен, а из главной, соответственно, на главный. Тестовый домен закрыт аутентификацией, так я могу, во-первых, полностью подготовить статью и видеть финальный результат, во-вторых, поделиться статьей с кем-нибудь для оценки, чтобы при необходимости что-нибудь подправить. Gitlab запускает Jekyll сборку и копирует сгенерированные HTML и CSS файлы в Minio (3) по S3 протоколу. По ходу пайплайна он также присылает мне уведомления в Telegram.
3. Minio
Minio - это такой персональный Amazon S3, который можно запустить на собственном сервере. Он позволяет создавать разные “корзины” и складывать в них файлы, а потом получать к ним доступ по HTTP протоколу. Для обоих и тестового и главного домена используется один и тот же инстанс Minio, но разные корзины. Почему Minio, а не, например, просто хранить файлы в папочках на сервере? Потому что он предоставляет удобный интерфейс, S3 и HTTP протоколы. В дальнейшем, если например, мне нужно будет масштабирование, я смогу заменить его на настоящий S3, почти ничего не меняя в обвязке и конфигурации.
4. Heroku
Heroku - крутой хостинг приложений, с хорошим бесплатным тарифом. Я часто им пользуюсь, особенно когда нужно быстро проверить только что написанную штуку. Утилита, через которую я работаю с Flickr перешла из стадии разработки в использование, но осталась на Heroku, потому что нетребовательная и нужна эпизодически.
5. Flickr
Я по-прежнему храню все картинки блога во Flickr. Он дает мне бесплатное хранение и CDN. Хотя они сильно порезали бесплатный аккаунт. Если раньше у меня там был 1TB, то сейчас ограничение в 1000 файлов. Мой блог пока умещается, но что буду делать с этим дальше пока не знаю.
6. Читатель
Когда кто-то открывает блог, запросы улетают в Cloudflare (7), он проксирует запросы на мой сервер, на котором запущен Nginx (8). Собственно это самое большое отличие от предыдущего сетапа. Вместо бесплатных хостингов на Github и Gitlab я теперь использую собственный сервер. Это нужно чтобы иметь полноценный контроль над работой блога. Картинки запрашиваются напрямую из Flickr, тут я надеюсь на их CDN. Все остальные ресурсы включая шрифты загружаются с моего сервера, ни каких сторонних скриптов. Раньше я, например, использовал Google Analytics, но отказался от него в пользу self-hosted решения (9).
7. Cloudflare
Cloudflare дает некоторую защиту от ботов и немного кеширует контент. Как и во всех предыдущих сервисах я пользуюсь бесплатной версией. Одна из удобных штук, которую дает Cloudflare, это API. Я использую его, например, для автоматического выписывания wildcard сертификатов Let’s Encrypt.
8. Nginx
Ну тут все просто, Nginx крутой web-сервер и я хорошо его знаю.
9. Analytics
Последний компонент блога - аналитика. Как сказал раньше, я отказался от Google Analytics в пользу self-hosted решения. На данный момент это Ackee. Я не использую куки и собираю минимальную аналитику, например, количество посещений и уникальных пользователей, мне хватает. В планах есть тестирование других Open Source проектов, поэтому квадратик и обозначен как абстрактная аналитика.
Выводы
За годы ведения блога я сформировал принципы, которых придерживаюсь в технической части:
- Скорость - статические сайты самые быстрые
- Безопасность - HTTPS везде, нет кук, нет сторонних скриптов
- Удобство использования/чтения - достаточно крупный и хорошо читаемый шрифт, нет перекрывающих элементов, нет раздражающих анимаций, “всплывашек” и т.д., удобная навигация
На данный момент меня полностью устраивает стек и технически ничего не мешает заниматься только контентом. Мешает что-то другое, но это тема другого разговора.
#TechAndDev