Skip to main content

Strategie architektury

Oficiální doporučení k architektuře

TOS 7 přijímá strategii Container-first při zachování plné podpory nativních aplikací Deb. Platforma doporučuje následující rozhodovací rámec:

Developer_architecture_strategy_001en.jpg

Směr Container-First

Ekosystém aplikací TOS 7 se vyvíjí směrem k modelu Container-first:

  • Aplikace Docker jsou preferovanou cestou pro většinu služeb třetích stran
  • Poskytují lepší izolaci, jednodušší správu závislostí a konzistenci napříč platformami
  • TOS 7 podporuje kontejnerizované nasazení Docker. Před použitím je nutné z App Center nainstalovat aplikaci DockerEngine. Tato aplikace poskytuje pro TOS 7 kompletní běhové prostředí Docker Compose.
  • Budoucí funkce platformy (sandboxing, omezení prostředků, automatické aktualizace) budou přednostně podporovat aplikace Docker

Zvláštní pravidla výběru typu aplikace:

  • Služby na pozadí bez UI: Pro nenáročné démony použijte podtyp Deb (No UI) (označovaný také jako headless služby); pro služby se složitými běhovými závislostmi nebo služby vyžadující izolaci kontejneru použijte Docker

Pro aplikace Deb poskytuje TOS 7 plnou podporu, ale vývojáři by měli:

  • Minimalizovat závislosti na úrovni systému
  • Používat systemd pro správu životního cyklu
  • Dodržovat zásadu nejmenšího oprávnění
  • Připravit se na budoucí kontejnerizované nasazení
Doporučené scénáře pro Docker

Následující scénáře musí používat Docker; použití Deb je zakázáno:

  • Aplikace vyžadující specifické OS prostředí nebo verze knihoven, které jsou v konfliktu s hostitelem
  • Aplikace vyžadující síťovou izolaci (nezávislé jmenné prostory)
  • Aplikace s vícekontejnerovou architekturou (např. webová služba + databáze)

Plán vývoje aplikací Deb: Aplikace Deb si zachovají plnou podporu v průběhu celé řady TOS 7.x. Platforma může v budoucích hlavních verzích TOS postupně zavést přechodovou cestu k architektuře container-first. Vývojáři obdrží alespoň 12 měsíců předem upozornění před jakýmkoli zrušením formátu.

Předinstalované závislosti systému TOS

TOS 7 používá kořenový souborový systém kompatibilní s Ubuntu 22.04. Systém je předinstalován s následujícími základními závislostmi:

  • bash / dash
  • Python 3.10
  • systemd
  • nginx
  • curl / wget
  • Běhové prostředí Docker (výhradně pro aplikace Docker)
Důležité

Běhová prostředí jazyků, jako jsou Node.js, Java a Go, nejsou v TOS ve výchozím stavu předinstalovaná. Nespoléhejte v aplikacích Deb na tato prostředí přímo.

Řešení nepředinstalovaných závislostí

Pokud vaše aplikace závisí na běhových prostředích, která nejsou v TOS předinstalovaná (např. Node.js, Java, Go nebo jiná běhová prostředí jazyků), musíte použít jedno z následujících vyhovujících řešení. Přímé deklarování takových závislostí nebo jejich stahování za běhu je zakázáno.

Zakázané přístupy
  • Deklarování Depends: nodejs v DEBIAN/control (systém jej nemá předinstalovaný, což způsobí selhání instalace)
  • Instalace závislostí příkazem apt install nodejs ve skriptech (vyvolává problémy s oprávněními a poškozuje systémové prostředí)
  • Použití skriptů Node.js jako vstupního bodu aplikace (výsledkem je node: command not found)
Doporučené alternativy (v pořadí podle priority)

Možnost 1: Kompilace statických binárek v jazyce Go (doporučeno)

Přepište základní logiku v jazyce Go a zkompilujte ji do staticky linkovaných samostatných binárek bez závislosti na jakýchkoli systémových dynamických knihovnách:

# Compile static binary for x86_64 architecture
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o appname-x86_64 main.go

# Compile static binary for aarch64 architecture
GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -o appname-aarch64 main.go
  • Umístěte zkompilovanou binárku do adresáře /usr/local/<appid>/ balíčku Deb
  • Spouštějte ji přímo prostřednictvím souboru služby systemd bez dalších závislostí

Možnost 2: Použití Pythonu (Python 3.10 je v TOS předinstalovaný a připravený k použití)

Přepište základní logiku v Pythonu. TOS je předinstalován s Pythonem 3.10, který lze použít přímo:

  • Deklarujte závislost v DEBIAN/control: Depends: python3
  • Pokud jsou potřeba knihovny třetích stran, přibalte je k balíčku Deb nebo je nainstalujte pomocí pip install --target do soukromého adresáře aplikace

Možnost 3: Přibalení statických závislostí (pouze pro zvláštní scénáře)

Pokud musíte použít nepředinstalované prostředí, jako je Node.js, můžete k balíčku Deb přibalit statickou binárku odpovídající architektury:

  • Umístěte statickou binárku Node.js do adresáře /usr/local/<appid>/node/
  • V skriptech používejte absolutní cesty: /usr/local/<appid>/node/bin/node /usr/local/<appid>/app.js
  • Poznámka: Tento přístup výrazně zvětšuje velikost balíčku; doporučuje se pouze pro nenáročné aplikace