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.2.tar.gz (38.6 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.2-py3-none-any.whl (46.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: malinakod-0.2.2.tar.gz
  • Upload date:
  • Size: 38.6 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.2.tar.gz
Algorithm Hash digest
SHA256 546d58532329d6201738dae386c24c7b2ff6d172f6b464f2dd4bdb220c401e43
MD5 b7e3bfaa9e6203071ffccc6146aebc59
BLAKE2b-256 103572b6b61aa64073657c4a0e8fc9e6c5a71f5e4c5969e651b7563df10104b8

See more details on using hashes here.

File details

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

File metadata

  • Download URL: malinakod-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 46.8 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 529186cc585a97d00e23c816b7846a4ef515d61cd207a65701bfa9d4abc30dc9
MD5 14b071a1a7073473fe71a0a734e2f242
BLAKE2b-256 e55cb85c6a5a3ed0e08fc4c97bcca1d2f35368f377aee517f62e8120429043ba

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