> 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/on-premises-cs/konfigurace/overleaf-toolkit/sandboxed-compiles.md).

# Kompilace v izolovaném prostředí

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

### Vylepšené zabezpečení

Kompilace v sandboxu jsou pro Server Pro doporučeným přístupem, protože mnoho dokumentů LaTeX vyžaduje / má možnost spouštět libovolné shellové příkazy jako součást procesu kompilace PDF. Pokud používáte kompilace v sandboxu, každá kompilace běží v samostatném kontejneru Docker 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 síť hostitele.

{% hint style="warning" %}
Pokud se pokusíte provozovat Overleaf Pro **bez** kompilací v sandboxu, běží kompilace spolu s ostatními souběžnými kompilacemi v hlavním kontejneru Docker a uživatelé mají plný přístup pro čtení i zápis k `sharelatex` zdrojům kontejneru (souborový systém, síť a proměnné prostředí) při spouštění kompilací LaTeXu.
{% endhint %}

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

Abyste se vyhnuli ruční instalaci balíčků, doporučujeme povolit kompilace v sandboxu. 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é kompilacemi v sandboxu obsahují nejoblíbeně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 kompilací v sandboxu můžete nakonfigurovat, z jakých verzí TeX Live si mohou uživatelé v rámci svého projektu vybírat, a zároveň nastavit výchozí verzi obrazu TeX Live pro nové projekty.

{% hint style="info" %}
Pokud se pokusíte spustit Overleaf Pro bez kompilací v sandboxu, vaše instance ve výchozím nastavení použije pro kompilace základní schéma verze TeX Live. Tato základní verze je lehká a obsahuje jen velmi omezenou podmnožinu balíčků LaTeXu, což s největší pravděpodobností povede k chybám s chybějícími balíčky u vašich uživatelů, zejména pokud se pokusí použít předpřipravené šablony.
{% endhint %}

Protože je Overleaf Pro navržen tak, aby fungoval offline, neexistuje automatický způsob, jak integrovat šablony galerie overleaf.com do vaší lokální instalace; je však možné to provést ručně pro jednotlivé šablony. 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/on-premises-cs/konfigurace/overleaf-toolkit/pages/825758bf6c6f48b2b01c22115c5ecfa848ef9c46#transferring-templates-from-overleaf.com "mention").

{% hint style="info" %}
Kompilace v sandboxu vyžadují, aby `sharelatex` kontejner měl přístup k Docker socketu na hostitelském stroji (prostřednictvím připojeného mountu), aby mohl spravovat tyto sesterské kontejnery pro kompilaci.
{% endhint %}

## Jak to funguje

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

* Zapíše soubory projektu do umístění v rámci `OVERLEAF_DATA_PATH`.
* Pomocí připojeného Docker socketu vytvoří nový `texlive` kontejner pro dané spuštění kompilace.
* Nechat `texlive` kontejner číst data projektu z umístění pod `OVERLEAF_DATA_PATH`.
* Zkompilovat projekt uvnitř `texlive` kontejneru.

### Povolení kompilací v sandboxu

#### Pro uživatele Toolkitu

Chcete-li povolit kompilace v sandboxu (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" %}
Od verze 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` (nebo starší), ujistěte se prosím, že proměnné mají odpovídající předponu (např. `SHARELATEX_MONGO_URL` mí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>

### Změna obrazu TexLive

{% hint style="info" %}
Pro uživatele z pevninské Číny můžete použít `ghcr.nju.edu.cn` k urychlení stahování.
{% endhint %}

Overleaf Pro používá tři proměnné prostředí k určení, které obrazy TeX Live se mají používat pro kompilace v sandboxu:

* `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řívětivých názvů obrazů oddělených čárkami, používaný pro volby v rozhraní.
* `ALL_TEX_LIVE_DOCKER_IMAGES` **(povinné),** Seznam obrazů TeX Live k použití oddělený čárkami. Pokud se pro nasazení používá Overleaf Toolkit, budou tyto obrazy staženy nebo aktualizovány. Chcete-li stahování přeskočit, nastavte `SIBLING_CONTAINERS_PULL=false` v `config/overleaf.rc`.

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

Zde je příklad, kdy pro nové projekty používáme jako výchozí TeX Live 2025 a pro stávající projekty ponecháme 2024.

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

{% 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é obrazy TeX Live Docker od roku 2020 do 2026. Před použitím této konfigurace doporučujeme mít alespoň 256 GB volného úložiště.

{% 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é vysvětlení viz [#known-issues](#known-issues "mention")
{% endhint %}

### Dostupné obrazy TeX Live

Toto je sada obrazů TeX Live, které jsou speciálně optimalizované pro Overleaf a lze je také přidat do `TEX_LIVE_DOCKER_IMAGE` a `ALL_TEX_LIVE_DOCKER_IMAGES`:

* `ghcr.io/ayaka-notes/texlive-full:2026.1` (Také `latest` tag)
* `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 jsou 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` jiným zrcadlovým serverem 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`.

Pokud ale opravdu chcete používat vlastní registr obrazů, přidejte prosím:

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

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

{% endcode %}

Poté 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`

Podrobnější informace najdete v níže uvedeném zdrojovém kódu, kde je vysvětleno, 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
  // Celý 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 nově vytvořených projektů
  Settings.currentImageName = process.env.TEX_LIVE_DOCKER_IMAGE
}
```

{% endcode %}

### Známé problémy

Toto je reálný případ z komunity Overleaf:

> Při použití `6.0.1-ext-v3.3`, mám 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 další obraz texlive `danteev/texlive:2025-10-15` a obě tyto proměnné změnil 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 logách vidím následující:
>
> {% code overflow="wrap" %}
>
> ```
> {"name":"clsi","level":50,"err":{"message":"(HTTP code 404) neexistuje takový kontejner - Žádný takový obraz: texlive/texlive:latest-full ","name":"Error","stack":"Error: (HTTP code 404) neexistuje takový kontejner - Žádný takový obraz: texlive/texlive:latest-full ... 
> ```
>
> {% endcode %}
>
> Zdá se, že aktualizovaná nastavení v `variables.env` nemají žádný účinek. Kompilace se stále snaží spustit `texlive/texlive:latest-full` obraz, nikoli nový obraz.
>
> Zkusil jsem restartovat, smazat kontejnery a spustit to znovu, ale problém je stále stejný.
>
> Nějaké řešení?

Z důvodu některých technických omezení platí, že pokud nastavíte pouze jeden obraz Docker 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 poté, co budete nějakou dobu provozovat svou instanci Overleaf, můžete chtít upravit obraz TeXLive na `texlive-fullB:latest`. Pak uvidíte, že vaši uživatelé nejsou schopni 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 uložen v databázi. *Název obrazu v databázi se změní teprve tehdy, když uživatel přepne verzi TeXLive svého projektu, například z roku 2024 na 2025*.

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

Pokud poskytnete pouze jeden obraz Dockeru, uživatelé nebudou moci upravit obraz používaný 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í

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

{% code overflow="wrap" %}

```bash
bin/logs clsi
```

{% endcode %}


---

# 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/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.
