---
title: Serverlety
description: Serverlety a nasazení aplikací ve starém Futrou v1.
---

## Co je to Serverlet?

Určitě se ptáte, co to vlastně je ten serverlet? Nebudeme vás napínat. Je to název našeho webhostingu. Proč serverlet? Myslíme si, že obecné označení webhosting se v našem případě příliš nehodí a nevystihuje všechny možnosti, které nabízí. Náš serverlet je určitým kompromisem mezi obyčejným webhostingem a virtualizovaným managed serverem — takový trochu kočkopes.

![Přehled Serverletu ve Futrou v1](/img/docs/v1/serverlet_cs.png)

## Technologie

Samotný serverlet je námi sestavené prostředí pro běh vaší aplikace, které běží jako Docker kontejner. Jde tedy o virtualizaci na úrovni operačního systému, tzv. kontejnerizaci: kontejnery sdílejí jádro hostitelského systému a od sebe navzájem je oddělují jmenné prostory (namespaces) a cgroups. Nejedná se o plnou virtualizaci s vlastním jádrem, jakou nabízejí virtuální stroje.

Váš serverlet obsahuje všechen software potřebný pro běh vaší aplikace a je zcela oddělen od serverletů/aplikací jiných uživatelů.

## Operační systém

Každý serverlet má svůj malý a do jisté míry nezávislý OS. Jako hostitelský operační systém a OS v serverletu používáme Ubuntu. V současné době Ubuntu 22.04 LTS.

## Správa procesů

Na rozdíl od běžného Ubuntu se o správu služeb v našem serverletu stará `runit`. Ten se stará o to, aby se všechny vaše aplikace po startu korektně zapnuly a v případě pádu je opět nahodí. Více se něm můžete dočíst v samostatné kapitole Runit.

![Správa softwaru ve Futrou v1](/img/docs/v1/software_cs.png)

### Runit

O správu všech aplikací v serverletu se stará `runit`. Zajišťuje, že se všechny aplikace po startu serverletu zapnou a v případě pádu je opět nahodí. Veškeré jeho nastavení je v adresáři `/srv/service`. Ihned po založení serverletu v něm naleznete složky jednotlivých služeb, které běží na pozadí, a jejich spouštěcí scripty.

### Přidání vlastní aplikace

Přidání vlastní aplikace je velmi jednoduché. Po přidání je možné danou aplikaci ovládat také z administrace.

Postup přidání:

1. Nejprve vytvořte adresář s názvem aplikace ve složce `/srv/service`, například `/srv/service/moje-aplikace`.
2. V daném adresáři vytvořte soubor `run` pro spuštění aplikace, tedy `/srv/service/moje-aplikace/run`.
3. Do souboru zadejte příkaz pro spuštění aplikace. Aplikace musí udržovat hlavní proces a nesmí přecházet do pozadí. V opačném případě způsobí opakované pokusy o spuštění, které spotřebují většinu prostředků serverletu. U některých aplikací je proto nutné vypnout daemon mode.

Ukázka souboru `run` pro MongoDB:

```sh
#!/bin/sh -e
exec 2>&1
exec /usr/bin/mongod --config /srv/config/mongodb/mongod.conf
```

4. Soubor uložte.
5. Uživatel `applet` musí mít všechna potřebná práva ke složce, aby runit mohl správně fungovat.
6. Runit během několika desítek vteřin rozpozná a spustí nově přidanou aplikaci. Potřebné informace, jako je PID procesu, ukládá do podadresáře `supervise`.
7. Hotovo — aplikace se bude automaticky spouštět po zapnutí a znovu nahodí při pádu. Ovládat ji můžete příkazem `app` nebo `sv`.

Další užitečné informace naleznete na [stránce programu runit](http://smarden.org/runit/).

### Odebrání aplikace

Odebrání aplikace je jednoduché. Ukončete ji příkazem `app stop {moje-aplikace}` a poté smažte její složku v adresáři `/srv/service`.

> **Varování:** Špatná manipulace s adresářem `/srv/service` a nastavením předinstalovaných aplikací může způsobit jejich nefunkčnost.

## Ovládání

### Ovládání serverletu

Zapnutí, restart a vypnutí serverletu lze provádět pouze z administrace, na kartě daného serverletu.

Restart odpovídá násilnému vypnutí a zapnutí. Přeruší aplikace, což může způsobit ztrátu neuložených dat nebo poškození databáze. Provádějte jej pouze v nutných případech; pokud je to možné, nejprve řádně ukončete ostatní aplikace. Po provedení některé z těchto akcí počkejte alespoň 60 sekund před další akcí.

Vypnutý serverlet je účtován stejně jako zapnutý, protože potřebné prostředky zůstávají pro serverlet rezervované.

### Správa softwaru

Předinstalovaný i vlastní software na serverletu lze ovládat dvěma způsoby. Nedoporučujeme je používat současně: administrace v reálném čase nezobrazuje změny provedené přes SSH.

Zakázaný software nezabírá žádné prostředky a nespouští se po startu. Povolený software se po startu automaticky zapne. Po založení serverletu je většina softwaru zakázaná. Po prvním povolení si software jako MariaDB, PostgreSQL nebo MongoDB vyhradí místo na disku, které zůstane obsazené až do smazání.

Každý další povolený a spuštěný software spotřebovává prostředky serverletu. Povolte proto jen software, který aplikace skutečně potřebuje.

### Administrace

Ovládání softwaru najdete v administraci na kartě **Software**. Je zde všechen software na serverletu spravovaný runitem; vlastní software přidáte podle kapitoly Runit.

![Softwarové centrum v administraci](/img/docs/v1/software-control-panel.png)

| Ikona | Akce | Popis |
| --- | --- | --- |
| ![Reload](/img/docs/v1/actions/reload.png) | Reload | Aplikace znovu načte konfiguraci. Představuje restart bez výpadku u aplikací, které ho podporují. |
| ![Restart](/img/docs/v1/actions/restart.png) | Restart | Tvrdý restart s výpadkem. |
| ![Stop](/img/docs/v1/actions/stop.png) | Stop | Zastaví aplikaci. |
| ![Start](/img/docs/v1/actions/start.png) | Start | Spustí aplikaci. |

### Terminál

> **Tip:** Aplikace může ovládat pouze uživatel `applet`.

Serverlet lze ovládat také přes SSH. Pro tento účel je připravený příkaz `app`:

```text
Futrou Serverlet Manager
Usage: app {start|restart|reload|stop|status|disable|enable} {app_name}
Usage: app list
```

Použití:

```bash
app {příkaz} {název-aplikace}
```

Například pro zobrazení stavu LiteSpeed Web Serveru:

```bash
app status lsws
```

Výpis aplikací získáte příkazem:

```bash
app list
```

Příklad výstupu:

```text
System apps:
    runit
Registered user apps:
    lsws
    mariadb
    moje-aplikace
    mongodb
    redis
```