Получи случайную криптовалюту за регистрацию!

Увидел в другом канале рассказ о стеке для разработки своих пр | IT каждый день

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

Я бэкенд разработчик, и обычно пишу на Python, реже на Go.

Итак, если проект связан с какими-то важными данными и в нём есть сложная бизнес-логика, то я выбираю Django + Postgres. В Django есть всё необходимое чтобы быстро сделать админку, интеграции со сторонными сервисами и тд. Скорость работы самого приложения тут обычно не важна.

Если надо просто обработать какие-то данные, то я выбираю Python + Redis (иногда + Celery), без каких либо фреймворков. Например, нужно принять запрос в боте, сгенерировать какую-нибудь картинку/видео, отправить её в ответ.

Если надо обработать очень много данных, а ещё и очень быстро, то я выбираю Go. Например, разослать 2 млн сообщений в тысячи потоков за несколько минут. Или скачать миллионы страниц. Но разработка такого приложения занимает больше времени.

Помимо Postgres и Redis в качестве основных хранилищ я пробовал MongoDB, но для меня она добавила больше проблем чем пользы. Возможно, попробую ещё раз на каком-то заведомо высоко-нагруженном проекте.

По поводу фронтенда: когда-то давно я сам писал на Angular и Angular 2 целых пол года. Однако если сейчас мне потребуется настоящий фронтенд, то я точно не буду делать его сам. Лучше найму хорошего верстальщика и хорошего разработчика на эту часть. Но пока все мои проекты были private -- ничего лучше стандартной Django-админки там не требовалось.

Для всех «повторяющихся» проектов (например, бот в телеграм) раньше я писал большие сложные шаблоны с использованием https://github.com/cookiecutter/cookiecutter. Но для моих маленьких задумок такой подход оказался очень переусложнённым. Поэтому сейчас у меня простой репозиторий-шаблон.

До 2020 года я использовал Bitbucket, т.к. только там были бесплатные приватные репозитории для команд до 5 человек. Так же там далеко не сразу появился встроенный CI, поэтому поначалу весь деплой был реализован через самописные скрипты, которые заходили по ssh куда надо, обновляли код, перезапускали сервисы.

В 2020 GitHub анонсировал собственные бесплатные приватные репозитории для маленьких команд, и новые проекты я начал хранить там (по моим наблюдения GitHub работает более шустро, да и выглядит как-то привычнее). У GitHub свой собственный синтаксис CI job, но в нём достаточно разобраться один раз, а после использовать типовой конфиг везде.

Для своих проектов я не использую деплой в Docker, потому что за приватный Docker Registry и за сборку этих самых образов (Docker Runner) надо дополнительно платить. Но зато в Docker удобно гонять тесты локально, а так же готовые Docker-файлы могут упростить написание конфигов CI.

Для деплоя я использую самые обычные виртуалки на Ubuntu 18-20, и у меня есть собственные типовые инструкции и конфиги для настройки всего необходимого. Обычно настройка новой виртуалки с нуля занимает минут 20-30. А после этого деплой происходит автоматически по пушу в мастер.

Про что ещё забыл рассказать?