#c_sharp #angular2 #docker #непрерывная_интеграция #devops
Предыстория. На работе встала задача, наше новое приложение, разработанное на asp.net core и Angular по серьёзному развернуть на серверах компании. Инженеров devops нет и не предвидится, поэтому мне как старшему разработчику придётся осваивать и это направление т.к. команда и так не большая - всего 4 человека. В общем, проблема возникла на стадии планирования. Сейчас в компании используются две независимые гальванически не связанные сети для интернета и для внутренней подсети. Вся инфраструктура (1с и прочее) находятся именно в локальной сети без доступа из вне. Разработчики напротив сидят именно в интернетовском сегменте. Обдумывая инфраструктуру серверов для публикации и тестирования проекта я обдумывал использовать Docker.(Само приложение будет использовать linux в качестве серверной платформы(nginx для angular, postgresql - db, api на .net core). Небольшая выжимка информации. Windows; Visual studio 2017 для разработки API; Visual studio code для Angular; GitLab на внутренем интернет сервере; API написано с использованием ASP.NET Core 2; Клиент на Angular 4; DB - postgresql; Разработчики находятся в отдельной сети от места развертывания приложения; Сервера с приложением будут в локальной сети без доступа к интернету; В качестве базовой платформы будет использоваться ProxMox в локальной сети; Структура получившаяся на мой взгляд. Вот только есть несколько проблем (собственно вопросов): Обновление пакетов NPM(в качестве пакетного менеджера используется Yarn) и NuGet. Добавление новых пакетов. Вроде, как и для nuget и для Yarn можно делать offline зеркала, но как поддерживать в них актуальность? И есть ли возможность обновлять/добавлять пакеты используя Git? м.б. кто-то сталкивался с этим? Есть ли вообще смысл от Гипервизора и виртуальных машин? Или в данной ситуации лучше на одной физической машине развернуть всё? Есть ли плюс поддержки виртуальных машин (в будущем планировалось объединить несколько серверов в кластер и добавить репликацию с резервированием)? Возможно ли что я иду в неправильном направлении и все мои идеи и мысли в корне не верны? Будет ли мне потом мучительно больно при работе со всем этим? :) Где вообще можно почитать об организации такой структуры с нуля? Возможно кто-то подскажет как лучше организовать весь этот процесс CI/CD. Для меня это первый опыт в этом направлении и всё хочется сделать правильно (на сколько это возможно)) ведь мне самому придётся работать со всей этой структурой и как разработчику и как devops.
Ответы
Ответ 1
Обновление пакетов NPM(в качестве пакетного менеджера используется Yarn) и NuGet. Добавление новых пакетов. Вроде, как и для nuget и для Yarn можно делать offline зеркала, но как поддерживать в них актуальность? И есть ли возможность обновлять/добавлять пакеты используя Git? м.б. кто-то сталкивался с этим? Большинство пакетных менеджеров могу скачивать репозитории по ssh / git. yarn install git+ssh://git@github.com// .git. С nuget видимо только репозитории. Пока это не проблема, а будущая возможная оптимизация, по уменьшению трафика и увеличению скорости билдов. Спокойно игнорируем на этом этапе. Есть ли вообще смысл от Гипервизора и виртуальных машин? Или в данной ситуации лучше на одной физической машине развернуть всё? Есть ли плюс поддержки виртуальных машин (в будущем планировалось объединить несколько серверов в кластер и добавить репликацию с резервированием)? Смысл есть - изоляция, но и overhead. Как плюс gold image, в котором уже все готово, нужно только залить весь стек (docker stack deploy). Вполне можно ужиться и на одном, более рисковый путь. Для кластера - docker-swarm + glusterfs / edge fs / etc (для overlay volumes). Возможно ли что я иду в неправильном направлении и все мои идеи и мысли в корне не верны? Будет ли мне потом мучительно больно при работе со всем этим? :) Направление верное. Мучительно ли? - Да, как и всё новое. Мой пример - docker-swarm около месяца (две из них auto letsencrypt + nginx). Просто потому что выбрал инструмент, который знал. После на Traefik сделал за два дня. Автоматизировать, нужно постепенно. Сделать CI. Deploy ручной, но c одной командой. По началу даже так ускорится процесс (Fail Fast). Ни слова не упомянули о конфигурационной менеджменте. Тут Ansible в помощь. По ссылке мой опыт автоматизации деплоя на swarm cluster, а так же структура, которая позволит быстро добавить новые сервисы и задеплоить. Конечно есть нюансы, типа нельзя воспользоваться deploy script, пока нету registry. Или workflow c множеством docker-compose.*.yml файлов. Плюс полная докеризация (как пример) или DevSecOps. Где вообще можно почитать об организации такой структуры с нуля? Подписаться на DevOps рассылки, настроить google alerts по темам (docker, container, etc). Повышать кругозор. Накладывать свои знания на свою реальность. И много экспериментировать.
Комментариев нет:
Отправить комментарий