> 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/fi/konfiguraatio/overleaf-toolkit/sandboxed-compiles.md).

# Eristetyt käännökset

Overleaf Pro sisältää mahdollisuuden suorittaa käännöksiä suojatussa hiekkalaatikkoympäristössä yritystason tietoturvaa varten. Se tekee tämän ajamalla jokaisen projektin omassa suojatussa Docker-ympäristössään.

### Parannettu tietoturva

Sandboxoidut käännökset ovat suositeltu tapa Server Prossa, koska monet LaTeX-asiakirjat vaativat/pystyvät suorittamaan mielivaltaisia shell-komentoja osana PDF:n käännösprosessia. Jos käytät sandboxoituja käännöksiä, jokainen käännös ajetaan erillisessä Docker-kontissa, jonka ominaisuudet ovat rajoitetut, eikä niitä jaeta minkään muun käyttäjän tai projektin kanssa, eikä sillä ole pääsyä ulkoisiin resursseihin, kuten isäntäkoneen verkkoon.

{% hint style="warning" %}
Jos yrität käyttää Overleaf Prota **ilman** sandboxoituja käännöksiä, käännös ajetaan muiden samanaikaisten käännösten rinnalla pää-Docker-kontissa, ja käyttäjillä on täydet luku- ja kirjoitusoikeudet `sharelatex` kontin resursseihin (tiedostojärjestelmä, verkko ja ympäristömuuttujat) LaTeX-käännöksiä ajettaessa.
{% endhint %}

### Helpompi pakettien hallinta

Välttääksesi pakettien manuaalisen asentamisen suosittelemme ottamaan käyttöön sandboxoidut käännökset. Tämä on Server Prossa määritettävä asetus, joka antaa käyttäjillesi pääsyn samaan TeX Live -ympäristöön kuin overleaf.comissa, mutta omassa paikallisessa asennuksessasi. Sandboxoituissa käännöksissä käytettävät TeX Live -kuvat sisältävät suosituimmat paketit ja fontit, joita on testattu galleriamallipohjiamme vasten, mikä varmistaa parhaan yhteensopivuuden paikallisten projektien kanssa.

Sandboxoitujen käännösten käyttöönotto antaa sinun määrittää, mistä TeX Live -versioista käyttäjät voivat valita projektissaan, sekä asettaa oletusarvoisen TeX Live -kuvaversion uusille projekteille.

{% hint style="info" %}
Jos yrität käyttää Overleaf Prota ilman sandboxoituja käännöksiä, instanssisi käyttää oletuksena käännöksissä TeX Live -version perusskeemiversiota. Tämä perusversio on kevyt ja sisältää vain hyvin rajoitetun osajoukon LaTeX-paketteja, mikä todennäköisesti johtaa puuttuvien pakettien virheisiin käyttäjilläsi, erityisesti jos he yrittävät käyttää valmiita mallipohjia.
{% endhint %}

Koska Overleaf Pro on suunniteltu toimimaan offline-tilassa, overleaf.comin galleriamallipohjien integrointiin paikalliseen asennukseesi ei ole automaattista tapaa; se on kuitenkin mahdollista tehdä manuaalisesti mallipohjakohtaisesti. Lisätietoja siitä, miten tämä toimii, saat oppaastamme mallipohjien siirtämiseen overleaf.comista: [/pages/73d47e68b2e18c3356a98f53074cc22bafd13e61#transferring-templates-from-overleaf.com](https://ayakaleaf-pro.ayaka.space/on-premises/fi/konfiguraatio/overleaf-toolkit/pages/73d47e68b2e18c3356a98f53074cc22bafd13e61#transferring-templates-from-overleaf.com "mention").

{% hint style="info" %}
Sandboxoidut käännökset edellyttävät, että `sharelatex` kontilla on pääsy isäntäkoneen Docker-sokettiin (bind mountin kautta), jotta se voi hallita näitä sisarkäännöskontteja.
{% endhint %}

## Miten se toimii

Kun sandboxoidut käännökset on otettu käyttöön, Docker-soketti liitetään isäntäkoneelta `sharelatex` konttiin, jotta kontin kääntäjäpalvelu voi luoda uusia Docker-kontteja isännälle. Sen jälkeen jokaisella kääntäjän ajokerralla jokaisessa projektissa LaTeX-kääntäjäpalvelu (CLSI) tekee seuraavaa:

* Kirjoittaa projektitiedostot sijaintiin, joka on `OVERLEAF_DATA_PATH`.
* Käyttää liitettyä Docker-sokettia uuden `texlive` kontin luomiseksi käännöskertaa varten.
* Antaa `texlive` kontin lukea projektitiedot sijainnista, joka on polun `OVERLEAF_DATA_PATH`.
* Käännä projekti sisällä `texlive` kontin.

### Sandboxoitujen käännösten käyttöönotto

#### Toolkit-käyttäjälle

Ottaaksesi käyttöön sandboxoidut käännökset (tunnetaan myös sisarsäiliöinä), aseta seuraavat määritysasetukset tiedostossa `overleaf-toolkit/config/overleaf.rc`:

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

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

{% endcode %}

#### Docker Compose -käyttäjälle <a href="#docker-compose-example" id="docker-compose-example"></a>

{% hint style="danger" %}
Overleaf CE/Server Prosta alkaen `5.0.3` ympäristömuuttujien nimet on brändätty uudelleen muodosta `SHARELATEX_*` muotoon `OVERLEAF_*`.
{% endhint %}

Jos käytät `4.x` versiota (tai aiempaa), varmista, että muuttujien etuliite on vastaava (esim. `SHARELATEX_MONGO_URL` eikä `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>

### TexLive-kuvan vaihtaminen

{% hint style="info" %}
Manner-Kiinan käyttäjät voivat käyttää `ghcr.nju.edu.cn` nopeuttaaksesi latausta.
{% endhint %}

Overleaf Pro käyttää kolmea ympäristömuuttujaa määrittääkseen, mitä TeX Live -kuvia sandboxoiduissa käännöksissä käytetään:

* `TEX_LIVE_DOCKER_IMAGE` **(vaaditaan),** Uusien projektien kääntämiseen käytettävä oletusarvoinen TeX Live -kuva. Tämän kuvan on oltava mukana `ALL_TEX_LIVE_DOCKER_IMAGES`.
* `ALL_TEX_LIVE_DOCKER_IMAGE_NAMES` **(vaaditaan),** Pilkuilla eroteltu luettelo kuvien käyttäjäystävällisistä nimistä, joita käytetään käyttöliittymän vaihtoehdoissa.
* `ALL_TEX_LIVE_DOCKER_IMAGES` **(vaaditaan),** Pilkuilla eroteltu luettelo käytettävistä TeX Live -kuvista. Jos käyttöönotossa käytetään Overleaf Toolkitia, nämä kuvat ladataan tai päivitetään. Ohittaaksesi latauksen aseta `SIBLING_CONTAINERS_PULL=false` kohtaan `config/overleaf.rc`.

Kun käynnistät Overleaf Pro -instanssisi käyttäen `bin/up` komentoa, Toolkit hakee automaattisesti kaikki kuvat, jotka on listattu muuttujassa `ALL_TEX_LIVE_DOCKER_IMAGES`.

Tässä on esimerkki, jossa asetamme uusille projekteille oletukseksi TeX Live 2025:n ja pidämme 2024:n käytössä olemassa oleville projekteille.

{% tabs %}
{% tab title="tavallinen asennus" %}
Seuraava määritys asentaa kaikki täyden TeX Live -Docker-kuvat vuosilta 2025–2026. Suosittelemme, että käytettävissä on vähintään 80 Gt vapaata tallennustilaa ennen tämän määrityksen käyttöä.

{% 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="täysi asennus" %}
Seuraava määritys asentaa kaikki täyden TeX Live -Docker-kuvat vuosilta 2020–2026. Suosittelemme, että käytettävissä on vähintään 256 Gt vapaata tallennustilaa ennen tämän määrityksen käyttöä.

{% 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" %}
On erittäin suositeltavaa asettaa **vähintään 2 texlive-full-kuvaa**. Tarkemman syyn löydät kohdasta [#known-issues](#known-issues "mention")
{% endhint %}

### Saatavilla olevat TeX Live -kuvat

Nämä ovat joukko TeX Live -kuvia, jotka on erityisesti optimoitu Overleafille; ne voidaan myös lisätä `TEX_LIVE_DOCKER_IMAGE` ja `ALL_TEX_LIVE_DOCKER_IMAGES`:

* `ghcr.io/ayaka-notes/texlive-full:2026.1` (myös `latest` tunniste)
* `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" %}
Kuvien nimeämisestä on tiukka skeema **täytyy** olla merkittyjä (seuraava säännöllinen lauseke pätee `^[0-9]+.[0-9]+`, jossa ensimmäinen numero määrittää TeX Live -vuoden ja toinen korjausversion).
{% endhint %}

### Voinko käyttää muuta kuvarekisteriä

> Jotkut saattavat miettiä, voinko korvata `ghcr.io` toisella peilisivustolla tai vaihtaa texliven johonkin toiseen kuvaan Docker Hubista?

Ei, emme suosittele sitä, koska määritys on melko monimutkainen. Jos lataat peilisivustolta, voit nimetä kuvasi uudelleen muotoon `ghcr.io/ayaka-notes/texlive-full`.

Mutta jos todella haluat käyttää omaa kuvarekisteriäsi, lisää:

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

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

{% endcode %}

Sitten sinun täytyy varmistaa, että kaikki texliven kuvat ovat kohdassa `your-repo`, kuten

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

Tarkempia tietoja varten lue alla oleva lähdekoodi, jotta ymmärrät, miten jäsentämme ympäristömuuttujasi:

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

```mjs
if (process.env.SANDBOXED_COMPILES === 'true') {
  // Aseta oletuskuvan juuri, jos sitä ei ole annettu
  let imageRootPath = process.env.IMAGE_ROOT || "ghcr.io/ayaka-notes";
  // Vie imageRoot asetuksiin
  Settings.imageRoot = imageRootPath

  // allowedImageNamesin pitäisi olla:
  // [
  //  { 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],
    }))
  
  // Lopulta imageName yhdistetään imageRootiin muodostamaan koko kuvapolku
  // Täydellinen nimi on esimerkiksi: ghcr.io/ayaka-notes/texlive-2023:latest

  // Aseta oletuskuvan nimi, jos sitä ei ole annettu
  if(!process.env.TEX_LIVE_DOCKER_IMAGE) {
    process.env.TEX_LIVE_DOCKER_IMAGE = imageRootPath + "/" + Settings.allowedImageNames[0].imageName
  }

  // Vie currentImageName asetuksiin
  // Tämä on uusien luotujen projektien kuvan nimi
  Settings.currentImageName = process.env.TEX_LIVE_DOCKER_IMAGE
}
```

{% endcode %}

### Tunnetut ongelmat

Tämä on todellinen tapaus Overleaf-yhteisöstä:

> Käyttäen `6.0.1-ext-v3.3`, minulla on nämä asetukset tiedostossa `variables.env`:
>
> ```dotenv
> TEX_LIVE_DOCKER_IMAGE=texlive/texlive:latest-full
> ALL_TEX_LIVE_DOCKER_IMAGES=texlive/texlive:latest-full
> ```
>
> Tämä toimii hyvin kuvan `texlive/texlive:latest-full`. Kuitenkin latasin toisen texlive-kuvan `danteev/texlive:2025-10-15` ja vaihdoin molemmat näistä muuttujista uuden kuvan nimeen, mutta se ei toimi:
>
> ```dotenv
> TEX_LIVE_DOCKER_IMAGE=danteev/texlive:2025-10-15
> ALL_TEX_LIVE_DOCKER_IMAGES=danteev/texlive:2025-10-15
> ```
>
> Lokeissa näen seuraavaa:
>
> {% 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 %}
>
> Näyttää siltä, että päivitetyt asetukset tiedostossa `variables.env` eivät ole astuneet voimaan. Käännös yrittää edelleen suorittaa `texlive/texlive:latest-full` kuvaa, ei uutta kuvaa.
>
> Yritin käynnistää uudelleen, poistaa säiliöt ja suorittaa uudelleen, mutta sama ongelma jatkuu.
>
> Onko ratkaisua?

Joidenkin teknisten rajoitusten vuoksi, jos määrität vain yhden Docker TeXLive -kuvan, kuten `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
```

Ja kun olet ajanut Overleaf-instanssiasi jonkin aikaa, saatat haluta vaihtaa TeXLive-kuvaksi `texlive-fullB:latest`. Silloin huomaat, että käyttäjäsi eivät pysty kääntämään kaikkia projekteja.

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

Tämä johtuu siitä, että kunkin projektin TeXLive-Full-kuvan nimi (sandboxoitua käännöstä varten) tallennetaan tietokantaan. *Vasta kun käyttäjä vaihtaa projektinsa TeXLive-version esimerkiksi vuodesta 2024 vuoteen 2025, kuvan nimi muuttuu tietokannassa*.

Kun CLSI kääntää projektin, se käyttää tietokannasta löytyvää säiliökuvan nimeä kääntääkseen projektin suoraan.

Jos annat vain yhden Docker-kuvan, käyttäjät eivät voi muokata kuvaa, jota käytetään projektin kääntämiseen. Tässä tapauksessa sinun täytyy kirjoittaa skripti to **muokata manuaalisesti** TeXLive-kuva kaikkien käyttäjäprojektien osalta MongoDB:ssä.

### Vianetsintä

Aja seuraava komento tarkistaaksesi CLSI:n lokin Toolkitista:

{% 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/fi/konfiguraatio/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.
