Новый блог

Одним январским вечером мне пришла в голову отличная идея, о которой стоило немедля написать в свой канал, чтобы человечество ее оценило. Идея эта, как вы можете догадаться - тот пост, в котором достаточно много кода и inline разметки. Довольно долго я боролся с телеграмом, чтобы текст разметился в соответствии с тем, как я его разметил, но результат остался печален, и пост пришлось спрятать.

Это событие стало достаточным поводом наконец подняться и сделать свой блог, как и полагается всем уважающим себя программистам-графоманам. Впрочем, платить за хостинг сайта, на котором будет не более 50 посетителей в месяц на какой-то VPS жаба тоже душила. Компромисс был найден, и я придумал сделать статический сайт, и захостить его на S3/схожем хранилище, дающим делать свои сайты за копейки.

Так я очень недавно настраивал ПДД Яндекса, и мой DNS все еще хостился у них, было принято решение воспользоваться их же сервисом Object Storage, который является S3-совместимым и позволяет хостить сайты. За день был создан index.html шутливого содержания, и набросан простой скрипт на питоне который с помощью boto3 заливает все HTML-страницы из папки в бакет хранилища. Попытка открыть сайт всегда приводила к тому, что index.html бодро отправлялся в загрузки. Но если залить файл вручную, все было в порядке! В чем же дело?

Ответ был прост для тех, кто с такими хранилищами работал: у каждого объекта в бакете есть свой Content-Type, и по умолчанию он application/octet-stream, все в соответствии с RFC-2046. Непонятно только, почему этот тип не показывался нигде в консоли хранилища, это бы сильно сэкономило время. В целом Яндекс.Облако показалось крайне сырым и недоделанным, отчего за державу немного обидно. В итоге заливка файлов делается через Travis. Для этого достаточно просто прописать в .travis.yml следующие волшебные строки:

deploy:
  provider: s3
  bucket: "xn--80a0abxb.xn--80aaatyni4c.xn--p1ai"
  skip_cleanup: true
  local_dir: dist
  endpoint: "https://storage.yandexcloud.net"

Отлично, с заливкой файлов разобрались. Но не делать же каждую страничку вручную, надо придумать какой-то способ. Желательно на JS, ибо там же webpack, он должен уметь такое? Правда? Правда. html-webpack-plugin позволяет генерировать из lodash шаблонов html. Так как на свете нет формата одновременно проще и удобнее Markdown, модуль marked приходит на помощь и генерирует HTML-разметку из .md файлов.

Казалось бы, почему нельзя было взять готовый фреймворк для блоггинга и не переводить попусту байты? Помимо фатального недостатка, они все напоминают собой по сложности и дизайна и работы с ними учетную систему для малого бизнеса, и такие блоги не очень приятно смотреть. Сравните по оформлению Medium и блог разработчика Redis. Который читать приятнее, и какой быстрее загрузится? В этом-то и суть. К тому же, вся инфраструктура облачная и при этом on-demand, так как сайт хостится хранилищем, а собирается бесплатным Travis из git-репозитория. Все красиво и экономно.