Разработать CRM для управления LXD

4 000 руб. за проект
04 июля 2022, 17:59 • 4 отклика • 60 просмотров
Необходимо разработать API для CRM для LXD(Virtualizor)/AWS. Проект должен быть модульным с подробной конфигурацией.
В проект должны входить такие модули:
- Управление LXD контейнерами
- Web
- Авторизация
- Система счетов(Управление и оплата)

1. Управление LXD контейнерами.
1.1 Стандартные контейнеры:
В данном модуле должно быть реализована система создания и управления контейнерами LXD на ноде с выдачей доступных из вне IP(Указываются в конфигурации, Примечание: Нужно просто правильный роутер до нод с установленным Virtualizor).
Контейнеры нужно создавать на основе нескольких линеек тарифов с разными характеристиками(Создаются отдельно в конфигурации), которые можно изменять на другие тарифы
Еще нужно реализовать тарификацию бекапов(snapshot`ы), согласно общей конфигурации.
При создании сервера в функции API можно указать дополнительный ключ: скрипт на главной машине(см 1.5) который будет запускаться при создании контейнера

Так-же контейнеры могут иметь несколько состояний:
- Включен(Оплата идет согласно тарифу)
- Остановлен(Оплата не идет)
- Заморожен(Оплата не идет)

Дополнительно, необходимо реализовать функции API по которым можно получить статистику сервера(Нагрузка ЦП, ОЗУ, Сколько дискового пространства занято, Потраченные деньги на этом контейнере)

1.2 Elastic контейнеры:
Все тоже самое что и в 1.1, только добавляется система "расширения" тарифов в зависимости от их нагрузки к нему добавляются ресурсы. Соответственно добавляется и стоимость к серверу.
Изначально тарифы имеют минимальные характеристики, но могут расширяться до заданного предела(Задается в конфигурации тарифа) или ограничением общей конфигурации ноды

1.3 Подробнее про тарифы:
Есть линейки тарифов, в которые входят тарифы. Линейки тарифы должны быть JSON файлом с подобной структурой:
{
"Тариф 1": {
"Cores": 0.5, # Да, LXD такое умеет, если не получится через прямую конфигурацию CPU то сделайте 1 целое ядро и ограничьте его процессорное время
"RAM": "512MB", # LXD требует указание величины, MB/GB и т д
"Disk": "10GB",
"NetworkInLimit": "100MB" # limits.ingress, Лимит на входящую скорость сети
"NetworkOutLimit": "100MB" # limits.egress, Лимит на исходящую скорость сети
"HourPrice": "0.12" # Цена за час в рублях
},
"Тариф 1": {
"Cores": 1, # Да, LXD такое умеет, если не получится через прямую конфигурацию CPU то сделайте 1 целое ядро и ограничьте его процессорное время
"RAM": "1GB", # LXD требует указание величины, MB/GB и т д
"Disk": "20GB",
"NetworkInLimit": "100MB" # limits.ingress, Лимит на входящую скорость сети
"NetworkOutLimit": "100MB" # limits.egress, Лимит на исходящую скорость сети
"HourPrice": "0.34" # Цена за час в рублях
},
}
1.4 Подробнее про локальные машины.
Задумка архитектуры CRM такова: Есть 1 главный сервер, который руководит другими нодами и устанавливает на них сервера. Сама-же главная машина выступает в роли "маршрутизатора" запросов от своего API до API Virtualizor на нодах.
Если же нода недоступна то необходимо остановить списание с счета клиента чей контейнер оказался на отключенной ноде.

2.0 Web панель управления:
Вам предоставляется шаблон(уже готовый), либо вам предстоит скопировать дизайн VCS(VK Cloud Solutions), и встроить туда клиентскую зону и панель администратора.

2.1 Клиентская зона:
В клиентской зоне будет доступна авторизация(3 модуль),
Возможность заказать сервер(1 модуль),
Просмотр счетов и их оплата(4 модуль),
Возможность получить свой API токен для работы с API(Создавать сервера на своем аккаунте, управлять счетами и т д),
Система тикетов
2.2 Панель администратора:
Возможность просматривать все счета и аккаунты,
Отвечать на тикеты,
Выставлять дополнительно счета,
Блокировать контейнеры

3.0 Модуль авторизации:
Этот модуль представляет из себя обычную авторизацию.
3.1 Вход в аккаунт:
Войти в аккаунт можно при помощи почты или GitHub.
3.2 Регистрация:
При регистрации можно использовать почту или GitHub.
При испльзовании почты, ее необходимо будет проверять высылая письмо с кодом.
Если же используется GitHub то подтверждение почты не требуется.
3.3 Управление аккаунтом:
При помощи API нужно сделать функционал управления аккаунтом:
- Блокировка аккаунта
- Смена пароля(Если с регистрация происходила с почты)
- Получение токена аккаунта

4.0 Модуль счетов:
Модуль обарабатывает все счета. В качестве оплаты счетов можно использовать: Lava или Freekassa
При этом у каждого клиента есть свой лицевой счет. Если он меньше 50р, клиент не может заказать услуги, во избежания "абуза".

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

Так-же нужно сделать что-бы из API можно было получить все счета

5.0 В целом об API и его запросах
Каждый запрос к API должен иметь такую структуру:

http://host/модуль/действие/{"post": {}, "secret": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzb21lIjoicGF5bG9hZCJ9.Joh1R2dYzkRvDkqv3sygm5YyK8Gi4ShZqbhK2gxcs2U", "token": 1203492308091238401234829}

Где secret - Hash аргумента post
token - Токен пользователя с которым и будет идти взаимодействие(Если нужен)
post - Аргументы для действия

Пример запроса:
Запрос к модулю LXD:
http://host/container/createNewContainer/{"post": {
"Tariff": "a1.small"
}, "secret": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzb21lIjoicGF5bG9hZCJ9.Joh1R2dYzkRvDkqv3sygm5YyK8Gi4ShZqbhK2gxcs2U", "token": 1203492308091238401234829}

В качестве ЯП`а можно использовать: C#/Python. Набор инструментов под эти языки любой