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.2.0.tar.gz (38.3 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.2.0-py3-none-any.whl (46.4 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for malinakod-0.2.0.tar.gz
Algorithm Hash digest
SHA256 0de9ae574793306ac433624de6673ed0ab94dbf462b66e202054035d9e523219
MD5 7edeef59314c58bc33b6e21207a98fb1
BLAKE2b-256 b4ba017a8ec3370ee6582f1de1e0aa3651f89d3edef1e37b88da4186dbb9de9a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: malinakod-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 46.4 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.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ea7a7f4aa7dc64b0d7c23082dbc10188751a14c147de53365d7abd09da712bc0
MD5 26c8d25b6f228aa07ee999760e7563ff
BLAKE2b-256 ec2606ae4be9a65947c9e09157a6b37ab51565b0c6e688740485a35f18f8498d

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