docs: review OCI manager documentation in all seven translations

This commit is contained in:
Jonatan
2026-10-17 15:08:53 +02:00
parent ce1a3de719
commit d15876d940
60 changed files with 15788 additions and 285 deletions
@@ -0,0 +1,404 @@
{
"meta": {
"title": "Aplikácie s viacerými kontajnermi | ProxMenux",
"description": "Ako OCI manager Apps mení aplikáciu s databázou a vyrovnávacou pamäťou na koordinované natívne LXC: plán, súkromná sieť, hook závislostí, overenie a transakčné aktualizácie."
},
"header": {
"title": "Aplikácie s viacerými kontajnermi",
"description": "Aplikácia so svojou databázou, vyrovnávacou pamäťou a ďalšími službami sa stáva niekoľkými koordinovanými LXC, nainštalovanými a aktualizovanými ako jedna.",
"section": "OCI manager Apps"
},
"sections": [
{
"id": "intro",
"blocks": [
{
"calloutInfo": {
"title": "Jedna aplikácia pre užívateľa, niekoľko LXC pre Proxmox VE",
"body": "Definícia viacerých kontajnerov je jedným záznamom v katalógu. Inštalátor vytvorí jeden natívny LXC pre každú službu a explicitne spravuje ich závislosti. Immich, Nextcloud, Paperless-ngx a Tandoor sú nainštalované týmto spôsobom."
}
},
{
"mermaid": {
"chartCode": "flowchart LR\n C[\"Docker Compose\"] --> O[\"{{plan}}\"]\n O --> A[\"{{app}}<br/>{{appNet}}\"]\n O --> D[\"{{db}}<br/>{{private}}\"]\n O --> R[\"{{cache}}<br/>{{private}}\"]\n V1[(\"config\")] --> A\n V2[(\"database\")] --> D\n V3[(\"cache\")] --> R\n D --> A\n R --> A",
"labels": {
"plan": "Stack plán",
"app": "Aplikácia LXC",
"appNet": "LAN + súkromné",
"db": "PostgreSQL LXC",
"cache": "Valkey LXC",
"private": "súkromné"
}
}
}
]
},
{
"id": "plan",
"title": "1. Plán ešte pred vytvorením kontajnerov",
"blocks": [
{
"p": "Počas spracovania definície Compose sa nevytvára žiadny LXC. Najprv vznikne úplný plán so všetkými členmi, obrazmi, VMID, sieťami, cestami, tajnými údajmi, poradím a kontrolami stavu. Ak plán nie je konzistentný, inštalácia sa nezačne."
},
{
"table": {
"headers": [
"Prvok plánu",
"Obsah",
"Overenie pred vytvorením čohokoľvek"
],
"rows": [
[
"Členovia",
"Hlavná aplikácia, databáza, vyrovnávacia pamäť, strojové učenie a iné závislosti",
"Jedinečné VMID, známe úlohy a presne jeden hlavný člen"
],
[
"Obrazy",
"Priebežne aktualizovaný odkaz, architektúra a určený digest každej služby",
"Všetky existujú, podporujú architektúru a prejdú kontrolou integrity OCI"
],
[
"Sieť",
"Súkromný most, podsieť, pevná adresa pre každú službu a prístup LAN pre hlavného člena",
"Žiadna zrážka s existujúcimi mostmi alebo podsietami a žiadna opakovaná adresa"
],
[
"Perzistencia",
"Kontajnerové disky, hostiteľské adresáre, majitelia a zálohovanie",
"Žiadne prekrývanie ciest, dostupné úložisko a deklarované oprávnenia"
],
[
"Tajomstvá",
"Heslo databázy, aplikačné kľúče a počiatočné prihlasovacie údaje",
"Generované raz a podané iba členom, ktorí ich používajú"
],
[
"Životný cyklus",
"Poradie spúšťania, poradie zastavovania a kontrola stavu každého člena",
"Hlavná aplikácia sa spúšťa posledná a zastavuje prvá"
]
]
}
}
]
},
{
"id": "create",
"title": "2. Vytváranie jednotlivých členov",
"blocks": [
{
"steps": {
"items": [
{
"title": "Rezervujte každý VMID",
"body": "Súpis Proxmox VE a inštančný register sú kontrolované. Existujúce CT nie je prijaté a zmluva, ktorá stále patrí do inej inštancie, sa opätovne nepoužíva."
},
{
"title": "Pripravte každý obraz",
"body": "Všetky obrazy sú vyriešené, stiahnuté a overené pred vytvorením prvého kontajnera."
},
{
"title": "Vytvoriť každý rootfs",
"body": "Importujú sa oficiálne metadáta OCI a pridá sa identita inštancie ProxMenux a rola člena."
},
{
"title": "Súkromná sieť",
"body": "Vytvorí sa most a podsieť a každý člen dostane pevnú adresu; iba hlavný člen navyše dostane rozhranie LAN."
},
{
"title": "Perzistencia",
"body": "Každá databáza a konfigurácia dostane svoj vlastný disk kontajnera; iba údaje určené na zdieľanie používajú adresáre hostiteľov."
},
{
"title": "Prostredie",
"body": "Zapíšu sa interné koncové body, zdieľané tajné údaje a premenné služieb. Aplikácia pristupuje k svojim závislostiam cez ich vyhradené súkromné adresy."
},
{
"title": "Záznam",
"body": "Každý člen zaznamenáva svoju natívnu konfiguráciu, rootfs zmeny, ktoré aktualizácie musia reprodukovať a jeho vzťah k stohu."
}
]
}
}
]
},
{
"id": "checks",
"title": "3. Spustiť a skontrolovať každý kontajner",
"intro": "Vytvorený LXC ešte neznamená pripravenú službu. Závislosti sa spúšťajú v určenom poradí a každá prejde kontrolou špecifickou pre danú službu.",
"blocks": [
{
"table": {
"headers": [
"Služba",
"Kontrola",
"Čo ukazuje"
],
"rows": [
[
"PostgreSQL",
"<code>pg_isready</code> v CT s očakávaným hostiteľom, používateľom a databázou",
"Server akceptuje spojenia pre nakonfigurovanú databázu"
],
[
"Redis / Valkey",
"<code>redis-cli</code> alebo <code>valkey-cli</code> s príkazom <code>PING</code> na jeho súkromnej adrese",
"Broker počúva a odpovedá"
],
[
"Immich strojové učenie",
"HTTP <code>GET /ping</code>, plus kontrola zvoleného runtime GPU",
"Služba odpovedá a požadovaná akcelerácia neprešla na CPU"
],
[
"Nextcloud",
"<code>GET /status.php</code> s <code>installed=true</code>, <code>maintenance=false</code> a <code>needsDbUpgrade=false</code>",
"Inicializácia ukončená bez ďalšej migrácie"
],
[
"Paperless-ngx / Tandoor",
"HTTP na adrese LAN a skutočnom porte služby",
"Frontend a jeho závislosti poskytujú aplikáciu"
],
[
"Hlavná aplikácia",
"Koncový bod jeho šablóny, napríklad <code>/api/server/ping</code> v Immich",
"Celý zásobník pracuje prostredníctvom aplikácie, ktorá používa závislosti"
]
]
}
},
{
"calloutWarning": {
"title": "Spustený neznamená funkčný",
"body": "Stav spustené len hovorí, že proces LXC existuje. Tam, kde služba ponúka lepšiu kontrolu, sa používa exec alebo HTTP kontrola s časovým limitom. Ak člen zastaví alebo zlyhá jeho kontrola, zásobník nie je deklarovaný ako nainštalovaný."
}
}
]
},
{
"id": "hook",
"title": "4. Hook závislostí",
"blocks": [
{
"p": "Hook sa nastaví iba na hlavnom kontajneri zostavy so závislosťami. Proxmox VE uchováva skript ako snippet a spúšťa ho ako <code>hookscript</code> daného CT. Recept zostavy nie je zapísaný v skripte: nachádza sa v samostatnom súkromnom kontrakte."
},
{
"codeGrid": {
"items": [
{
"title": "Hlavné nastavenie CT",
"code": "hookscript: local:snippets/proxmenux-stack-dependencies.sh"
},
{
"title": "Súkromná zmluva (príklad)",
"code": "/etc/pve/priv/proxmenux-stack-VMID.json\n{\n \"schema\": 1,\n \"stack\": \"immich\",\n \"dependencies\": [\n {\"vmid\": 107, \"label\": \"PostgreSQL\", \"healthcheck\": {...}},\n {\"vmid\": 108, \"label\": \"Valkey\", \"healthcheck\": {...}},\n {\"vmid\": 106, \"label\": \"Machine Learning\", \"healthcheck\": {...}}\n ]\n}"
}
]
}
},
{
"snippet": {
"summary": "Kompletný zdroj proxmenux-stack-dependencies.sh",
"pathCode": "local:snippets/proxmenux-stack-dependencies.sh",
"snippetCode": "stackDependencyHook"
}
},
{
"p": "Skript je rovnaký pre každý zásobník. VMID, názvy, kontrolné typy a timeouty pochádzajú zo súkromného kontraktu <code>/etc/pve/priv/proxmenux-stack-VMID.json</code> každého zásobníka."
},
{
"steps": {
"items": [
{
"title": "Proxmox VE zavolá pre-start",
"body": "Pred spustením hlavného CT sa hook spustí s jeho VMID a fázou životného cyklu."
},
{
"title": "Zámok na zásobník",
"body": "<code>flock</code> na <code>/run/lock/proxmenux-stack-VMID.lock</code> zabraňuje dvom štartovým sekvenciám súčasne."
},
{
"title": "Zmluva je prečítaná a overená",
"body": "Požaduje sa známa schéma, numerické závislosti, etikety, exec, http alebo kontrola chodu a pozitívny timeout."
},
{
"title": "Závislosti v poradí",
"body": "Každý CT musí existovať; zastavený sa spustí, už spustený sa nereštartuje."
},
{
"title": "Čakanie na pripravenosť služby",
"body": "Kontrola beží každé dve sekundy, a CT je tiež potvrdené, že stále beží."
},
{
"title": "Hlavné CT začína",
"body": "Keď je každá závislosť pripravená, pre-start končí a Proxmox VE spustí aplikáciu."
}
]
}
},
{
"calloutInfo": {
"title": "Háčik nezastaví závislosť",
"body": "Fázy post-start, pre-stop a post-stop nič nevykonávajú. Zastavenie hlavného CT ponechá PostgreSQL, Redis, Valkey alebo strojové učenie spustené. Hook určuje poradie spúšťania; nemení viaceré LXC na jeden proces."
}
},
{
"table": {
"headers": [
"Typ",
"Príklad",
"Neskoršie spustenia"
],
"rows": [
[
"Závislý zásobník",
"Immich, Nextcloud, aplikácia s PostgreSQL",
"Hook hlavného CT spustí závislosti a čaká na ich pripravenosť."
],
[
"Súprava aplikácií",
"Súprava Arr",
"Žiadny hlavný člen: každý LXC sleduje svoje vlastné <code>onboot</code>"
],
[
"Samostatná aplikácia",
"Jellyfin",
"Proxmox VE spustí daný LXC priamo"
]
]
}
}
]
},
{
"id": "stack-checks",
"title": "5. Kontrola stohu ako celku",
"blocks": [
{
"list": {
"items": [
"Každý VMID existuje, je jedinečný a udržiava očakávanú inštančnú identitu.",
"Každý kontrakt patrí do rovnakej zostavy, zachováva svoju rolu a zaznamenanú natívnu konfiguráciu.",
"Hlavný člen je posledný v <code>start_order</code> a prvý v <code>stop_order</code>.",
"Nechýba žiadny člen, zväzok ani úprava rootfs.",
"Hook odkazuje na oficiálny snippet, jeho obsah sa nezmenil a jeho kontrakt zodpovedá receptu zostavy.",
"Zistené obrazy a hodnoty digest zodpovedajú pripraveným archívom OCI.",
"Zariadenia, profily GPU, pripojenia, tajomstvá a koncové body stále zodpovedajú zmluvám.",
"Keď všetky závislosti prejdú kontrolou, koncový bod hlavnej aplikácie overí integráciu medzi členmi."
]
}
}
]
},
{
"id": "manage",
"title": "Správa nainštalovaného zásobníka",
"intro": "V časti <strong>Spravovať nainštalované aplikácie OCI</strong> vedie každý člen k celej zostave. Ponuka obsahuje <strong>Aktualizovať všetky kontajnery aplikácie</strong>, <strong>Upraviť dodatočné cesty a zariadenia</strong>, <strong>Znova vytvoriť všetky kontajnery s uloženou konfiguráciou</strong> a <strong>Odstrániť: vymazať aplikáciu a jej kontajnery</strong>. Opätovné vytvorenie zostaví každý kontajner z pôvodného obrazu podľa uloženého digestu bez hľadania novšieho obrazu. Používa rovnaké kroky ako aktualizácia a ponúka sa pre aktualizovateľné zostavy.",
"blocks": [
{
"steps": {
"items": [
{
"title": "Každý člen",
"body": "Zmluva člena menuje hlavné VMID a kompletný zoznam členov."
},
{
"title": "Stack je reprodukovateľný",
"body": "Overia sa identity, kontrakty, hook, úpravy a koordinované opätovné vykonanie daného receptu."
},
{
"title": "Prvé obrazy",
"body": "Aplikácia sa nezastaví, kým sa každý digest neurčí, nestiahne a neoverí."
},
{
"title": "Zastaviť súčasti a zálohovať celú zostavu",
"body": "Overené natívne zálohy sa vytvoria pri zastavenej zostave, aby aplikácia a databázy zodpovedali rovnakému okamihu."
},
{
"title": "Aktualizovať a skontrolovať každého člena",
"body": "Adaptácia, sieť, pripojenia, tajomstvá a zariadenia sa používajú opäť pred kontrolou stavu každého člena."
},
{
"title": "Publikovať alebo obnoviť všetko",
"body": "Nové zmluvy sa uverejňujú iba vtedy, keď každý člen prejde. Ak jeden zlyhá, každý člen je obnovený."
}
]
}
},
{
"table": {
"headers": [
"Upraviť",
"Čo sa zmení?",
"Čo sa uchováva"
],
"rows": [
[
"Extra cesty a zariadenia",
"Pridajú sa do aplikačného kontajnera alebo sa z neho odstránia a kontajner sa reštartuje. Nič sa znova nevytvára.",
"Údaje aplikácie, jej databázy a ostatných kontajnerov"
],
[
"Čo spúšťa rozpoznanie (Immich)",
"Kontajner strojového učenia dostane obraz a zariadenia pre CPU alebo GPU hostiteľa. Celá aplikácia sa zastaví a aktualizuje rovnakým postupom ako pri aktualizácii.",
"Modelová vyrovnávacia pamäť, knižnica a databáza. Ak niečo zlyhá, predchádzajúce kontajnery a predchádzajúca voľba sú obnovené"
]
]
}
},
{
"calloutWarning": {
"title": "Zostava bez koordinovaného opätovného vykonania sa neaktualizuje",
"body": "Ak sa príprava zásobníka nedá reprodukovať, aktualizácia sa zamietne pred zastavením zásobníka. Aplikácia funguje tak, ako je."
}
}
]
},
{
"id": "failure",
"title": "6. Keď niečo zlyhá",
"blocks": [
{
"p": "Ak počas inštalácie nastane chyba, zastavia a odstránia sa neúplné kontajnery vytvorené touto operáciou aj súkromný most, ak ho operácia vytvorila. Zostava sa nezverejní ako platná, kým neskončí celý postup."
},
{
"p": "Aktualizácia je transakčná: všetky obrazy sú pripravené ako prvé, potom stack zastaví, každý člen je zálohovaný a záloha overená, a len potom je každý rootfs nahradený. Členovia začínajú jeden po druhom so zdravotnou kontrolou; ak jeden zlyhá, každý člen je obnovený z rovnakého súboru záloh, takže databáza a aplikácia nikdy nepatria do rôznych momentov."
},
{
"mermaid": {
"chartCode": "flowchart LR\n P[\"{{prepare}}\"] --> S[\"{{stop}}\"]\n S --> B[\"{{backup}}\"]\n B --> R[\"{{replace}}\"]\n R --> H{\"{{healthy}}\"}\n H -- \"{{yes}}\" --> C[\"{{commit}}\"]\n H -- \"{{no}}\" --> X[\"{{rollback}}\"]",
"labels": {
"prepare": "Pripravte každý obraz",
"stop": "Stop, hlavný člen prvý",
"backup": "Overená záloha každého CT",
"replace": "Nahradiť rootfs",
"healthy": "Sú všetky funkčné?",
"yes": "Áno",
"no": "Nie",
"commit": "Zverejniť kontrakty",
"rollback": "Obnoviť každého člena"
}
}
}
]
},
{
"id": "not-assumed",
"title": "Čo zásobník nezahŕňa",
"blocks": [
{
"list": {
"items": [
"Súprava nainštalovaná v jednom postupe, napríklad súprava Arr, nie je zostavou so závislosťami: jej kontajnery nemajú určené vzájomné poradie spúšťania.",
"Súkromná sieť nenahrádza autentifikáciu, TLS ani konfiguráciu každej aplikácie.",
"Zálohovanie jedného LXC neobsahuje most, hák ani zmluvy zvyšku zásobníka.",
"Prowlarr, Sonarr alebo Radarr neprijímajú žiadne indexátory, profily alebo poskytovateľov z ProxMenux."
]
}
}
]
}
]
}