Введение

Проблемы, которые перед нами встают, когда мы работаем с классической развёрткой приложения:

  • загрузка на FTP требует дополнительного времени и сил для обновления (сейчас могут связать подгрузку из гита к серверу)
  • конфликтуют версии зависимостей между тем, что использует приложение и тем, что располагается на сервере
  • проблемы работы на разных устройствах (на linux одной версии запускается, а на другой уже нет)
  • если мы запускаем несколько приложений на одном устройстве, то мы не можем никак гарантировать того, что одно приложение не будет мешать работе другого - отсутствие изоляции
  • из вышеописанного пункта идёт ограничение масштабирования

Преимущества Docker:

  • Позволяет полностью изолировать приложение в виртуальной машине - изолировать сеть, файловое пространство
  • очень просто и быстро можно откатить приложение, если на нём произошла ошибка - мы можем просто откатить image до стабильной версии и приложение будет опять доступно пользователям
  • очень легко можно масштабировать приложение на большое количество кластеров, которые не будет конфликтовать портами
  • очень легко доставлять приложение на продакшен благодаря тому, что мы просто собираем приложение, пакуем его в образ, выгружаем на сервер и запускаем (нам не нужно развёртывать приложение на удалённом сервере и переустанавливать зависимости)
  • удобная работа с сетью
    • отсутствие конфликтов между портами
    • объединение работы разных машин, которые находятся в разных местах, создавая кластер
    • обращение к приложению не по API, а через Service Discovery, который обращает по его имени, где работает внутри DNS

Частые проблемы администрирования систем:

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

Ansible же позволяет нам автоматизировать все рутинные задачи, которые приходится выполнять при использовании Docker и поднятии их image

Обзор проекта

Из браузера будет приходить запрос, NGINX будет перенаправлять запросы, API написано на NestJS, APP на React, обмен сообщениями по сервисами реализован через RMQ