Что, зачем и почему именно так

Блог можно написать на чём угодно. Я выбирал так, чтобы было понятно, надёжно и не стыдно показать.

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

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. Даже если меняю один файл.

Репозиторий появился сразу после первой рабочей страницы. Не «допилю — тогда закоммичу», а сразу. Каждый рабочий шаг — коммит.

Итог

Набор получился простым, но не игрушечным. Каждая технология решает свою задачу и не лезет в чужую.