yourdomain.local {
reverse_proxy http://localhost:20010
}
Не понимаю, почему не за ним :-) Оно за всеми, в данном контракте 2 стороны.
Если бэк сделает в API, то, что не нужно фронтам, нафиг такой бэк?
А не из серии: бэк - я так вижу, да будет так, вот вам 1000 полей в пользователе, пофиг что выводить 5 только лишь, а лишние байты зачем?
Мне кажется проблема в том, что бекенд разработчики не верно понимают разработку бизнес-логики и разработку интерфейса доступа к ней и к данным. Интерфейс на бекенд может быть HTTP, сокеты ли даже командная строка. Это всего лишь интерфейс. Эти разработчики при проектировании ендпойнта /login часто зашивают в контроллер бизнес-логику, работу с базой, генерацию сессии и т.д. И именно поэтому они связывают проектирование API с разработкой кода функции и именно поэтому когда им нужно добавить например GraphQL им нужно дублировать функционал.
Что скажите? Или API это больше чем данные?
Почему заранее нельзя договориться с фронтом как данные будут бегать туда-обратно и начать работу параллельно? Такого кейса нет? Фронты не могут предложить вариант как это видят? Вы на беке дадите добро или внесете изменения и у вас будет контракт с фронтами. Вы спокойно пойдете делать и они тоже. Потом через какое-то время вы соединитесь и проверите, что ваш контракт выполнен. Что тут не так?
Если, Вы не делали никогда по другому, не значит что этого нет?
Есть не только фронты, есть архитектор наконец, и 5 фронт разработчиков.
Есть опытные фронт разработчики и менее опытные бэк, такое может быть.
Гипотеза: если фронты хорошо знают REST, то это реальный профит, когда они сами могут накидать в Swagger ендпойнтов, которые потом утвердит или поправит бекенд. Если добавить сюда удобный редактор в стиле Notion когда тутже правим и видим превью ендпойинта. А если еще к нему зацепить Swagger с реализованного бэка потом и эта чтука сделает кросс-валидацию и скажет где контракт нарушен - то вообще огонь или нет?
$post = Post::find($id);
if (!$post) {
return false;
}
Покажите мне этот ответ из стек оверфлоу. Я очень удивлюсь, чтобы кто-то писал --lines=100 вместо -n 100 (а -n поддерживается в макос).
Обратиться к c:\ ?
Обратиться к c:\ ?
Или вы так не делаете? А почему? А может потому что изначально пишете код платформонезависимо?
Так а почему в баш не можете так делать и приводите платформозависимые примеры с --lines=100 ?
Мне как бы никто не мешает вызывать java метод из джарника, вызывая джаву из баша. Я собственно так и сделал - написал маленький код на java, который использует java driver и провожу тесты с разными версиями mongo драйвера. Чтобы тест был релевантным и я мог бы уверенно сказать разработчикам, какие версии java драйвера точно работают.
Так если не можете привести пример, на чем основывается тогда уверенность, что баш давно пора заменить на другой более мощный и современный язык?
баш в качестве универсального языка и оболочки - пока что самый удобный, и альтернативы у него, как я уже писал - ksh или zsh
Как выяснилось, пример совершенно нерелевантный, потому что и для базы и для большинства других вещей как раз именно баш лучше всего подходит.
Ничего не нужно.
У любого языка есть свои кастомные штуки при работе в разных ОС.
И совершенно непонятно, почему наличие всего одного флажка вдруг вызывает завал скрипта. Этот флажок может и не использоваться, и в 99% неиспользуется, если ты пишешь скрипт с желанием сделать совместимо.
На джаве легко написать код, который не запустится в 1.8
или не запустится в макос.
Что значит "компилироваться в баш"? Если мне нужно сделать чекалку подключений к монго в джаве, то я могу написать библиотеку на джава именно с нужной версией джава драйвера, и из баша запускать ее с разными коннекшенами. И это будет проще и универсальнее, чем писать на джава все целиком.
Или вы про использование latest в докерфайле?
Или можете привести адекватный пример технического решения проблемы путем замена на более современный скриптовый язык?
Другими словами, вы делаете это вручную, а не используете "более современный язык программирования", о чем и идет речь.
В этом и проблема - все приведенные примеры для пояснения ваших слов на деле выясняются проблемами либо организации, либо оркестрации, и ни один из примеров не решается тем, что вместо баша универсально используется какой-то один другой, более высокоуровневый язык.
подавляющее количество софта при обновлении новых зависимостей не требует.
gnu tools - популярные утилиты.
Баш тоже может использовать библиотеку, написанную на том же языке.
Ну значит вы не понимаете, что баш это не оркестратор. Можно запускать не вручную, а через jenkins, можно использовать ansible/chef/puppet и другие вещи.
Зачем тащить баш именно туда, где уже есть популярные инструменты, которые НЕ являются другими "более современными" языками программирования, а именно инструментами оркестрации???
То есть автоматический апдейт вообще без вмешательства - невозможен, ибо это в первую очередь организационный момент. Про это я и говорил.
Автоматические секьюрити чеки всегда работают на отлично?
Что вы делаете - обновляете руками эту библиотеку в фреймворке, или обновляете весь фреймворк?
А если нет версии этой библиотеки без уязвимости (по словам вашего секьюрити чека), как вы обходите завалившийся чек?
И самое интересное, как это у вас все выполняется полностью автоматически?
Я уверен что регулярно приходится что-то делать руками.
Обычно апгрейды самой базы не требуют никаких дополнительных зависимостей. Все зависимости которые нужны - они нужны для работы самой базы и уже установлены. А вот ставить дополнения и зависимости для "скрипта, который запустит обновлялку" - imho перебор.
Все нужные для работы баша бинарники
То есть фронт и бек у вас всегда один микросервис? И написан на одном фреймворке?
Я не понимаю. Почему для вас баш - это обновление руками?
плохую базу...
Зачастую смена версии фреймворка может потребовать неслабых изменений в коде.
У вас очень, очень, очень простой проект.
Вдобавок вероятно нет аудита и возможность ставить что хочется из инета напрямую.
Который требует компиляции и джава машины для запуска? Ладно еще для автотестов с метриками и так далее, но для базовых простых задач? или того же апгрейда базы данных? ... печально
А если у вас 5 микросервисов, у вас будет 5 мест или одно?
Непонятно что такое за разные места и в чем заключается сложность. Я редко встречал проекты, написанные один в один - как минимум бэк и фронт зачастую разные фреймворки, а то и разные языки программирования, вот уже два места вместо одного. И в чем собственно проблема?
Фиксы для базы, которые могут вызвать несовместимость данных
При этом автоматизировать апгрейд на том же баше - да нет никаких проблем. В этой штуке автоматизация сложна в первую очередь на организационном уровне, а именно - когда делать апгрейд, сколько времени он займет (потребуется ли конвертация самих данных), будет ли даунтайм приложения, если все пойдет не так, сколько времени займет откат назад, и соответственно согласование этих этапов.
Вот вы пишете на фреймворке, а к нему выходят те же обновления уязвимости. Как вы его обновляете каждый месяц? Или фреймворк вы так часто не обновляете, и почему-то считаете что уязвимости в базе важны, а в фреймворке нет?
Автоматические тесты не имеют отношения к конкретному языку программирования.
Каждый уважающий себя язык программирования имеет свои библиотеки и инструменты для юнит тестов и автотестов, поэтому тут не должно быть некоего универсального языка.
Это должно решаться средствами того языка, на котором пишется проект.
как девопс
Я это решаю в первую очередь CI/CD инструментом, в котором может использоваться и простые bash скрипты и сложные технические решения вроде GRP в оракле или kubernetes.
Вот каким именно нормальным ЯЗЫКОМ вы это решаете
А в чем проблема, если каждый инструмент будет лезть в github своим методом?
Апгрейд версии?
База в кластере, апгрейдим по очереди ноды, соблюдая инструкции совместимости и все.
Значит у вас нет потребности в стабильности крупной базы, если self-hosted достаточна.
Опять таки, в большом проекте апгрейдиться на каждую минорную версию совершенно неподходящее решение.
Совпадать опять таки должна не всегда, httpd редко вызывает несовместимость, это же не php
Ваша проблема, что вы кидаетесь словами подразумевая какой-то свой локализированный случай, но при этом пытаетесь сказать что ваш опыт в конкретном проекте с конкретной инфраструктурой обязательно должен подойти всем.
огромный оверинженеринг для вещей вроде копирования файла
Вам самому не смешно от этой чуши?
Баш тоже легко тестируется - +x и все
Непонятно что такое шарить код между проектом и скриптом автоматизации - скрипты на баш это просто код.
Но в продакшене, база должна просто жить, используя доступные ресурсы самостоятельно.
Именно поэтому в нормальной ситуации вы не ставите себе в облаке базу, а используете готовое облачное решение.
Зачем обновлять контейнер с httpd, если httpd это практически по дефолту уже установленный в системе сервис, и обновить его можно не косячным скриптом с контейнером, а штатным пакетным менеджером.
Ну вот, можете посмотреть на баш-скрипт посложнее: https://github.com/sfkulyk/jks-manager/wiki