> For the complete documentation index, see [llms.txt](https://ayakaleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ayakaleaf-pro.ayaka.space/on-premises/cs/konfigurace/overleaf-toolkit/sandboxed-compiles.md).

# Kompilace v izolovaném prostředí

Ayakaleaf Pro přichází s možností spouštět kompilace v zabezpečeném sandboxovaném prostředí pro podnikové zabezpečení. Dělá to tak, že spouští každý projekt ve vlastním zabezpečeném Docker prostředí.

### Vylepšené zabezpečení

Sandboxované kompilace jsou pro Ayakaleaf Pro doporučeným přístupem, protože mnoho dokumentů LaTeX vyžaduje/má schopnost spouštět libovolné shellové příkazy jako součást procesu kompilace PDF. Pokud používáte Sandboxované kompilace, každá kompilace běží v samostatném Docker kontejneru s omezenými možnostmi, které nejsou sdíleny s žádným jiným uživatelem ani projektem, a nemá přístup k vnějším zdrojům, jako je hostitelská síť.

{% hint style="warning" %}
Pokud se pokusíte provozovat Ayakaleaf Pro **bez** Sandboxovaných kompilací, běží kompilace vedle dalších současně probíhajících kompilací v hlavním Docker kontejneru a uživatelé mají plný přístup pro čtení a zápis k `sharelatex` prostředkům kontejneru (souborový systém, síť a proměnné prostředí) při spouštění kompilací LaTeX.
{% endhint %}

### Snazší správa balíčků

Aby nebylo nutné balíčky instalovat ručně, doporučujeme povolit Sandboxované kompilace. Toto je konfigurovatelné nastavení v Server Pro, které vašim uživatelům poskytne přístup ke stejnému prostředí TeX Live jako na overleaf.com, ale ve vaší vlastní lokální instalaci. Obrazy TeX Live používané Sandboxovanými kompilacemi obsahují nejpopulárnější balíčky a fonty otestované proti našim šablonám galerie, což zajišťuje maximální kompatibilitu s lokálními projekty.

Povolením Sandboxovaných kompilací můžete nakonfigurovat, které verze TeX Live si uživatelé mohou vybírat v rámci svého projektu, a zároveň nastavit výchozí verzi obrazu TeX Live pro nové projekty.

{% hint style="info" %}
Pokud se pokusíte provozovat Ayakaleaf Pro bez Sandboxovaných kompilací, vaše instance bude ve výchozím nastavení používat základní schéma verze TeX Live pro kompilace. Tato základní verze je lehká a obsahuje pouze velmi omezenou podmnožinu balíčků LaTeX, což s největší pravděpodobností povede k chybám chybějících balíčků pro vaše uživatele, zejména pokud se pokusí použít předpřipravené šablony.
{% endhint %}

Protože je Ayakaleaf Pro navržen tak, aby fungoval offline, neexistuje automatický způsob, jak integrovat šablony galerie z overleaf.com do vaší lokální instalace; je však možné to udělat ručně pro každou šablonu zvlášť. Více informací o tom, jak to funguje, najdete v našem průvodci přenosem šablon z overleaf.com: [/pages/825758bf6c6f48b2b01c22115c5ecfa848ef9c46#transferring-templates-from-overleaf.com](https://ayakaleaf-pro.ayaka.space/on-premises/cs/konfigurace/overleaf-toolkit/pages/825758bf6c6f48b2b01c22115c5ecfa848ef9c46#transferring-templates-from-overleaf.com "mention").

{% hint style="info" %}
Sandboxované kompilace vyžadují, aby `sharelatex` kontejner měl přístup k Docker socketu na hostitelském počítači (prostřednictvím bind mountu), aby mohl spravovat tyto sesterské kontejnery pro kompilaci.
{% endhint %}

## Jak to funguje

Když jsou Sandboxované kompilace povoleny, Docker socket bude připojen z hostitelského počítače do `sharelatex` kontejneru, aby služba kompilátoru v kontejneru mohla na hostiteli vytvářet nové Docker kontejnery. Poté při každém spuštění kompilátoru v každém projektu provede služba kompilátoru LaTeX (CLSI) následující kroky:

* Zapsat soubory projektu na umístění uvnitř `OVERLEAF_DATA_PATH`.
* Použít připojený Docker socket k vytvoření nového `texlive` kontejneru pro běh kompilace.
* Nechat `texlive` kontejner číst data projektu z umístění pod `OVERLEAF_DATA_PATH`.
* Zkompilovat projekt uvnitř `texlive` kontejneru.

### Povolení Sandboxovaných kompilací

#### Pro uživatele Toolkitu

Chcete-li povolit sandboxované kompilace (také známé jako sesterské kontejnery), nastavte následující konfigurační možnosti v `overleaf-toolkit/config/overleaf.rc`:

{% code title="config/overleaf.rc" %}

```dotenv
SERVER_PRO=true
SIBLING_CONTAINERS_ENABLED=true
```

{% endcode %}

#### Pro uživatele Docker Compose <a href="#docker-compose-example" id="docker-compose-example"></a>

{% hint style="danger" %}
Počínaje Overleaf CE/Server Pro `5.0.3` proměnné prostředí byly přejmenovány z `SHARELATEX_*` na `OVERLEAF_*`.
{% endhint %}

Pokud používáte `verzi 4.x` verzi (nebo starší) se prosím ujistěte, že proměnné mají odpovídající prefix (např. `SHARELATEX_MONGO_URL` namísto `OVERLEAF_MONGO_URL`).

<pre class="language-yml"><code class="lang-yml">version: '2'
services:
    sharelatex:
        #...
        volumes:
            - /data/overleaf_data:/var/lib/overleaf
<strong>            - /var/run/docker.sock:/var/run/docker.sock
</strong>        environment:
            #...
<strong>            DOCKER_RUNNER: "true"
</strong><strong>            SANDBOXED_COMPILES: "true"
</strong><strong>            SANDBOXED_COMPILES_HOST_DIR: "/data/overleaf_data/data/compiles"
</strong>            #...
        #...
</code></pre>

### Nastavení obrazu TeX Live

{% hint style="info" %}
Pro uživatele v pevninské Číně můžete nahradit `ghcr.io` za `ghcr.nju.edu.cn` pro zrychlení stahování. Ale **NEDĚLEJTE** používejte `ghcr.nju.edu.cn` přímo ve svém nastavení proměnných prostředí toolkitu. Měli byste ponechat `ghcr.io` jako vaši jedinou volbu.
{% endhint %}

Ayakaleaf Pro používá tři proměnné prostředí k určení, které obrazy TeX Live mají být použity pro Sandboxované kompilace:

* `TEX_LIVE_DOCKER_IMAGE` **(povinné),** Výchozí obraz TeX Live používaný pro kompilaci nových projektů. Tento obraz musí být zahrnut v `ALL_TEX_LIVE_DOCKER_IMAGES`.
* `ALL_TEX_LIVE_DOCKER_IMAGE_NAMES` **(povinné),** Seznam přátelských názvů obrazů oddělených čárkami, používaný pro možnosti ve frontendu.
* `ALL_TEX_LIVE_DOCKER_IMAGES` **(povinné),** Seznam obrazů TeX Live oddělených čárkami, které se mají používat. Pokud je pro nasazení použit Overleaf Toolkit, tyto obrazy budou staženy nebo aktualizovány. Chcete-li přeskočit stahování, nastavte `SIBLING_CONTAINERS_PULL=false` v `config/overleaf.rc`.

Při spouštění vaší instance Ayakaleaf Pro pomocí `bin/up` příkazu Toolkit automaticky stáhne všechny obrazy uvedené v `ALL_TEX_LIVE_DOCKER_IMAGES`.

Zde je příklad, kde pro nové projekty nastavíme jako výchozí TeX Live 2026 a pro staré projekty ponecháme v použití 2025.

{% tabs %}
{% tab title="Minimální instalace" %}
Následující konfigurace nainstaluje všechny plné Docker obrazy TeX Live od roku 2025 do 2026. Doporučujeme mít alespoň **64 GB** volného úložiště před použitím této konfigurace.

{% code title="config/variables.env" overflow="wrap" %}

```dotenv
ALL_TEX_LIVE_DOCKER_IMAGES=ghcr.io/ayaka-notes/texlive-full:2026.1, ghcr.io/ayaka-notes/texlive-full:2025.1
ALL_TEX_LIVE_DOCKER_IMAGE_NAMES=Texlive 2026, Texlive 2025
TEX_LIVE_DOCKER_IMAGE=ghcr.io/ayaka-notes/texlive-full:2026.1
```

{% endcode %}
{% endtab %}

{% tab title="Plná instalace" %}
Následující konfigurace nainstaluje všechny plné Docker obrazy TeX Live od roku 2020 do 2026. Doporučujeme mít alespoň **150 GB** volného úložiště před použitím této konfigurace.

{% code title="config/variables.env" overflow="wrap" %}

```dotenv
ALL_TEX_LIVE_DOCKER_IMAGES=ghcr.io/ayaka-notes/texlive-full:2026.1,ghcr.io/ayaka-notes/texlive-full:2025.1,ghcr.io/ayaka-notes/texlive-full:2024.1,ghcr.io/ayaka-notes/texlive-full:2023.1,ghcr.io/ayaka-notes/texlive-full:2022.1,ghcr.io/ayaka-notes/texlive-full:2021.1,ghcr.io/ayaka-notes/texlive-full:2020.1
ALL_TEX_LIVE_DOCKER_IMAGE_NAMES=Texlive 2026,Texlive 2025,Texlive 2024,Texlive 2023,Texlive 2022,Texlive 2021,Texlive 2020
TEX_LIVE_DOCKER_IMAGE=ghcr.io/ayaka-notes/texlive-full:2026.1
```

{% endcode %}
{% endtab %}
{% endtabs %}

{% hint style="danger" %}
Důrazně se doporučuje nastavit **alespoň 2 obrazy texlive-full**. Podrobné důvody viz [#known-issues](#known-issues "mention")
{% endhint %}

### Dostupné obrazy TeX Live

Jedná se o řadu obrazů TeX Live speciálně optimalizovaných pro Overleaf, které lze také přidat do `TEX_LIVE_DOCKER_IMAGE` a `ALL_TEX_LIVE_DOCKER_IMAGES`:

* `ghcr.io/ayaka-notes/texlive-full:2026.1` (Také `latest` značka)
* `ghcr.io/ayaka-notes/texlive-full:2025.1`
* `ghcr.io/ayaka-notes/texlive-full:2024.1`
* `ghcr.io/ayaka-notes/texlive-full:2023.1`
* `ghcr.io/ayaka-notes/texlive-full:2022.1`
* `ghcr.io/ayaka-notes/texlive-full:2021.1`
* `ghcr.io/ayaka-notes/texlive-full:2020.1`

{% hint style="warning" %}
Existuje přísné schéma týkající se toho, jak obrazy **musí** být značkovány (platí následující regulární výraz `^[0-9]+.[0-9]+`, přičemž první číslo určuje rok TeX Live a druhé verzi opravy).
{% endhint %}

### Mohu používat jiný registr obrazů

> Někteří lidé se možná ptají, zda mohu nahradit `ghcr.io` za jiný zrcadlový server nebo přepnout texlive na jiný obraz z Docker Hubu?

Ne, nedoporučujeme to, protože konfigurace je poměrně složitá. Pokud stahujete ze zrcadlového serveru, můžete svůj obraz přejmenovat na `ghcr.io/ayaka-notes/texlive-full`.

Ale pokud opravdu chcete používat vlastní registr obrazů, přidejte:

{% code title="config/variables.env" overflow="wrap" %}

```dotenv
IMAGE_ROOT=hub.your.com/your-repo
```

{% endcode %}

Pak se musíte ujistit, že všechny obrazy texlive jsou v `your-repo`, například

* `hub.your.com/your-repo/texlive-full:2025.1`
* `hub.your.com/your-repo/texlive-full:2024.1`

Pro podrobnější informace si přečtěte níže uvedený zdrojový kód, abyste pochopili, jak zpracováváme vaši proměnnou prostředí:

{% code title="sandboxed-compiles/index.mjs" overflow="wrap" expandable="true" %}

```mjs
if (process.env.SANDBOXED_COMPILES === 'true') {
  // Nastavit výchozí kořen obrazu, pokud není zadán
  let imageRootPath = process.env.IMAGE_ROOT || "ghcr.io/ayaka-notes";
  // Exportovat imageRoot do Settings
  Settings.imageRoot = imageRootPath

  // allowedImageNames by mělo být:
  // [
  //  { imageName: "texlive-2023:latest", imageDesc: "TeX Live 2023" },
  //  { imageName: "texlive-2022:latest", imageDesc: "TeX Live 2022" },
  // ]
  Settings.allowedImageNames = parseTextExtensions(process.env.ALL_TEX_LIVE_DOCKER_IMAGES)
    .map((texImage, index) => ({
      imageName: texImage.split("/")[texImage.split("/").length - 1],
      imageDesc: parseTextExtensions(process.env.ALL_TEX_LIVE_DOCKER_IMAGE_NAMES)[index]
        || texImage.split(':')[1],
    }))
  
  // Nakonec se imageName spojí s imageRoot a vytvoří úplnou cestu k obrazu
  // Úplný název bude například: ghcr.io/ayaka-notes/texlive-2023:latest

  // Nastavit výchozí název obrazu, pokud není zadán
  if(!process.env.TEX_LIVE_DOCKER_IMAGE) {
    process.env.TEX_LIVE_DOCKER_IMAGE = imageRootPath + "/" + Settings.allowedImageNames[0].imageName
  }

  // Exportovat currentImageName do Settings
  // Toto je název obrazu pro nově vytvořené projekty
  Settings.currentImageName = process.env.TEX_LIVE_DOCKER_IMAGE
}
```

{% endcode %}

### Automatická synchronizace obrazu TeX Live

Abyste se vyhnuli ručním aktualizacím pomocí `bin/up` vaší instance pokaždé, můžete automatizovat aktualizace svého obrazu TeX Live. Viz [Automatická aktualizace plných obrazů TeX Live](/on-premises/cs/udrzba/automaticka-aktualizace-plnych-obrazu-tex-live.md).

### Známé problémy

Toto je skutečný případ z komunity Overleaf:

> Při použití `6.0.1-ext-v3.3`, mám tato nastavení v `variables.env`:
>
> ```dotenv
> TEX_LIVE_DOCKER_IMAGE=texlive/texlive:latest-full
> ALL_TEX_LIVE_DOCKER_IMAGES=texlive/texlive:latest-full
> ```
>
> To funguje bez problémů s `texlive/texlive:latest-full`. Nicméně jsem stáhl jiný obraz texlive `danteev/texlive:2025-10-15` a změnil obě tyto proměnné na nový název obrazu, ale nefunguje to:
>
> ```dotenv
> TEX_LIVE_DOCKER_IMAGE=danteev/texlive:2025-10-15
> ALL_TEX_LIVE_DOCKER_IMAGES=danteev/texlive:2025-10-15
> ```
>
> V protokolech vidím následující:
>
> {% code overflow="wrap" %}
>
> ```
> {"name":"clsi","level":50,"err":{"message":"(HTTP kód 404) žádný takový kontejner - Žádný takový obraz: texlive/texlive:latest-full ","name":"Error","stack":"Error: (HTTP kód 404) žádný takový kontejner - Žádný takový obraz: texlive/texlive:latest-full ... 
> ```
>
> {% endcode %}
>
> Zdá se, že aktualizovaná nastavení v `variables.env` se neprojevují. Kompilace se stále snaží spustit `texlive/texlive:latest-full` obraz, nikoli nový obraz.
>
> Zkusil jsem restartovat, smazat kontejnery a spustit znovu, ale problém je stále stejný.
>
> Nějaká řešení?

Kvůli některým technickým omezením, pokud nastavíte pouze jeden Docker obraz TeXLive, například `texlive-fullA:latest`

```
ALL_TEX_LIVE_DOCKER_IMAGES=texlive/texliveA:latest-full
ALL_TEX_LIVE_DOCKER_IMAGE_NAMES=TeXLiveA
TEX_LIVE_DOCKER_IMAGE=texlive/texliveA:latest-full
```

A po nějaké době provozu vaší instance Overleaf možná budete chtít upravit obraz TeXLive na `texlive-fullB:latest`. Poté zjistíte, že vaši uživatelé nemohou zkompilovat všechny projekty.

```
ALL_TEX_LIVE_DOCKER_IMAGES=texlive/texliveA:latest-full
ALL_TEX_LIVE_DOCKER_IMAGE_NAMES=TeXLiveA
TEX_LIVE_DOCKER_IMAGE=texlive/texliveA:latest-full
```

Je to proto, že název obrazu TeXLive-Full (pro kompilaci v sandboxu) je v každém projektu trvale uložen v databázi. *Teprve když uživatel změní verzi TeXLive svého projektu, například z 2024 na 2025, změní se název obrazu v databázi*.

Když CLSI kompiluje projekt, používá název obrazu kontejneru nalezený v databázi k přímé kompilaci projektu.

Pokud poskytnete pouze jeden Docker obraz, uživatelé nebudou moci upravit obraz použitý ke kompilaci projektu. V takovém případě musíte napsat skript, který **ručně upraví** obraz TeXLive pro všechny uživatelské projekty v MongoDB.

### Ladění a hlášení

Spusťte následující příkaz pro kontrolu protokolu CLSI z toolkitu:

{% code overflow="wrap" %}

```bash
bin/logs clsi
```

{% endcode %}

Pokud narazíte na jakékoli problémy při kompilaci s obrazy TeX Live, založte prosím hlášení o problému zde:

<https://github.com/ayaka-notes/texlive-full/issues/new?template=texlive-image-bug.yml>

Abychom problém mohli reprodukovat a odladit, můžete být požádáni o nahrání vašeho projektu do Overleaf. Poté projekt stáhneme a provedeme testy kompilace pomocí GitHub Action.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://ayakaleaf-pro.ayaka.space/on-premises/cs/konfigurace/overleaf-toolkit/sandboxed-compiles.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
