2021-01-13 14:06:31
Увидел в другом канале рассказ о стеке для разработки
своих проектов, и хочу рассказать про свой опыт.
Я бэкенд разработчик, и обычно пишу на 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. А после этого деплой происходит автоматически по пушу в мастер.
Про что ещё забыл рассказать?
2.0K views11:06