Каждую неделю появляются новые инструменты и технологии. Например, стремительно развивается сфера искусственного интеллекта (ИИ). Почти каждый день выпускается новый сервис или модель. То же самое можно сказать и об экосистеме JavaScript, которая постоянно расширяется за счет новых библиотек и фреймворков.
Кажется, что поспеть за этим прогрессом невозможно. Поэтому так важно иметь надежный стек, на который можно положиться. Стек, готовый к использованию для разработки современных веб-приложений.
Здесь представлен проверенный технологический стек, который я использую для создания веб-приложений.
Вы можете воспользоваться ссылками на инструменты, используемые в каждой части стека, если еще не знакомы с ними.
Фронтенд
Для фронтенда я предпочитаю использовать React. Являясь пользователем React в течение последних лет, считаю его отличным инструментом для разработки веб-приложений. Рекомендую объединять его с Next.js, чтобы упростить создание React-приложений с рендерингом на стороне сервера.
Правда, иногда Next.js бывает несколько категоричен, поэтому я не следую многим его соглашениям. Зато он облегчает процесс создания React-приложений. Использую его маршрутизатор приложений и компонент Image.
Серверные действия новой версии Next.js (Server Actions) не могу порекомендовать, поскольку у меня еще не было возможности опробовать их. С учетом сказанного, мой выбор для интеграции API — React Query в паре с Axios. Они хорошо работают вместе, и мне нравится, как React Query упрощает кэширование и управление данными.
Для стилизации предпочитаю использовать Tailwind CSS. Он не самый лучший, но с его помощью легко создавать дизайн. Правда, синтаксис Tailwind CSS бывает несколько перегружен, но думаю, можно простить ему этот недостаток за простоту использования. Работа Tailwind CSS в паре с shadcn/ui — отличный способ упростить создание компонентов, особенно если вам нравятся минималистичные дизайны.
В общем, мой стек фронтенда таков:
- React Query и Axios;
Бэкенд
Для бэкенда я предпочитаю использовать Node.js. Как и в случае с React, являюсь пользователем Node.js в течение последних лет и считаю его отличным инструментом для создания веб-приложений. Рекомендую применять его в паре с Nest.js для создания конечных точек, необходимых для фронтенда.
Мне нравится, как организован Nest.js и как он упрощает создание API с помощью декораторов. Правда, иногда он приводит в замешательство своей магией кода, неизвестно откуда взявшегося, или проблемами, возникающими из-за круговой зависимости. Но если разобраться в том, как это работает, и изучить документацию Nest.js, можно преодолеть эти сложности.
Поскольку каждому веб-приложению требуется база данных, предпочитаю использовать PostgreSQL (Supabase) вместе с TypeORM. Библиотека TypeORM обладает отличной документацией. Это одна из самых надежных ORM-технологий, которые я использовал. Она существует уже довольно долгое время и отличается безупречной интеграцией с Nest.js.
В общем, мой стек бэкенда выглядит следующим образом:
- PostgreSQL (Supabase) и TypeORM.
Инфраструктура/развертывание
Для развертывания, хостинга и даже настройки SSL предпочитаю использовать Coolify. Недавно освоив этот инструмент, уже успел оценить его помощь в настройке веб-приложений. Если раньше мне нравилось использовать Vercel или GCP с Cloud Run, то теперь я воздерживаюсь от этих бессерверных решений, поскольку понял, что гораздо лучше иметь выделенный сервер. Для своих нужд покупаю VPS у Digital Ocean.
К счастью, Coolify легко настраивается, имеет варианты самостоятельного хостинга и отличную документацию. Он значительно облегчает развертывание веб-приложений и упрощает настройку SSL.
Я использую этот инструмент совместно с Cloudflare для DNS и CDN, а также покупаю на этой платформе легко управляемые домены.
И наконец, в мой стек входит Github. Я соединяю его с Coolify для CI/CD, затем подключаю к Discord для получения уведомлений о развертывании.
В общем, мой стек развертывания выглядит следующим образом:
Электронная почта
Электронная почта — один из инструментов, которые кажутся необязательными, но на самом деле являются необходимыми. Среди множества почтовых сервисов я выделил для себя Resend. Этот простой инструмент значительно упрощает отправку электронных писем.
Если Resend служит для отправки электронных писем, то @react-emails помогает создавать шаблоны этих писем. Раньше создание надежных шаблонов писем было для меня проблемой, но библиотека @react-emails устранила ее.
Resend можно использовать в паре с Supabase, если вас устраивают услуги этой базы данных.
В общем, мой email-стек выглядит следующим образом:
Аутентификация
Настроить аутентификацию пользователей мне обычно помогает Supabase. Для бэкенда я использую сервис авторизации, предлагаемый Supabase, создавая конечную точку и вызывая API этой платформы. Supabase также предоставляет свой фронтенд SDK, но я предпочитаю настройку на бэкенде.
Поскольку я объединяю Postgres с Supabase, то при необходимости могу создать собственный сервис аутентификации. Мой стек достаточно гибок для этого. Главное преимущество собственного сервиса аутентификации заключается в том, что данные пользователей находятся в вашем распоряжении, а не на сторонних сервисах.
В общем, мой стек аутентификации таков:
Хранилище
Хранить изображения я предпочитаю с помощью ImageKit. За долгое время использования он отлично себя зарекомендовал как в мобильных, так и в веб-приложениях, Мне нравится, как ImageKit упрощает хранение изображений и облегчает работу с ними по ходу дела.
Для общего хранилища пока не нашел подходящего варианта. Предполагаю, что смогу использовать Cloudflare R2, AWS S3 или даже Supabase Storage. Но возможности их опробовать еще не было. Я пока не работал над веб-приложениями, которым нужны файлы или общее хранилище.
В общем, мой стек хранилища выглядит следующим образом:
- ImageKit (для изображений);
- Cloudflare R2, AWS S3 или Supabase Storage (для общего хранилища).
Стоимость
При такой настройке обычно ориентируюсь на $20-30. Это стоимость VPS (virtual private server — виртуальный приватный сервер) у DigitalOcean — предпочитаемого мной провайдера. Вероятно, можно найти более дешевый сервер, но меня устраивает этот вариант. Думаю, покупка у провайдера Hetzner обойдется дешевле, чем у DigitalOcean.
У многих других сервисов есть щедрые бесплатные уровни. Они будут полезны тем, кто хочет просто попрактиковаться!
Заключение
Этот стек доказал свою эффективность и помог мне быстрее создавать веб-приложения. Иметь такой надежный стек, на который можно положиться, чрезвычайно важно. Не всегда все решают новейшие инструменты или технологии — куда полезнее использовать инструментарий, наиболее подходящий для конкретной работы.
Мне известны и другие инструменты, но в большинстве случаев этого набора достаточно для создания необходимых мне веб-приложений. Особенно эффективно они работают при объединении в удачно подобранные пары.
Мой стек не идеален, но он помогает мне реализовывать свои идеи и ускоряет разработку веб-приложений.
Надеюсь, он поможет и вам быстрее создавать веб-приложения. А возможно, станет отправной точкой вашего стека, на который вы сможете положиться.
Читайте также:
- Добавление 3D-элементов на сайты с помощью Babylon.js и Vite
- 10 CSS-однострочников для преобразования веб-приложения
- 15 сайтов, экономящих время разработчика
Читайте нас в Telegram, VK и Дзен
Перевод статьи JM Santos: My Tech Stack For Building Web Apps Today





