#### Общая информация Alfa Cloud — серверный API, который предоставляет доступ к управлению контейнерами и конфигурацией облаков Alfa с поддержкой нескольких облачных серверов. Данный документ нужен для разработки полноценного фронтенда управления контейнерами. Все запросы должны производиться только из админки Mol. Метод авторизации каждого запроса - Basic Auth (обычный логин и пароль). Учётные данные можно менять регулярно, для этого существует специальный запрос. Учётные данные НЕ синхронизированы с основными учётными данными MOL (и для безопасности и отсутствия необходимости синхронизации всех юзеров. Нужен только главный админ). В данном API в тестовом режиме будет использоваться спецификация JSON:API для унификации серверных ответов. #### Точки подключения: GET: ``` /servers — получить список активных серверов (для разворачивания новых клиентов) /servers/{server_id} — получить подробную информацию о сервере (TODO: с параметрами мониторинга и нагрузкой в реальном времени) /clients — получить список контейнеров клиентов со всеми подробностями (поддерживается пагинация). С флагом доступностью контейнера. На фронте можно сделать прямой переход на облако клиента. /clients/{id}/demo_enable - применение таблиц демо-данных (demo seeder) /clients/{id}/demo_disable - удаление демо-данных (demo inverse seeder) /clients/{id}/maintain_enable - включить страницу "Техническое обслуживание" у клиента /clients/{id}/maintain_disable - отключить страницу "Техническое обслуживание" /clients/{id}/send_success - отправить письмо клиенту с успешной регистрацией облака с логином и паролем /clients/{id}/send_expire - отправить письмо клиенту о скором истечении использования (можно/нужно автоматизировать) /clients/{id}/expire_dates_history - история изменения продлений дат пользователя ``` POST: ``` /servers/ — создать сервер в БД (при наличии id - обновление) /clients/ — создать клиента (при наличии id - обновление данных) при создании - после проверки сразу вернётся id. во время создания нужно таймером опрашивать /clients/{id}/create_log и получать актуальный лог о создании контейнера. За окончание создания отвечает статус "completed" => "ok | error". При обновлении не нужно отправлять пароль, а задавать его командой ниже /clients/{id}/owner_password — задать новый пароль администратора лаборатории /clients/{id}/expire_date - обновление крайней даты использования системы TODO: перенос данных клиента с одного сервера на другой TODO: /cloud_admin_password - задать пароль для подключения к API ``` DELETE ``` /clients/{id} — редкая функция — запуск очистки пользовательских конфигов с серверов /servers/{server_id} – не реализовано, да и пока что не надо. Тут нужно просто удаление информации о сервере из БД. ``` Команды менеджмента контейнеров и деплоя (GET) ``` /servers/{server_id}/images - список доступных образов на сервере (для переключения или создания пользователя) /servers/{server_id}/reboot_server - перезапуск сервера /clients/{id}/reboot - попытка перезапуска контейнера пользователя /server/{server_id}/deploy - пересоздание ВСЕХ конфигов и перезапуск серверного кластера (действие, применяющееся после билда и/или смены версий). После этого необходимо сделать migrate_all /clients/{id}/create_log - Лог создания контейнера /containers/{server_id}/build_dev - получение кода из ветки dev, сборка фронта и нового образа /containers/{server_id}/build_prod - получение кода из ветки master, сборка нового образа /containers/prune - удалить неиспользуемые версии образов (images prune -a) /clients/{id}/switch/{image_name} - переключить клиента на образ другой версии /server/{server_id}/switch_all - переключить всех клиентов на образ другой версии /clients/{id}/migrate - запустить обновление БД клиента (artisan migrate) /server/{server_id}/migrate_all - запустить обновление БД у всех клиентов на сервере /clients/{id}/move_to/{server_id} - переместить клиента на другой сервер /clients/{id}/copy_to/{server_id} - установить окружение клиента и БД (только на stage-сервер) ``` Идеи: - Получать количество пользователей в каждой системе для общего списка клиентов - При билде образов автоматически вычислять версию и приписывать -dev или -master - Также версию образа можно тащить пользователям в интерфейс ### TODO: Добавить таблицу с настройками облака в каждую пользовательскую таблицу! - Проверка на уровне системы настройки "Техническое обслуживание" и показ блокирующей страницы - Проверка на крайнюю дату использования и блокировка системы. - Проверка на показ “турбостарта” при запуске - Проверка на вопрос “краткого туториала” Server requirements: git docker+compose nginx mariadb / postgresql certbot www-data authorized key from master API www-data sudo NOPASSWD config (remote cmd exec)