Next.js setup: Деплой на VPS | Jest | Playwright | CI/CD | Sentry

Поделиться
HTML-код
  • Опубликовано: 10 ноя 2024

Комментарии • 103

  • @paromovevg
    @paromovevg  9 месяцев назад +5

    Если вам понравился хостинг, переходите по этой ссылке, мне бонусики будут капать, и вам тоже)
    timeweb.cloud/r/paromovevg
    ГАЙД по выбору технологий t.me/ParomovevgHelperbot

    • @AlexanderSoar
      @AlexanderSoar Месяц назад

      Уже много лет им пользуюсь =))

  • @MegaMaxxon
    @MegaMaxxon 11 месяцев назад +44

    Вау, если прям со всей инфраструктурой, настройкой ci/cd, базой, тестами, nginx и вот это все то это мега круто 👍

  • @vladimirbavtenko9080
    @vladimirbavtenko9080 10 месяцев назад +11

    Я в начале видео, но уже хочу все это как минимум повторить на своем проекте и надеюсь, что все будет подробно. Это уникальный контент по реальной разработке и вообще Евгению огромная благодарность за естественную и не занудную подачу материала, тут конечно и голос, и меняющаяся интонация, и свой личный подход с высоты опыта - просто огонь! Я много чего смотрел и смотрю по разработке, но Евгений - уникальный и то, что он делает тоже никто ранее так не делал, да и не сможет из-за особенностей личности в хорошем смысле. Для меня - это топ канал. Желаю и, сам этого очень хочу, чтобы качество контента никогда не падало, с нетерпением жду уже продолжения.

  • @dmitrysvetlov6001
    @dmitrysvetlov6001 9 месяцев назад +6

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

  • @abvgd12357
    @abvgd12357 11 месяцев назад +13

    Замечательный контент! Приятно узнавать не затертую до дыр инфу, а что то полезное из так называемой "реальной разработки". Лайк и подписка однозначно!

  • @krasovsky1
    @krasovsky1 11 месяцев назад +7

    Супер контент! И без воды. Огромное спасибо👍

  • @grol5555
    @grol5555 7 месяцев назад +3

    Очень понравилась схема, деплоя, простая и понятная, как раз для pet-проектов. А то начинаешь смотреть видео как всё контеризируют, затем docker-compose и уже остаётся один шаг до kubernetes. Убиваешь уйму времени именно в DevOps для достаточно простого pet-проекта. А в этом видео всё просто, хорошее видео.

  • @Arman-kp8jf
    @Arman-kp8jf 11 месяцев назад +6

    Очень хороший выбор контента. Удачи!!!

  • @Zer0IsNotJustNumber
    @Zer0IsNotJustNumber 11 месяцев назад +5

    не успел посмотреть, уже лайк просто потому что знаю что это того стоит!

  • @leshamaybe
    @leshamaybe 11 месяцев назад +9

    Твой канал кладезь полезного. За разжевывание деплоя большое спасибо!

  • @LeonidMaksimshin
    @LeonidMaksimshin Месяц назад

    Жека, спасибо! Твои видосы заставляют думать, рождают в голове собственные мысли! Это ли не самое ценное! 👍

  • @СветланаАндреевна-х8р
    @СветланаАндреевна-х8р 5 месяцев назад +1

    Мега крутые темы затрагиваете которые прям нигде не найдешь а они очень важны.

  • @YakubAx
    @YakubAx 10 месяцев назад +4

    Супер видео ждем продолжение 🔥

  • @Kinslayer696
    @Kinslayer696 11 месяцев назад +9

    Видео огонь! Могу представить сколько потребовалось времени и сил чтобы все это отснять и смонтировать. Спасибо большое👍

  • @СергейТимофеев-ч6е
    @СергейТимофеев-ч6е 2 месяца назад

    Какой же Евгений красавчик! Дает мега крутой материал максимально компетентно и профессионально, так что можно довериться на все 100%, очень благодарен тебе за это!

  • @ЗайцевЕвгений-у3ы
    @ЗайцевЕвгений-у3ы 6 месяцев назад +1

    Спасибо, Евгений! Очень качественное видео. На просторах ютуба и гугла такго вообще нет. Так еще и файлик создал, который очень помогает мне. Эта база мне очень пригодилась на работе.

  • @pavelsmirnov9818
    @pavelsmirnov9818 11 месяцев назад +4

    Крутой контент, большое спасибо

  • @warpscore
    @warpscore 10 месяцев назад +1

    Очень вовремя, круто, спасибо большое

  • @АндрейГанюшкин-ф7е
    @АндрейГанюшкин-ф7е 8 месяцев назад

    Спасибо Евгений. Это наикрутейшее видео. Продолжу дальше смотреть твои видео.

  • @Денис-в5д5ь
    @Денис-в5д5ь 11 месяцев назад +2

    Ну до чего приятный паренек! Прям богом дано про чтото рассказыаать, и здорово что выбрал программирование)) лайк, подписка, хоть я и на вью пишу))

  • @GAccountMe
    @GAccountMe 11 месяцев назад +4

    Начал смотреть, похоже на что-то очень годное! Спасибо=)) Когда продолжение?=)

  • @ВладИванюк-ь3ь
    @ВладИванюк-ь3ь 4 месяца назад

    Спасибо тебе огромное. Контент супер полезный! Не останавливайся)

  • @kh4ff
    @kh4ff 5 месяцев назад

    Жаль, что раньше не нашёл твой канал. Таких туториалов практически нет на ютубе. Теперь мне хотябы ясно, куда копать, какие технологии изучать, чтобы правильно деплоить на vps.

  • @ЕвгенийТарасов-ъ8м
    @ЕвгенийТарасов-ъ8м 11 месяцев назад +1

    Круто, это очень круто!!!! Ждем продолжения, очень очень!!!!

  • @ringnull
    @ringnull 10 месяцев назад

    Серьёзно ты подошел к вопросу. То что надо.

  • @AleksandrNeo
    @AleksandrNeo 11 месяцев назад +9

    Привет! Было бы супер увидеть подключение оплаты! Очень мало инфв об этом в ру сегменте, спасибо)

  • @ЕвгенийДатский-о7э
    @ЕвгенийДатский-о7э 11 месяцев назад +5

    Дружище только не бросай прошу! я хочу делать этот проект вместе с тобой

  • @WorldworkMay
    @WorldworkMay 7 месяцев назад

    Шикарный контент! Спасибо!

  • @СтасВохмянин-б2ч
    @СтасВохмянин-б2ч 5 месяцев назад

    Топовый контент, очень сильно помог!

  • @ЕвгенийТарасов-ъ8м
    @ЕвгенийТарасов-ъ8м 10 месяцев назад

    Очень круто! Продолжение ждем...

  • @narwhal6422
    @narwhal6422 8 месяцев назад +1

    Неожиданно топ контент😮

  • @sardorsultanov3409
    @sardorsultanov3409 11 месяцев назад

    Я только начал изучать ci/cd а ваш видео просто топ по понятности

  • @Aleksandr-w4e
    @Aleksandr-w4e 11 месяцев назад

    Топ контент, будем смотреть/учиться

  • @archee7309
    @archee7309 10 месяцев назад +2

    А когда вторая часть? С нетерпением жду продолжения, твои уроки на вес золота

    • @paromovevg
      @paromovevg  9 месяцев назад

      Уже на канале)

  • @GAccountMe
    @GAccountMe 11 месяцев назад +2

    Я только разбираюсь с next и fsd, по этому могу заблуждаться. Но мне кажется, что серверные экшены нужно все же хранить отдельно, как отдельный слой абстракции. Ты абстрагировал работу с БД в архитектурный слой репозитория - это прекрасно, я тоже так делаю, но тут же принес этот слой в tsx файл, где у нас ui слой, что, как по мне - плохо, следующий шаг - это писать slq в компонентах=)). Например я стараюсь вынести из компонентов всю бизнеслогинку как раз таки в серверные экшены, а в компонентах оставлять только то, что касается ui и обработки событий, к тому же, в моих кейсах серверные экшены переиспользуются и они довольно объемные по коду, потому что, зачастую содержат много проверок и последовательной логики, что-то по типу - существует ли пользователь, создал ли этот пользователь курс, который хочет удалить - ну и т.д. Если это лежит отдельно это и тестируется лучше. Ну и конечно, я бы все же создал entity для курса и экшен по удалению курса был бы там, а фича бы его дергала, ну ты говоришь что осознанно сделал не так=) Так же вопрос - почему create-course-form лежит в фиче course-list, название явно же говорит что это фича про листинг, мне кажется что нужна фича по типу create-course, ну или все же создать entity для курса и положить эту форму там - вроде это не противоречит fsd, хотя все же эта функциональность явно фича. Еще по типам, ты говорил, что делаешь типы отдельно от тех, что генерит призма - тоже так делаю, но я наследуюсь от типа сущности который дает призма и проста пикаю нужные поля, это все же дает какую-то связь сущностей с базы и типов в приложении, например если в базе поменяется поле name на username, то тайпскрипт скажет что поля name нет в моем типе для приложения. Видос крутой, спасибо! Практически все авторы на ютубе, юдеми и других площадках делают, по принципу - работает и хорошо, очень мало материала по архитектуре, очень не хватает такого контента

    • @paromovevg
      @paromovevg  11 месяцев назад +1

      По факту тут не очень показательный пример, так как приложение маленькое и это посути был тестовый пример.
      - По поводу наследования от типа базы данных, советую посмотреть в сторону чистой архитектуры. Там база и её структура - есть следствие бизнес логики а не наоборот. Если база поменятся, то поменяется только код, который будет адаптировать структуру базы к бизнес сущности, не придётся менять весь остальной код приложения
      - По поводу экшонов в компонентах. Компонент и так серверный, исполняется на сервере. Я сказал важный момент. Экшон это контроллер, а значит в нём вообще ничего почти не будет. Весь реальный код будет в других модулях. Но просто этот пример был сшилком простым, что бы это делать (Но в следующем видео, я всё равно полностью эшконы вынес в отдельный файл)
      - По поводу фич и сущностей. Я говорил, что это немного изменённая моя версия fsd. Она решает вопрос слишком большого coupling. Подробнее тоже будет в следющем видео

  • @kirill_prog
    @kirill_prog 9 месяцев назад

    Как же это круто! Прошу не останавливайся! Сделай бусти для донатов.

    • @paromovevg
      @paromovevg  9 месяцев назад

      Сделал) boosty.to/paromov_evg/donate

  • @ell1ar
    @ell1ar 11 месяцев назад +4

    29:22, Евгений, мне кажется здесь важная неточность (я могу ошибаться, поправьте):
    Клиент отправляет серверу просто pub ключ, сервер проверяет в списке, есть ли такой ключ (~/.ssh/authorized_keys) и если да, то он с помощью него шифрует случайную строку, отсылает в зашифрованном виде клиенту. Клиент, с помощью секретного ключа, расшифровывает сообщение и отправляет назад серверу. Сервер проверяет, что если расшифрованное клиентом сообщение совпадает с его первоначальным, то вход успешен.
    Потому что pub ключик, по сути, просто "замок", которым можно закрыть "ящичек". Ничего этот ключ не расшифровывает. А по вашей логике получается наоборот :)

    • @modusvivaldi7701
      @modusvivaldi7701 4 месяца назад +1

      Да, инициатор соединения использует приватный ключ для расшифровки сообщения, которое принимающая сторона шифрует с помощью публичного ключа.

  • @martcarrefour
    @martcarrefour 10 месяцев назад +1

    Очень крутое видео!
    Не подскажете, когда ждать продолжения?

  • @vadikcvirko179
    @vadikcvirko179 11 месяцев назад

    Давай вторую часть, я поставил лайк и подписался.

  • @darktmdarkness6952
    @darktmdarkness6952 9 месяцев назад

    по поводу настройки сервера, есть небольшое замечание: еще для повышения безопасности меняют порт подключения к ssh с 22 на какой-нибудь 22202, и врубают фаервол и блочат все порты кроме ssh, http, https. Что дополнительно повышает устойчивость сервера к взлому.

  • @narwhal6422
    @narwhal6422 8 месяцев назад +1

    Ура я сделал это, правда у меня это заняло часов 25🎉

  • @alexdenuke
    @alexdenuke 9 месяцев назад

    Автору спасибо, но было упущено про то, что линю надо обновить глобально

  • @front_interviews
    @front_interviews 11 месяцев назад

    Благодарю =)

  • @YaniaRZ
    @YaniaRZ 3 месяца назад

    Спасибо большое за такой контент! Я подписалась, думаю еще много чего посмотрю, как минимум редакс, 2я часть меня ждет)
    надеялась увидеть как быть с переменными окружения в которых прописан адрес сервера для запросов, при разработке у меня там localhost, но при деплое будет же другой адрес, или проксирование решает эту проблему?
    и очень интересно про переменные окружения next, которые почему-то не будет видно pm2, но у вас же все работает, не поняла почему должны быть проблемы?

  • @igor5379
    @igor5379 10 месяцев назад

    никто из хитхаба секреты не сможет достать, КРОМЕ самого гидхаб)))

  • @kixxgopro
    @kixxgopro 5 месяцев назад

    топ

  • @neotom8653
    @neotom8653 11 месяцев назад

    Очень качественно

  • @ЕвгенийДатский-о7э
    @ЕвгенийДатский-о7э 9 месяцев назад +1

    Объясни пожалуйста как ты конфигурационные файлы удалил, перед тем как свой создал?

  • @ringnull
    @ringnull 10 месяцев назад +1

    Когда следующий видос ждать?

  • @artemvictorovich6731
    @artemvictorovich6731 10 месяцев назад

    Привет! Спасибо за видео! Подскажи, пожалуйста, какой микрофон используешь ?

  • @1982RUFF
    @1982RUFF 11 месяцев назад +3

    Евгений, спасибо за отличное видео! Очень полезно и информация очень важная...
    Есть вопрос по поводу VDS сервера - какие должны быть требования под next с размещением небольшого и-магазина? Я взял на нетангелах 4 ядра и 4гб NVMе диск на 10гб - но после деплоя постоянные глюки и pm2 вылетает постоянно.. (( а если брать больше сервер - стоимость возрастает прилично...
    спасибо заранее за ответ!

    • @paromovevg
      @paromovevg  11 месяцев назад +3

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

    • @1982RUFF
      @1982RUFF 9 месяцев назад

      Ну вроде как проблема была в хостинге... в последнее время что то меняю на сайте и билдю повторно - вроде как работает нормально и не виснет как раньше было)
      @@maks2

  • @nainkanal3979
    @nainkanal3979 11 месяцев назад +5

    Очень крутой стек! Евгений, как часто будут выходить видео с этим курсом?

    • @paromovevg
      @paromovevg  11 месяцев назад +6

      Ближайшее время только такие видео и будут выходить. Где то раз в 1.5 - 2 недели

  • @nikolaydemidovez
    @nikolaydemidovez 11 месяцев назад +1

    если использовать ufw вместе с doker, то внешние порты для докера не блокируются (вроде), надо дополнительно шаманить

  • @Mikalai-yc7yy
    @Mikalai-yc7yy 11 месяцев назад

    🔥🔥🔥🔥🔥🔥

  • @alhongelios53
    @alhongelios53 8 месяцев назад

    небольшое уточнение по pm2 если прописать просто npx pm2 startup то при перезапуске сервака pm2 не стартует надо указывать еще название ОС
    то есть писать npx pm2 startup ubuntu

  • @katada
    @katada 11 месяцев назад

    Круто!

  • @goldovyidozhdik3430
    @goldovyidozhdik3430 10 месяцев назад +1

    Евгений такой вопрос, а если мне надо будет сделать сайт юр лицу по похожему алгоритму действий, как потом передать его в собственность заказчику? Домен и сервер наверное можно легко переоформить, а с гитхабом непонятно.
    Может сразу сделать гитхаб и сервер на имя заказчика а самому просто получить доступ? но звучит не надёжно
    или заказчик просто скачивает файлы с моего репозитория и делает с ними что хочет, а я свой удаляю?

  • @CJIu3eHb
    @CJIu3eHb 11 месяцев назад

    Тоже не получилось с фингерпринтом у appleboy/ssh-action, уж и по их мануалу получал отпечаток - глухо. Но оставил без отпечатка пока, т.к. неизвестно, что хуже в таком тонком деле, как безопасность - широко известный пакет с поломанным отпечатком или какой-то малораспространенный D3rHase/ssh-command-action с отпечатком. Кстати, пошарился чуть по другим ssh action - так далеко не у всех проверка отпечатков есть.

  • @plexterq3
    @plexterq3 10 месяцев назад

    Не пробовали использовать next-safe-action? Она позволит не писать код для валидации, просто передавая в action схему zod. Также там встроен враппер для обработки ошибок. И мы, написав свой слой ошибок, например ActionError, сможем в экшенах только этот тип ошибок передавать на клиент для toast. Ну и также позволит, например писать свой action, например authAction и тогда не надо будет в каждом action проверять авторизацию где она нужна. А ну и также генерит useAction, который как в react-query имеет onSuccuess, onError итд

  • @lepreclown2180
    @lepreclown2180 11 месяцев назад +2

    Подскажите пожалуйста, я ведь правильно понял, что используем prisma, локальную БД и напрямую к ней конектимся, только потому что нет отдельного backend.
    То есть если бы у нас был в реальном проекте backend(python) к примеру, то мы бы просто по API запросы делали?

    • @paromovevg
      @paromovevg  11 месяцев назад

      В более типичных проектах, да запросы просто шли бы к бекенду. Но тут всё же дальше будет больше отличий. Так как из за fullstack природы этого приложения, будет достаточно много бизнес логики, которую мы будем менеджить

  • @Сергей-э8о6м
    @Сергей-э8о6м 10 месяцев назад

    Крутейшее видео, спасибо. Очень ждал подобное. Вопрос по поводу базы: в чём основная мотивация заказа отдельной базы (не развёртывание внутри виртуального сервера)? Ведь за неё нужно платить отдельно. Это связано именно с удобной реализацией бэкапов? Или есть ещё какие-то существенные причины, может это более безопаснее и т.д?

    • @darktmdarkness6952
      @darktmdarkness6952 9 месяцев назад +1

      1. настройки. Если вы покупаете вот такую базу у сервиса, она уже минимально настроена под железо и ресурсы сервера и вам ничего делать не нужно. Максимум, добавить в конфиг, какие-то свои настройки специфичные для вашего продукта и приложения. Если вы ставите базу просто рядом, то все настройки должны выполнять сами. И если с мускулом это проблема минимальна, то постгру придется настраивать под ресурсы которые прокинуты, например, в тот же докер, под железо и т.д.
      2. up-time. В случае покупки у сервиса сервера бд, в стоимость входит администрирование и поддержка работы базы, самим хостером. Т.е. следить за базой и её безопасностью, нужно им. Если вы ставите рядом, то делать это нужно вам. Например, в случае постгры, собирать логи и метрики, смотреть за наполнением виртуальных таблиц и выполнением auto-vacuum. Если данные в auto-vacuum застряли, самому его выполнять и т.д.
      3. производительность. Ваш сервис, это не всегда полтора пользователя в сутки, и может иметь высокую нагрузку на базу, как на запись, так и на чтение, требовать репликации и настройки кластеров, репликаций, регионнальности и много чего еще. Тогда тоже предпочтительнее базу выносить на отдельный сервер. И в не сложных случаях, так же проще скинуть все это на сервис, взяв у них услугу, чем нанимать команду девопсов и датабейз инженеров, или самому во всем этом разбираться.

    • @Сергей-э8о6м
      @Сергей-э8о6м 9 месяцев назад

      @@darktmdarkness6952 спасибо за развёрнутый ответ. Очень интересно

  • @egrpavlov2694
    @egrpavlov2694 8 месяцев назад

    В видео немного перепутан алгоритм key-аутентификация. С помощью приватного ключа данные расшифровываются, а публичным шифруются

  • @imthebest8000
    @imthebest8000 7 месяцев назад

    хм, а стоит добавлять docker? Или это уже лишнее?

  • @grigodoes
    @grigodoes 10 месяцев назад

    Крайне полезная информация) спасибо
    Если создашь boosty с меня моментальная подписка!)

  • @abdurahmonvahobov8684
    @abdurahmonvahobov8684 11 месяцев назад

    👍

  • @xxcrypt234
    @xxcrypt234 9 месяцев назад

    Гигачад

  • @1nightstarlight3
    @1nightstarlight3 11 месяцев назад +2

    Царский подгон, выходные уже удались

  • @deantek
    @deantek 9 месяцев назад

    смотрю эту серию видосов, потому что боюсь завалить испыталку в банке, до этого 4 года на галерах греб, получил оффер в хорошую компанию, а теперь неуверенность меня съедает :`(

  • @tahrizade
    @tahrizade 9 месяцев назад +1

    а как ты монтируешь это видое ? это эже 4 часа и сколько времени уходит на скачивание в youtube ???

    • @paromovevg
      @paromovevg  9 месяцев назад +2

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

    • @tahrizade
      @tahrizade 9 месяцев назад +1

      @@paromovevg да тоже самое . думал есть какой-то лайф хак ))) тебя тогда желаю удачи чувак :) за видос спасибо

  • @alex91073
    @alex91073 10 месяцев назад

    Всем привет! благодарю Евгения за видео. у меня возникла проблема, когда гитхаб пытается подключиться к vps. может кто-нибудь помочь советом, как решить задачу?
    >> Public ssh fingerprint found, man-in-the-middle protection enabled.
    No ED25519 host key is known for [***]:*** and you have requested strict checking.
    Host key verification failed.

  • @Selieznov
    @Selieznov 11 месяцев назад

    Не дума делать не только миграцию бд, а и самому?)

  • @JJohnson-fy9uz
    @JJohnson-fy9uz 9 месяцев назад

    А почему pm2, а не докер?

  • @servera-center
    @servera-center 9 месяцев назад

    сделай курс по docker

  • @ringnull
    @ringnull 10 месяцев назад

    1:39:39 это не синглтон, ты каждый раз при импорте получишь разные объекты

  • @yakub8798
    @yakub8798 9 месяцев назад

    привет подскажите пж как получить доступ к 3 видео из плейлиста ?

    • @paromovevg
      @paromovevg  9 месяцев назад +1

      Третье видео завтра выйдет

    • @yakub8798
      @yakub8798 9 месяцев назад

      @@paromovevg понял, спасибо тебе за контент , очень нравятся твои уроки !

  • @izzy7541
    @izzy7541 11 месяцев назад +1

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

    • @paromovevg
      @paromovevg  11 месяцев назад +1

      Полностью отрицать юниты точно не стоит, они очень хорошо работают в "сложных" местах. В этом проекте такие будут, так что я решил их здесь использовать
      Но всё покрывать ими мы конечно не будем

    • @izzy7541
      @izzy7541 11 месяцев назад

      @@paromovevg Конечно, юниты местами нужны. Но большинство почему то тестируют выполнение кода, мокая каждый чих, забывая что сценарий теста должнен выполняться от лица пользователя

    • @SuperWhiteskull
      @SuperWhiteskull 9 месяцев назад

      @@izzy7541сценарий теста от пользователя напишет тестировщик, а юнит тесты выполняют другую функцию

  • @wolfern5449
    @wolfern5449 9 месяцев назад

    А где продолжение, автор?(

    • @paromovevg
      @paromovevg  9 месяцев назад

      Уже на канале)

  • @r0mm4k
    @r0mm4k 11 месяцев назад

    Привет. Как на счет того, чтобы в докер все это завернуть?

    • @paromovevg
      @paromovevg  11 месяцев назад +1

      Вообще хочется эту тему немного оттянуть. Next.js Плохо в докер заворачивается, так как для сборки нужно подключение к базе данных + все переменные окружения должны быть переданные во время билда.
      Это всё можно реализовать, но это немного концепции докера противоречит. +Менеджмент имеджей на vps не очень приятная штука (надо придумывать механизм всё время старые чистить)
      Рано или поздно в любом случае в докер проще уйти, но я оттяну немного этот момент

  • @denispepper2830
    @denispepper2830 11 месяцев назад

    fsd - это кринж

    • @rustamakhmetyanov4404
      @rustamakhmetyanov4404 11 месяцев назад

      ну у сбер с вами не согласится)) у них в вакансиях просят его

    • @Lear-fe6se
      @Lear-fe6se 11 месяцев назад +1

      можете предложить альтернативы?

    • @modusvivaldi7701
      @modusvivaldi7701 8 месяцев назад +1

      @denispepper2830 Расскажешь, почему кринж?