Что, зачем и почему именно так
Блог можно написать на чём угодно. Я выбирал так, чтобы было понятно, надёжно и не стыдно показать.
При выборе технологии руководствовался тем, что в первую очередь интересно мне. А мне интересно разобраться, как сделать. В этом проекте я стараюсь руководствоваться принципом необходимого и достаточного для воплощения цели.
Flask
Django — это комбайн. Он умеет всё, но тащит за собой кучу невостребованного прицепом. Flask — это скальпель. Он не навязывает структуру, не решает за тебя. Маршруты, формы, база данных — всё пишешь сам. Это дольше, но так я понимаю, что происходит.
SQLite
Есть мнение: «SQLite — это для прототипов и стендов, для продакшена нужен PostgreSQL». Для блога с одним автором и, возможно, сотней читателей SQLite — это практически навсегда. Не нужно поднимать отдельный сервис, не нужно настраивать пользователя. Просто файл в папке instance/. Бекап — скопировал файл. Переезд — забрал файл с собой.
Gunicorn + Nginx
Gunicorn и Nginx часто ставят рядом, но путать их не стоит. Это разные инструменты, которые решают разные задачи.
Gunicorn запускает Python-код и обрабатывает динамические запросы, он WSGI-сервер.
Nginx — это веб-сервер и обратный прокси, который отдаёт статику и перенаправляет запросы. Как они работают в связке? Nginx принимает запрос из интернета, проверяет, идёт ли он к статическому файлу или к приложению. Если к приложению — Nginx проксирует запрос на Gunicorn, который уже запускает мой код.
Redis
Redis появился из‑за rate limiting.
Rate limiting — это ограничение количества запросов. В моём блоге нет суеты. Если кто-то настойчивый попробует ломиться в админку, то увидит, как я обрабатываю 429-ю ошибку превышения лимитов авторизации. Попробуй =)
Воркеры — это отдельные процессы, которые Gunicorn запускает для параллельной обработки запросов. У каждого воркера своя память и свои счётчики неудачных попыток.
Без Redis каждый воркер считает попытки отдельно в своём таймере. Можно сделать три ошибки в одном воркере, а в другом — ещё три. Redis делает счётчик общим для всех воркеров.
Без него защита админки — просто слова.
Markdown
Когда ты в свой блог добавляешь поддержку Markdown, ты не просто делаешь "красиво". Ты подключаешь свой проект к огромной экосистеме.
Markdown — это не просто удобно. Это индустриальный стандарт, который объединяет разработчиков, писателей и пользователей по всему миру. Используя его в своём блоге, я следую примеру GitHub, Reddit, Notion и многих других.
А ещё всё работает после установки единственной библиотеки. Принцип необходимого и достаточного.
Git
Код на сервере не редактируется. Всё идёт через Git. Для проверки теории и технологии использую локальную разработку, чтобы прощупать и понять. Ветки, коммиты, пул-реквесты — не для галочки. А чтобы не потерять изменения и не сломать работающее.
В моём проекте две рабочие ветки: main и develop. В идеальной картине должна быть ещё feature/*, но на практике фичи я делал прямо в develop. Это не страшно.
Pull request’ы использую. Они помогают увидеть, что именно меняется, перед тем как попасть в main. Даже если меняю один файл.
Репозиторий появился сразу после первой рабочей страницы. Не «допилю — тогда закоммичу», а сразу. Каждый рабочий шаг — коммит.
Итог
Набор получился простым, но не игрушечным. Каждая технология решает свою задачу и не лезет в чужую.