v1.5.0
Dvestezar Terminal Manager je nástroj pro správu systémů založených na Debianu, jako jsou Ubuntu, Raspbian, OrangePi a další distribuce. Poskytuje jednoduché menu pro ovládání různých funkcí systému přímo z terminálu.
Tento nástroj je navržen jako modulární framework, který lze snadno rozšiřovat o nové podaplikace a funkce podle potřeb.
Aktuální funkce aplikace:
-
User Management:
- Správa uživatelů systému včetně přidávání, mazání a nastavování hesel.
- Generování a správa SSH klíčů s automatickým ukládáním do
authorized_keys
. - Správa přístupu uživatelů k sudo.
-
Node-RED Instance Manager:
- Vytváření, editace, zálohování a mazání instancí Node-RED.
- Správa šablon pro rychlé nasazení nových instancí.
- Automatická kontrola a konfigurace služeb pro každou instanci.
- Novinky v 1.5.0
- Přidáno menu pro správu instancí a záloh
- Možnost obnovení instance ze zálohy se 3násobným potvrzením
- Kontrola integrity záloh pomocí
7z t
- Force update umožněn i přes major verzi
- Obnova automaticky zastaví a znovu spustí službu po úspěchu
Aplikace je připravena na rozšiřování o další moduly a podaplikace. Pokud máš nápad na novou funkcionalitu nebo chceš přidat podporu pro specifickou službu, jsi vítán!
Každý nový modul může být jednoduše přidán jako nová podaplikace do adresáře libs/app/menus/<app_dir>
. Tato struktura umožňuje snadnou integraci do hlavního menu a přehlednou správu kódu.
Hlavní menu se vytváří tak, že projde libs/app/menus/<app_dir>
kde app_dir
je adresář aplikace, který musí obsahovat`:
menu.py
tento soubor musí obsahovat:- property
_MENU_NAME_
které obsahuje text zobrazený pro volbu v hlavním neu - class
menu
které bude z hlavního menu voláno jako výchozí menu aplikace
- property
Node-Red Instance Control je nástroj pro správu instancí Node-RED, který umožňuje konfigurovat a spravovat jednotlivé instance na serveru. Aplikace poskytuje uživatelsky přívětivé menu přímo v terminálu, které vám umožní snadno provádět různé úkony, jako je vytváření, úprava, zálohování a mazání instancí Node-RED. Tento nástroj je určen zejména pro efektivní správu instancí v multi-uživatelském prostředí, kde každý uživatel může mít svou vlastní instanci Node-RED.
-
Nastavení nových instancí a jejich úprava:
- Možnost vytvoření nové instance Node-RED pro konkrétního systémového uživatele.
- Instalace z čistého Node-Red z aktuální repo verze
- Instalace ze 7z archivu, tyto archivy musí být v adresáři
/var/node-red-install-instances
, pokud jsou nalezené 7z soubory tak jsou nabídnuty při nové instalaci, obsah archivu viz níže
- Úprava stávajících instancí, včetně změny názvu, hesla, portu nebo typu instalace (např. čistá instalace nebo instalace z archivu).
- Nastavení služby na čtení nebo plný přístup.
- Možnost vytvoření nové instance Node-RED pro konkrétního systémového uživatele.
-
Správa služeb Node-RED:
- Spuštění, zastavení a zakázání služby Node-RED.
- Možnost ověřit stav služby pro konkrétního uživatele.
-
Zálohování a obnovení:
- Automatické zálohování všech instancí nebo jednotlivých instancí Node-RED.
- Vytvoření zálohy aktuální konfigurace a uživatelských dat.
-
Šablony služeb:
- Možnost vytvoření šablony služby Node-RED, která slouží jako výchozí pro nové instance.
- Odinstalace či odstranění šablon služby.
-
Správa uživatelů:
- Přidání nového uživatele.
- Nastavení a úprava uživatelského přístupu do Node-RED Dashboard-u.
- Možnost nastavit uživatele na režim pouze pro čtení nebo plný přístup.
-
HTTPS:
- Možnost nastavení HTTPS certifikátu pro zabezpečený přístup k instanci Node-RED
Nová instance automaticky v home vytváří adresář ~/logs/node-red
pro možnost logování do souborů pomocí node-red-contrib-flogger
nebo jiných knihoven.
Jak v Node-Red získat home adresář uživatele?:
Jelikož node red neparsuje ~
tak lze jednoduše použít env.get('HOME')
, toto získá home adresář uživatele, tzn env proměnnou systému HOME
. Vrací stejnou hodnotu jako v terminálu příkaz.
echo $HOME
V node-red uzlích Functions
nejde použít require
Jak bylo zmíněno, zipy 7z musí být v /var/node-red-install-instances
, tyto jsou potom nabídnuty při nové instalaci. Podporovány jsou jen přípony 7z
. Zabalené musí být viz níže, jinak není zaručena funkčnost nebo dokonce poškození dat instancí nebo dokonce systému.
Archiv pro instance lze vytvořit tak že zazálohujeme nějakou instanci a tento zip použijeme takto:
-
root adresář zipu přejmenujeme ze jména uživatele, ze kterého byla záloha udělána na
defaultNodeInstance
-
promažeme obsah tohoto adresáře, ponecháme jen adresář
.node-red
anode_instance
, pokud jsou nějaké i skryté soubory v tomto root-u tak je smažeme
Základní vzhled tří úrovní, samozřejmě bude mít více úrovní. Jde hlavně o první a druhou úroveň, tj rootdefaultNodeInstance
a jeho podadresáře.node-red
anode_instance
.defaultNodeInstance | +---.node-red | | soubory.* | | | +---adresáře | +---např | +---lib | | \---flows | +---node_modules | \---projects \---node_instance | package-lock.json | package.json | \---node_modules
Vychází z BACKUP_DIRECTORY
plus:
kde BACKUP_DIRECTORY
je pevně nastavebo na /var/backups
- Pokud je záloha na jméno tak do cesty přidá uživatelské jméno
<backupDir>/node_red_instances_backups/users/<userName>
- Pokud se jedná o fullBackup tak se zálohuje celý home adresář do
<backupDir>/node_red_instances_backups/fullBackup
Pokud chceme mít složku jinde tak vytvoříme link do /var/backups
který bude mít název node_red_instances_backups
a bude odkazovat na jinou složku.
- Hlavní menu nabízí přehled o konfiguraci, jako je URL serveru, adresáře pro zálohy, dočasné adresáře a výchozí instance. Můžete zde provést akce, jako je vytváření nebo úprava instancí, zálohování, nebo vytvoření šablony.
- Editační menu umožňuje detailně konfigurovat konkrétní instance – měnit porty, názvy, přístupy a další parametry.
- Uživatelské menu poskytuje možnosti pro přidávání uživatelů, nastavení přístupů, a správu jednotlivých uživatelských profilů.
- Fresh: Čistá instalace z repozitáře, vhodná pro nové uživatele nebo vytvoření zcela nové instance.
- 7z: Instalace z existujícího archivu, který vybereme. Toto umožňuje rychlé obnovení nebo klonování předchozí konfigurace. Tyto archivy musí být v adresáři
/var/node-red-install-instances
a musí mít strukturu viz výše.
- Bezpečnost a přístup: Uživatelé mohou být nastaveni s úrovněmi oprávnění "full" a "pouze pro čtení", což je vhodné pro auditní nebo kontrolní účely.
Tento nástroj zjednodušuje správu více instancí Node-RED v jednom prostředí a nabízí flexibilitu při správě jednotlivých uživatelů, což zajišťuje efektivitu a konzistenci v provozu.
Pro instanci lze vytvořit HTTPS certifikát aby bylo možné přistupovat k instanci pomocí HTTPS.
Manager spravuje certifikáty ssh SSH pro připojení k terminálu, ale lze využít jakkoliv.
Je určeno hlavně pro správce serveru. Např správa instancí např node-red, kde vytvoříme instanci a na ni pak vytvoříme SSH klíč pro uživatele, který se může připojit pro debug node-red
Spravuje přímo soubor uživatelů authorized_keys
- Spravovat uživatele systému:
- vytvořit uživatele systému
- nastavit heslo uživatele systému
- smazat uživatele systému, nejdřív je ale provedena záloha home adresáře uživatele a po úspěchu je uživatel kompletně smazán ze systému vč. dat home adresáře.
- spravovat sudo práva uživatele
- spravovat dialout skupinu uživatele
- v home uživatele vytvoří v
~/.ssh/sshManager
kde ukládá generované klíče - generované klíče může:
- generovat ssh klíč pro uživatele
- přidat veřejný klíč do
authorized_keys
- odstranit veřejný klíč z
authorized_keys
- zobrazit privátní klíč pro předání uživateli
Spouštíme pomocí run.sh
- spouští aplikaci, tento soubor ale neexistuje dokud se neprovede setup.sh
Hlavní instalační soubor setup.py
který se spouští při prvním spuštění. Instaluje potřebné programy, knihovny, submoduly a další související věci vč. node.js, zip plus python knihovny potřebné pro aplikaci - zpracuje requirements.txt
.
!!! Tento soubor je potřeba spustit jako root nebo se sudo právy.
- !!! POZOR (pokud není detekován py3.10) přidává repo pro python 3.10 do apt, takže pokud NECHCEME použít toto repo, tak si vše musíme obstarat a zajistit ručně
- Používá repo
dd-apt-repository -y ppa:deadsnakes/ppa
pro python 3.10 - nainstaluje python 3.10, pip, venv a dev knihovny.
- Používá repo
- !!! Pozor (pokud není detekováno) node se instaluje globálně do systému z repo ve verzi 22.x - pokud nechceme tak se musíme postarat o instalaci node ručně aby v době spuštění setup.sh byl node dostupný. !!!
- Tento soubor vytváří virtual env pro python 3.10
venv310
a do něj instaluje potřebné knihovny podlerequirements.txt
Nakonec pokud neexistuje tak vytvoří symlink pro sys_apps.sh
do bin
adresáře, aby bylo možné spouštět aplikaci z terminálu bez nutnosti přepínat se do adresáře aplikace.
Poslední 'neméně' hlavním souborem je update_from_git.sh
který aktualizuje lokální repo podle aktuálního stavu na GITu. Pokud tu budeme mít nějaké změny tak budou anulovány.
Script kontroluje jestli je repo v módu readonly, pokud není tak se nespustí a zobrazí hlášení o nutnosti přepnutí do readonly.
Toto lze provést příkazem z terminálu
git config remote.origin.pushurl no_push
Tento soubor se generuje a updatuje pokaždé když se navštíví menu se seznamem instancí, je to json seznam portů které jsou použity pro instance node-red. Lze ho použít kdekoliv je potřeba, např i pro zobrazení pomocí PHP na stránku pro názvy instancí, jejich porty a url
Příklad:
{
"instances": [
[
55551,
"node_instance_1"
],
[
55552,
"node_instance_2"
],
// ...
],
"url": "http://moje.domena.url"
}
Kopie tohoto souboru lze nastavit v config proměnné INSTANCE_INFO
, pokud do ní nastavíme adresář, tak se bude tento soubor kopírovat do tohoto adresáře. Např pokud chceme na web umístit info o instancích tak nastavíme kopii do web adresáře, ve kterém např pomocí PHP zobrazíme seznam instancí a jejich porty.
Co je potřeba ke spuštění ? Hlavně config.ini který musíme vytvořit ručně, jinak viz dále ...
config.ini
je potřeba vytvořit před prvním spuštěním podlecfg.py
v root aplikace, tzn kde je!run.py
Příklad:[globals] LANGUAGE = "cs-CZ" SERVER_URL = "moje.domena.real" DEFAULT_JS_CONFIG = "muj-node-config.default.js" TEMP_DIRECTORY = "/tmp/default_node" BACKUP_DIRECTORY = "/var/backups" MIN_WIDTH = 60 INSTANCE_INFO = "/var" # kam se budou ukládat informace o instancích, pro vypnutí nastavíme "" nebo null # Pokud vynecháme bude ssl vypnuto, viz default hodnoty v cfg.py # vynecháme zakomentováním nebo nastavením na null None # httpsKey = '/root/.acme.sh/moje.domena.real/moje.domena.real.key' # httpsCert = '/root/.acme.sh/moje.domena.real/fullchain.cer'
/home/defaultNodeInstance.7z
výchozí zabalený adresář s instancí, (není povinné)
Tento soubor může obsahovat kompletní instanci node-red v dané verzi, nainstalovanými moduly a základní flow
Uvnitř musí být jako root dir adresář se jménemdefaultNodeInstance
a v něm je vpodstatě zabalený (jen potřebný obsah) home uživatelského adresáře
Testováno na Ubuntu 20.04 LTS (s python 3.8) a Ubuntu 22.04 LTS (s python 3.10)
Testováno na python 3.10 - virtual env
- python3.10-venv
- python3.10-pip
- python3.10-dev
Postará se o to setup.sh
, ale pokud to chceme ručně tak ...
Lze instalovat pomocí souboru 'requirements.txt' pomocí příkazu
pip install -r requirements.txt
!!! Pozor, musíme být ve virtual env
Postará se o to setup.sh
, ale pokud to chceme ručně tak ...
apt install p7zip-full
Postará se o to setup.sh
, ale pokud to chceme ručně tak ...
Pro bezproblémovou funkčnost musí být node.js instalován globálně, pro aktuální LTS 22 je to takto:
Provádíme pod sudo nebo se sudo příkazem
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt-get install -y nodejs
Postará se o to setup.sh
, ale pokud to chceme ručně tak ...
Tato app používá submodul 'JBLibs-python', takže po naklonování tohoto repo je potřeba:
git submodule update --init --recursive
Nebo přímé přidání, pokud by nic se submoduly nefungovalo
git submodule add -b <branch> https://github.com/dvestezarzlkl/JBLibs-python.git libs/JBLibs
Hlavní soubor kterým se app spouští viz výše
Tento soubor vytváří soubor setup.sh
na konci běhu.
Postará se o to setup.sh
, ale pokud to chceme ručně tak ...
Soubor kterým lze spustit run.sh
z linku.
Př. globální spuštění bez modifikace PATH:
Vytvoříme link do /usr/local/bin
a v systému pak stačí napsat kdekoliv sys_app.sh
nebo jiný název podle názvu symlinku.
např:
ln -s /cesta/k/tvemu_skriptu/sys_apps.sh /usr/local/bin/sys_apps
Toto vytvoří symlink pro příkaz sys_apps
který lze potom odkudkoliv spustit příkazem
sudo sys_apps
Instaluje potřebné programy, knihovny, submoduly a další související věci vč. node.js, zip a knihoven potřebných pro aplikaci. Jak bylo uvedeno výše.
Generuje requirements.txt, knihovny které nejsou standartní součástí pythonu
Soubor:
requirements.txt
obsahuje seznam potřebných knihoven, které můžeme doinstalovatpip install -r requirements.txt
pro venv
rq.log
- poslední log i verzí pythonu pro které bylo generováno
utilitku pipreqs
Pokud máme např čistý ubuntu server kde je python3, a chceme nainstalovat globálně, kde nefunguje pip kvůli externí správě (apt), tak budeme potřebovat pipx
Ve virtual env je to jednoduché, stačí mít nainstalovaný pip a pipreqs Pokud nemáme nainstalovaný pip tak je potřeba ho nainstalovat, např. na ubuntu serveru:
apt install python3-pip
Pokud nemáme nainstalovaný pipreqs tak je potřeba ho nainstalovat, např. na ubuntu serveru:
pipx install pipreqs
# čteme info co zobrazí a popřípadě, pokud potřebujeme tak nainstalujeme
pipx ensurepath
PO TOMTO KROKU je nutné restartovat terminál !!!!
Pokud chceme instalovat v prostředí venv tak postup je viz. venv prostředí.
Script pro update, pokud repo používáme jako aplikace a nebudeme nic vyvíjet.
!!! Script má základní ochranu na test přepnutí lokálního repo do readonly, pokud není provedeno, script se nespustí !!!
!!! Script může zrušit nebo přepsat lokální změny v případě ručních změn !!!
Aktualizuje lokální repo podle aktuálního stavu na GITu. Pokud tu budeme mít nějaké změny tak budou anulovány.
Lokální repo přepneme do readonly pomocí příkazu z terminálu
git config remote.origin.pushurl no_push
Zabalí tento adresář do ZIP, jen se soubory a adresáře, které jsou potřeba a výsledný soubor uloží do podadresáře release
.
Adresář release
nebude součástí ZIP a je v gitignore
.
Tyto nebudou součástí release
a jsou v gitignore
Spustitelné soubory musí mít samozřejmě práva pro spuštění
Např. pro základní skripty
chmod +x 'setup.sh' 'sys_apps.sh' 'run.sh' 'update_from_git.sh'
Pokud jsme prošli instalací a máme nainstalovaný python3.10 a venv, tak je pro terminál potřeba aktivovat venv
source venv310/bin/activate
Zrušení venv je jednouše
deactivate