> For the complete documentation index, see [llms.txt](https://overleaf-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://overleaf-pro.ayaka.space/on-premises/on-premises-cs/konfigurace/overleaf-toolkit/sandboxovane-kompilace.md).

# Sandboxované kompilace

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

### Vylepšené zabezpečení

Sandboxované kompilace jsou doporučeným přístupem pro Server Pro, protože mnoho dokumentů LaTeX vyžaduje nebo má možnost během procesu kompilace PDF spouštět libovolné shellové příkazy. Pokud použijete sandboxované kompilace, 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 hostitelská síť.

{% hint style="warning" %}
Pokud se pokusíte spustit Overleaf Pro **bez** sandboxovaných kompilací, kompilace poběží vedle dalších souběžných kompilací v hlavním kontejneru Docker a uživatelé mají plný přístup pro čtení i 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 se předešlo ruční instalaci balíčků, doporučujeme povolit sandboxované kompilace. Jde o 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í nejpoužívanější balíčky a fonty otestované proti našim šablonám galerie, což zajišťuje maximální kompatibilitu s lokálními projekty.

Povolení sandboxovaných kompilací vám umožní 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 sandboxovaných kompilací, vaše instance bude pro kompilace ve výchozím nastavení používat základní schéma verze TeX Live. Tato základní verze je lehká a obsahuje pouze velmi omezenou podmnožinu balíčků LaTeX, což s velkou pravděpodobností povede k chybám chybějících balíčků 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 z 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://overleaf-pro.ayaka.space/on-premises/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 stroji (prostřednictvím připojení bind mount), aby mohl spravovat tyto sesterské kontejnery pro kompilaci.
{% endhint %}

## Jak to funguje

Když jsou sandboxované kompilace povoleny, Docker socket bude namountován z hostitelského stroje do `sharelatex` kontejneru, aby služba kompilátoru v kontejneru mohla na hostiteli vytvářet nové kontejnery Docker. Poté pro každý běh kompilátoru v každém projektu provede služba kompilátoru LaTeXu (CLSI) následující kroky:

* Zapsat soubory projektu do umístění uvnitř `v`.
* 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 `v`.
* Zkompilovat projekt uvnitř `texlive` kontejneru.

### Povolení sandboxovaných kompilací&#xD;

#### Pro uživatele Toolkitu

Chcete-li povolit sandboxované kompilace (známé také jako sesterské kontejnery), nastavte následující konfigurační volby 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 `4.x` verzí (nebo dřívější) se prosím ujistěte, že proměnné mají odpovídající předponu (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>

### Změna obrazu TexLive

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

Overleaf 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` **(vyžadováno),** 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` **(vyžadováno),** Seznam přátelských názvů pro obrazy oddělených čárkami, používaný pro možnosti ve frontendu.
* `ALL_TEX_LIVE_DOCKER_IMAGES` **(vyžadováno),** Seznam obrazů TeX Live oddělených čárkami, které se mají použít. Pokud je pro nasazení použit Overleaf Toolkit, tyto obrazy budou 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í vaší 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, kde jako výchozí používáme TeX Live 2025 pro nové projekty a pro existující projekty ponecháváme použití verze 2024.

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

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

{% endcode %}

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

### Dostupné obrazy TeX Live

Jedná se o sadu 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`:&#x20;

* `ghcr.io/ayaka-notes/texlive-full:2025.1` (také `latest` značka)
* `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]+`a první číslo určuje rok TeX Live a druhé verzi opravy).
{% endhint %}

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

> Některé lidi možná napadne, 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`

Pro podrobné informace si přečtěte níže uvedený zdrojový kód, abyste pochopili, jak parsujeme 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 nebyl zadán
  let imageRootPath = process.env.IMAGE_ROOT || "ghcr.io/ayaka-notes";
  // Exportovat imageRoot do Settings
  Settings.imageRoot = imageRootPath

  // allowedImageNames by měly 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 bude imageName složen 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 nebyl 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

> 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 obě tyto proměnné jsem 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) no such container - No such image: texlive/texlive:latest-full ","name":"Error","stack":"Error: (HTTP code 404) no such container - No such image: texlive/texlive:latest-full ... 
> ```
>
> {% endcode %}
>
> Zdá se, že aktualizovaná nastavení v `variables.env` se neprojevují. Kompilace se stále pokouší spustit `texlive/texlive:latest-full` obraz, ne nový obraz.
>
> Zkusil jsem restartovat, smazat kontejnery a spustit znovu, ale problém je pořád stejný.
>
> Nějaká řešení?

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

```
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 bude vaše instance overleaf nějakou dobu spuštěná, možná budete chtít upravit obraz TeXLive na `texlive-fullB:latest`. Pak zjistíte, že vaši uživatelé nemohou kompilovat 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 sandboxovou kompilaci) je v každém projektu uložen v databázi. *Teprve když uživatel přepne 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 obraz Dockeru, uživatelé nebudou moci změnit obraz použitý ke kompilaci projektu. V takovém případě musíte napsat skript pro **ručně upravit** 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://overleaf-pro.ayaka.space/on-premises/on-premises-cs/konfigurace/overleaf-toolkit/sandboxovane-kompilace.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.
