Морфлинг
================

## Введение
Морфлинг — это система развёртывания, разработанная на основе Spring Boot 1.5. Она проста в использовании и не требует сложных зависимостей: для работы достаточно MySQL. Система подходит для развёртывания и управления операциями на машинах с масштабом до ста единиц.

### Обзор фреймворка
- Основной фреймворк: Spring Boot.
- Контроль доступа: Spring Security.
- ORM-фреймворк: Spring Data JPA.
- Отображение журналов операций: WebSocket.
- Разделение между фронтендом и бэкендом: AngularJS + Bootstrap.

### Особые указания

Я понимаю, что система развёртывания должна быть основана на определённом стандарте, чтобы обеспечить унифицированное управление развёртыванием. Это похоже на использование SDK. Поэтому систему развёртывания сложно адаптировать «из коробки». Кроме того, в морфлинге есть множество настраиваемых функций (управление включением и выключением NGX, управление включением и выключением регистрационного центра, проверка работоспособности, обзор информации), и реализация этих функций основана на соглашениях. Например, для проверки работоспособности мы договорились, что все конечные точки мониторинга приложений находятся в контексте _monitor. Для включения и выключения NGX мы используем самописный etcd. Центры конфигурации для бизнес-сценариев мы реализуем с помощью Apollo.

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

Цель открытого исходного кода — помочь тем, кто нуждается в такой системе, или использовать её для улучшения своих методов развёртывания. Предоставить общее направление или уже готовый код, а затем адаптировать неподходящие части к своим бизнес-процессам, чтобы сэкономить больше времени и заняться более значимыми делами.

Если у вас есть вопросы, вы можете связаться со мной через QQ.

### Функциональный обзор

#### Развёртывание системы

>* Многоуровневая конфигурация позволяет пользователям с разными ролями получать доступ к разным средам и меню. Различные среды позволяют настраивать различные конфигурации, удовлетворяя основные потребности разработки и развёртывания в обычных компаниях.
>* Система разделена на серверную часть и клиентскую часть, и клиенты устанавливаются на каждом сервере. Во время развёртывания сервер уведомляет машины, которые необходимо развернуть, и клиент получает пакет установки от сервера для удалённого развёртывания.
>* Создание приложений делится на шлюзовые приложения и сервисные приложения. Способ развёртывания зарезервирован для Docker (ожидает реализации). Приложение + экземпляр клиента = экземпляр приложения, который может быть свободно назначен пользователю.
>* Регистрация и отключение центра (в настоящее время реализована только шлюзовая версия, основанная на самописном openresty + lua + etcd, рекомендуется использовать upsync от NetEase. Регистрационные центры, такие как Zookeeper и Consul, ожидают реализации).

#### Управление кешем

>* На основе spring-boot-starter вводится компонент управления кешем (на основе аннотаций), который предоставляет внешние службы для централизованного и унифицированного управления всеми кешами.

#### Бизнес-сценарий деградации

>* На основе центра конфигурации (Apollo) вводится компонент spring-boot-starter-degrade, который объявляет методы, требующие деградации, и предоставляет внешние услуги для централизованного и унифицированного управления методами деградации и связанными конфигурационными ключами.

### Быстрая установка
>* Создайте базу данных с именем morphling и импортируйте scripts/morphling.sql.
>* Запустите mvn clean package -DskipTests=true -Pproduct в корневом каталоге, чтобы получить пакеты установки morphling-agent.tar.gz и morphling-server.tar.gz.
>* Распакуйте пакет установки server.gz на сервере и запустите server.sh start.
>* Откройте http://ip:11110 (если не добавить параметр -P, порт будет 80, что удобно для локальной отладки). По умолчанию учётная запись администратора — admin, пароль — 000000.

### Советы

- Пакет установки агента по умолчанию должен находиться в каталоге /app/data/morphling-server/morphling-agent.tar.gz сервера. Эта конфигурация находится в DeployConst. Вы можете изменить её самостоятельно.
- Клиент по умолчанию использует пользователя развёртывания (ограничение переднего плана) в качестве пользователя. Вам нужно настроить его. Вы можете изменить client.js > ClientAddController и изменить развёртывание на нужного пользователя.


### Принцип реализации

>* Роль: текущая роль базы данных — несколько встроенных ролей. Поскольку изменения в этой роли происходят редко, нет необходимости реализовывать управление ролью в фоновом режиме. Аналогично, отношения между ролью, меню и средой в нашем сценарии использования также вряд ли изменятся, поэтому в настоящее время мы вручную изменяем базу данных, чтобы связать роль, меню и среду.
>* Новый клиент: сервер отправляет пакет установки агента на соответствующую машину через SSH, и этот клиент одновременно становится машиной развёртывания (то есть он может реализовать приложение, связанное с этой машиной, как экземпляр этого приложения).
>* Новое приложение: данные таблицы приложений представляют собой только базовую информацию о развёртывании приложения, без конкретной информации о местоположении цели. Необходимо добавить экземпляр, чтобы связать существующий клиент, чтобы создать экземпляр.


### Пример
#### Клиентский менеджмент
![Клиентский менеджмент](https://gitee.com/lianqu1990/morphling/raw/master/doc/images/1.png)
![Клиентский менеджмент](https://gitee.com/lianqu1990/morphling/raw/master/doc/images/2.png)
#### Пользовательский менеджмент
![Пользовательский менеджмент](https://gitee.com/lianqu1990/morphling/raw/master/doc/images/3.png)
![Пользовательский менеджмент](https://gitee.com/lianqu1990/morphling/raw/master/doc/images/4.png)
#### Конфигурация приложения
![Конфигурация приложения](https://gitee.com/lianqu1990/morphling/raw/master/doc/images/5.png)
#### Публикация приложения
![Публикация приложения](https://gitee.com/lianqu1990/morphling/raw/master/doc/images/6.png)
![Публикация приложения](https://gitee.com/lianqu1990/morphling/raw/master/doc/images/7.png)
![Публикация приложения](https://gitee.com/lianqu1990/morphling/raw/master/doc/images/8.png)
![Публикация приложения](https://gitee.com/lianqu1990/morphling/raw/master/doc/images/9.png)

#### Деградация бизнес-сценария
![Деградация бизнес-сценария](https://gitee.com/lianqu1990/morphling/raw/master/doc/images/10.png)

#### Управление кэшем
![Управление кэшем](https://gitee.com/lianqu1990/morphling/raw/master/doc/images/11.png)

#### Мониторинг SpringBoot
![Мониторинг SpringBoot](https://gitee.com/lianqu1990/morphling/raw/master/doc/images/12.png)