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

# Sandlådekörda kompileringar

Overleaf Pro levereras med möjligheten att köra kompileringar i en säkrad sandboxmiljö för företagssäkerhet. Detta görs genom att köra varje projekt i sin egen säkrade Docker-miljö.

### Förbättrad säkerhet

Sandboxade kompileringar är den rekommenderade metoden för Server Pro eftersom många LaTeX-dokument kräver/har möjlighet att köra godtyckliga shell-kommandon som en del av PDF-kompileringsprocessen. Om du använder Sandboxade kompileringar körs varje kompilering i en separat Docker-behållare med begränsade funktioner som inte delas med någon annan användare eller något annat projekt och som inte har åtkomst till externa resurser såsom värdens nätverk.

{% hint style="warning" %}
Om du försöker köra Overleaf Pro **utan** Sandboxade kompileringar körs kompileringen tillsammans med andra samtidiga kompileringar i den huvudsakliga Docker-behållaren och användarna har full läs- och skrivåtkomst till `sharelatex` behållarresurser (filsystem, nätverk och miljövariabler) när LaTeX-kompileringar körs.
{% endhint %}

### Enklare pakethantering

För att undvika att manuellt installera paket rekommenderar vi att du aktiverar Sandboxade kompileringar. Detta är en konfigurerbar inställning i Server Pro som ger dina användare tillgång till samma TeX Live-miljö som på overleaf.com men inom din egen lokala installation. TeX Live-avbildningar som används av Sandboxade kompileringar innehåller de mest populära paketen och teckensnitten som testats mot våra galleri-mallar, vilket säkerställer maximal kompatibilitet med lokala projekt.

Om du aktiverar Sandboxade kompileringar kan du konfigurera vilka TeX Live-versioner användare kan välja mellan i sitt projekt, samt ange en standardversion av TeX Live-avbilden för nya projekt.

{% hint style="info" %}
Om du försöker köra Overleaf Pro utan Sandboxade kompileringar kommer din instans som standard att använda en grundläggande schemaversion av TeX Live för kompileringar. Denna grundversion är lättviktig och innehåller endast en mycket begränsad delmängd av LaTeX-paket, vilket sannolikt leder till fel om saknade paket för dina användare, särskilt om de försöker använda förbyggda mallar.
{% endhint %}

Eftersom Overleaf Pro har utformats för att fungera offline finns det inget automatiserat sätt att integrera galleri-mallar från overleaf.com i din lokala installation; det är dock möjligt att göra detta manuellt per mall. För mer information om hur detta fungerar, se vår guide om att överföra mallar från overleaf.com: [/pages/f623ff96e4601888b696fbe9a3038fba9a81037e#transferring-templates-from-overleaf.com](https://ayakaleaf-pro.ayaka.space/on-premises/sv/konfiguration/overleaf-toolkit/pages/f623ff96e4601888b696fbe9a3038fba9a81037e#transferring-templates-from-overleaf.com "mention").

{% hint style="info" %}
Sandboxade kompileringar kräver att `sharelatex` behållaren har åtkomst till Docker-socketen på värdmaskinen (via en bind-mount) så att den kan hantera dessa syskonkompilationsbehållare.
{% endhint %}

## Så här fungerar det

När Sandboxade kompileringar är aktiverade monteras Docker-socketen från värdmaskinen in i `sharelatex` behållaren, så att kompilatorservicen i behållaren kan skapa nya Docker-behållare på värden. Sedan, för varje körning av kompilatorn i varje projekt, gör LaTeX-kompilatorservicen (CLSI) följande:

* Skriver ut projektfilerna till en plats i `OVERLEAF_DATA_PATH`.
* Använder den monterade Docker-socketen för att skapa en ny `texlive` behållare för kompileringskörningen.
* Låter `texlive` behållaren läsa projektdata från platsen under `OVERLEAF_DATA_PATH`.
* Kompilerar projektet i `texlive` behållaren.

### Aktivera Sandboxade kompileringar

#### För Toolkit-användare

För att aktivera sandboxade kompileringar (även kallade syskoncontainrar), ange följande konfigurationsalternativ i `overleaf-toolkit/config/overleaf.rc`:

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

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

{% endcode %}

#### För Docker Compose-användare <a href="#docker-compose-example" id="docker-compose-example"></a>

{% hint style="danger" %}
Från och med Overleaf CE/Server Pro `5.0.3` har miljövariabler fått nya namn från `SHARELATEX_*` till `OVERLEAF_*`.
{% endhint %}

Om du använder en `4.x` version (eller tidigare) ska du se till att variablerna har rätt prefix (t.ex. `SHARELATEX_MONGO_URL` i stället för `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>

### Ändra TexLive-avbilden

{% hint style="info" %}
För användare på fastlandet Kina kan du använda `ghcr.nju.edu.cn` för att snabba upp din nedladdning.
{% endhint %}

Overleaf Pro använder tre miljövariabler för att avgöra vilka TeX Live-avbildningar som ska användas för Sandboxade kompileringar:

* `TEX_LIVE_DOCKER_IMAGE` **(krävs),** Standardavbilden av TeX Live som används för att kompilera nya projekt. Denna avbild måste ingå i `ALL_TEX_LIVE_DOCKER_IMAGES`.
* `ALL_TEX_LIVE_DOCKER_IMAGE_NAMES` **(krävs),** En kommaseparerad lista med vänliga namn för avbildningarna, används för frontendalternativ.
* `ALL_TEX_LIVE_DOCKER_IMAGES` **(krävs),** En kommaseparerad lista med TeX Live-avbildningar att använda. Om Overleaf Toolkit används för distribution kommer dessa avbildningar att hämtas eller uppdateras. För att hoppa över nedladdning, ange `SIBLING_CONTAINERS_PULL=false` i `config/overleaf.rc`.

När du startar din Overleaf Pro-instans med `bin/up` kommandot hämtar Toolkit automatiskt alla avbildningar som listas i `ALL_TEX_LIVE_DOCKER_IMAGES`.

Här är ett exempel där vi använder TeX Live 2025 som standard för nya projekt och behåller 2024 för befintliga projekt.

{% tabs %}
{% tab title="vanlig installation" %}
Följande konfiguration installerar alla fullständiga TeX Live-Dockeravbildningar från 2025 till 2026. Vi rekommenderar att du har minst 80 GB tillgängligt lagringsutrymme innan du använder denna konfiguration.

{% 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="fullständig installation" %}
Följande konfiguration installerar alla fullständiga TeX Live-Dockeravbildningar från 2020 till 2026. Vi rekommenderar att du har minst 256 GB tillgängligt lagringsutrymme innan du använder denna konfiguration.

{% 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" %}
Det rekommenderas starkt att ange **minst 2 texlive-full-avbildningar**. För detaljerad orsak, se [#known-issues](#known-issues "mention")
{% endhint %}

### Tillgängliga TeX Live-avbildningar

Detta är en serie TeX Live-avbildningar som är speciellt optimerade för Overleaf och kan också läggas till i `TEX_LIVE_DOCKER_IMAGE` och `ALL_TEX_LIVE_DOCKER_IMAGES`:

* `ghcr.io/ayaka-notes/texlive-full:2026.1` (Även `senaste` tagg)
* `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" %}
Det finns ett strikt schema för hur avbildningar **måste** taggas (följande regex gäller `^[0-9]+.[0-9]+`, där det första talet avgör TeX Live-året och det andra patchversionen).
{% endhint %}

### Kan jag använda ett annat bildregister

> Vissa undrar kanske om jag kan ersätta `ghcr.io` med en annan spegelsajt, eller byta texlive till en annan avbild från Docker Hub?

Nej, vi rekommenderar det inte eftersom konfigurationen är relativt komplicerad. Om du hämtar från en spegelsajt kan du byta namn på din avbild till `ghcr.io/ayaka-notes/texlive-full`.

Men om du verkligen vill använda ditt eget image registry, lägg till:

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

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

{% endcode %}

Sedan behöver du se till att alla avbildningar av texlive finns i `your-repo`, till exempel

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

För detaljerad information, läs källkoden nedan för att förstå hur vi tolkar din miljövariabel:

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

```mjs
if (process.env.SANDBOXED_COMPILES === 'true') {
  // Ange standardavbild om ingen har angetts
  let imageRootPath = process.env.IMAGE_ROOT || "ghcr.io/ayaka-notes";
  // Exportera imageRoot till Settings
  Settings.imageRoot = imageRootPath

  // allowedImageNames ska vara:
  // [
  //  { 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],
    }))
  
  // I slutändan kommer imageName att sättas ihop med imageRoot för att bilda den fullständiga avbildsökvägen
  // Det fullständiga namnet kommer att vara som: ghcr.io/ayaka-notes/texlive-2023:latest

  // Ange standardavbildsnamn om inget har angetts
  if(!process.env.TEX_LIVE_DOCKER_IMAGE) {
    process.env.TEX_LIVE_DOCKER_IMAGE = imageRootPath + "/" + Settings.allowedImageNames[0].imageName
  }

  // Exportera currentImageName till Settings
  // Detta är avbildsnamnet för nyss skapade projekt
  Settings.currentImageName = process.env.TEX_LIVE_DOCKER_IMAGE
}
```

{% endcode %}

### Kända problem

Detta är ett verkligt fall från Overleaf-communityn:

> Med `6.0.1-ext-v3.3`, har jag dessa inställningar i `variables.env`:
>
> ```dotenv
> TEX_LIVE_DOCKER_IMAGE=texlive/texlive:latest-full
> ALL_TEX_LIVE_DOCKER_IMAGES=texlive/texlive:latest-full
> ```
>
> Det fungerar bra med `texlive/texlive:latest-full`. Men jag hämtade en annan texlive-avbild `danteev/texlive:2025-10-15` och ändrade båda dessa variabler till det nya avbildningsnamnet men det fungerar inte:
>
> ```dotenv
> TEX_LIVE_DOCKER_IMAGE=danteev/texlive:2025-10-15
> ALL_TEX_LIVE_DOCKER_IMAGES=danteev/texlive:2025-10-15
> ```
>
> I loggarna ser jag följande:
>
> {% 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 %}
>
> Det verkar som att de uppdaterade inställningarna i `variables.env` inte träder i kraft. Kompileringen försöker fortfarande köra `texlive/texlive:latest-full` avbildningen, inte den nya avbildningen.
>
> Jag försökte starta om, ta bort behållarna och köra igen, men samma problem kvarstår.
>
> Några lösningar?

På grund av vissa tekniska begränsningar, om du bara sätter upp en enda Docker TeXLive-avbild, såsom `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
```

Och efter att ha kört din Overleaf-instans en tid kanske du vill ändra TeXLive-avbilden till `texlive-fullB:latest`. Då kommer du att se att dina användare inte kan kompilera alla projekt.

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

Detta beror på att namnet på TeXLive-Full-avbilden (för sandboxkompilering) i varje projekt lagras i databasen. *Först när användaren byter sitt projekts TeXLive-version, till exempel från 2024 till 2025, ändras avbildningsnamnet i databasen*.

När CLSI kompilerar ett projekt använder den avbildningsnamnet i databasen för att direkt kompilera projektet.

Om du bara tillhandahåller en Docker-avbild kommer användarna inte att kunna ändra avbilden som används för att kompilera projektet. I detta fall behöver du skriva ett skript för att **manuellt ändra** TeXLive-avbilden för alla användarprojekt i mongoDB.

### Felsökning

Kör följande kommando för att kontrollera clsi-loggen från toolkit:

{% 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/sv/konfiguration/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.
