Skip to main content

MalinaKod Deploy System — клиентский TUI оркестратор с GitHub-синхронизацией

Project description

MalinaKod Deploy System v0.2

Система развёртывания и управления сервисами клиентов студии MalinaKod. Полностью menu-driven TUI, без CLI-команд. GitHub-репо Medenchi/Malinacode-releases используется как контрол-плейн.

Архитектура

┌──────────────────┐                                 ┌─────────────────────┐
│  Студия (admin)  │                                 │ Клиент (Windows /   │
│                  │                                 │ Linux / macOS)      │
│ malinakod-admin  │ ─PUT─▶  ┌──────────────────┐   │                     │
│ (TUI с паролем)  │         │ Medenchi/        │   │ malinakod (TUI)     │
│                  │  GET ◀─│ Malinacode-      │◀──┐│                     │
│                  │         │ releases (priv)  │   ││ • git-like sync 30с │
│                  │         │ /clients/<id>/   │   ││ • запускает сервисы │
└──────────────────┘         │   manifest.json  │   ││   из manifest.json  │
                             │   files/         │   ││ • выполняет команды │
                             │   commands/      │   │└─────────────────────┘
                             │   output/        │   │
                             │   status.json    │◀──┘ heartbeat
                             └──────────────────┘

Два пакета на PyPI

malinakod — клиентский пакет (ставится у клиента)

pip install malinakod
malinakod

При первом запуске попросит лицензионный ключ (выдаёт студия). Дальше:

  • 📊 Статус (синхронизация, сервисы)
  • 🔄 Принудительная синхронизация
  • 📋 Логи
  • 🖥️ Информация о машине
  • ⚙️ Настройки

В фоне (пока запущен malinakod):

  • Каждые 30 сек скачивает изменения из clients/<id>/ своей папки в репо
  • Применяет manifest.json — запускает / перезапускает / останавливает сервисы
  • Каждую минуту пишет heartbeat (status.json) обратно в репо
  • Каждые 5 сек проверяет commands/ на новые команды от админа, исполняет, кладёт результат в output/

malinakod-admin — пакет студии (ставится у вас)

pip install malinakod-admin
malinakod-admin

При первом запуске:

  1. Создаёт зашифрованное хранилище (~/.malinakod-admin/vault.json)
  2. Просит мастер-пароль
  3. Просит GitHub Personal Access Token (Fine-grained, права Contents: Read and write на Medenchi/Malinacode-releases)
  4. Просит мастер-секрет для подписи лицензий (или генерирует случайный)

Дальше TUI с меню:

  • 👥 Клиенты (список с маркером "manifest есть/нет")
  • ➕ Создать клиента (автоматически создаёт clients/<id>/ в репо + выдаёт ключ)
  • 📂 Открыть папку клиента в браузере (для drag-and-drop загрузки файлов)
  • 📊 Статус клиента (читает heartbeat)
  • 💻 Послать команду клиенту (записывает в commands/, ждёт ответа в output/)
  • ⚙️ Настройки

Загрузка файлов клиенту

Через веб-интерфейс GitHub (без команд):

  1. В админ-TUI: «Открыть папку клиента в GitHub» → откроется браузер
  2. Перейти в files/
  3. Перетащить файлы в браузер (drag-and-drop) или кнопка Add file → Upload files
  4. GitHub коммитит автоматически
  5. Клиент подхватывает в течение 30 секунд

manifest.json — описание сервисов

Загрузить через GitHub-веб в clients/<id>/manifest.json:

{
  "services": [
    {
      "name": "telegram-bot",
      "run": "python main.py",
      "cwd": "bot",
      "visible": true,
      "port": 8080,
      "env": {"TG_TOKEN": "..."}
    },
    {
      "name": "tg-api",
      "run": "telegram-bot-api.exe --local",
      "cwd": "tg-api",
      "visible": true,
      "port": 8081
    }
  ]
}

cwd — относительно files/ (так что cwd: "bot" указывает на files/bot/). visible: false — сервис скрыт от клиента в TUI.

Команды от админа

В админ-TUI: «Послать команду клиенту» → ввести shell-команду → файл создаётся в clients/<id>/commands/cmd_<ts>.txt → клиент исполняет в течение ~30 сек → результат появится в clients/<id>/output/cmd_<ts>.log → админ TUI прочитает и покажет.

Полезно для:

  • Установки зависимостей: pip install -r files/bot/requirements.txt
  • Сбора инфы: python --version, dir files, tasklist
  • Принудительного рестарта: python -c "import os; os.kill(...)"

Безопасность

  • Хранилище админа шифруется паролем (PBKDF2 + Fernet)
  • Лицензионные ключи подписаны HMAC-SHA256
  • GitHub-репо приватный, доступ только по PAT
  • Heartbeat и логи — только в приватном репо

Установка с нуля

Студия

pip install malinakod-admin
malinakod-admin

Следуйте инструкциям первого запуска. После настройки — создавайте клиентов из меню.

Клиент

pip install malinakod
malinakod

Введите ключ который выдала студия. Готово.

Связанные репозитории

  • Medenchi/Malinacode-Deploy-system — этот репо (исходники)
  • Medenchi/Malinacode-releases — приватный репо для контрол-плейна (создаётся вручную)

Версия

  • malinakod 0.2.0 (клиент)
  • malinakod-admin 0.1.0 (админка)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

malinakod-0.3.2.tar.gz (39.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

malinakod-0.3.2-py3-none-any.whl (47.5 kB view details)

Uploaded Python 3

File details

Details for the file malinakod-0.3.2.tar.gz.

File metadata

  • Download URL: malinakod-0.3.2.tar.gz
  • Upload date:
  • Size: 39.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.8

File hashes

Hashes for malinakod-0.3.2.tar.gz
Algorithm Hash digest
SHA256 93bcf0c673f8842be35fc1ed51f88ca8dc8a6416c57b694c0fcca7d2383a5324
MD5 9336304886b8d83137c42377a3ba5b61
BLAKE2b-256 3e430c9dde9a427a382bc51baf07f7d12e6cfe028c7aa6bb409706870375275e

See more details on using hashes here.

File details

Details for the file malinakod-0.3.2-py3-none-any.whl.

File metadata

  • Download URL: malinakod-0.3.2-py3-none-any.whl
  • Upload date:
  • Size: 47.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.8

File hashes

Hashes for malinakod-0.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 e6b3c25642cee8e85f4ecb0e302b2d4732e2bf8165e38bed750cdfc2f3c9d4f8
MD5 ab51efaec3a8c859b59e095342914dc5
BLAKE2b-256 2c7df59ac80a0284a819dcd40764bc9e90899313d28042523f448c4c573a31e9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page