> 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/el/rythmisi/overleaf-toolkit/apomonomenes-metaglottiseis.md).

# Απομονωμένες Μεταγλωττίσεις

Το Overleaf Pro συνοδεύεται από την επιλογή να εκτελεί μεταγλωττίσεις σε ένα ασφαλές περιβάλλον sandbox για ασφάλεια επιπέδου επιχείρησης. Το κάνει αυτό εκτελώντας κάθε έργο στο δικό του ασφαλές περιβάλλον docker.

### Βελτιωμένη ασφάλεια

Οι μεταγλωττίσεις σε sandbox αποτελούν τη συνιστώμενη προσέγγιση για το Server Pro λόγω του ότι πολλά έγγραφα LaTeX απαιτούν/έχουν τη δυνατότητα να εκτελούν αυθαίρετες εντολές shell ως μέρος της διαδικασίας μεταγλώττισης PDF. Αν χρησιμοποιείτε Sandboxed Compiles, κάθε μεταγλώττιση εκτελείται σε ξεχωριστό Docker container με περιορισμένες δυνατότητες που δεν μοιράζονται με κανέναν άλλο χρήστη ή έργο και δεν έχει πρόσβαση σε εξωτερικούς πόρους όπως το δίκτυο του host.

{% hint style="warning" %}
Αν προσπαθήσετε να εκτελέσετε το Overleaf Pro **χωρίς** Sandboxed Compiles, η μεταγλώττιση εκτελείται παράλληλα με άλλες ταυτόχρονες μεταγλωττίσεις μέσα στο κύριο κοντέινερ Docker και οι χρήστες έχουν πλήρη δικαιώματα ανάγνωσης και εγγραφής στους `sharelatex` πόρους του κοντέινερ (σύστημα αρχείων, δίκτυο και μεταβλητές περιβάλλοντος) κατά την εκτέλεση μεταγλωττίσεων LaTeX.
{% endhint %}

### Ευκολότερη διαχείριση πακέτων

Για να αποφύγετε τη χειροκίνητη εγκατάσταση πακέτων, συνιστούμε να ενεργοποιήσετε το Sandboxed Compiles. Πρόκειται για μια ρυθμιζόμενη επιλογή μέσα στο Server Pro που θα παρέχει στους χρήστες σας πρόσβαση στο ίδιο περιβάλλον TeX Live με αυτό στο overleaf.com, αλλά μέσα στη δική σας τοπική εγκατάσταση. Οι εικόνες TeX Live που χρησιμοποιούνται από το Sandboxed Compiles περιέχουν τα πιο δημοφιλή πακέτα και γραμματοσειρές, δοκιμασμένα με τα πρότυπα της συλλογής μας, διασφαλίζοντας μέγιστη συμβατότητα με έργα on-premise.

Η ενεργοποίηση του Sandboxed Compiles σάς επιτρέπει να ρυθμίσετε ποιες εκδόσεις TeX Live μπορούν να επιλέγουν οι χρήστες μέσα από το έργο τους, μαζί με τον ορισμό μιας προεπιλεγμένης έκδοσης εικόνας TeX Live για νέα έργα.

{% hint style="info" %}
Αν προσπαθήσετε να εκτελέσετε το Overleaf Pro χωρίς Sandboxed Compiles, η εγκατάστασή σας θα χρησιμοποιεί από προεπιλογή μια βασική έκδοση scheme του TeX Live για τις μεταγλωττίσεις. Αυτή η βασική έκδοση είναι ελαφριά και περιέχει μόνο ένα πολύ περιορισμένο υποσύνολο πακέτων LaTeX, κάτι που πολύ πιθανό θα οδηγήσει σε σφάλματα έλλειψης πακέτων για τους χρήστες σας, ειδικά αν προσπαθήσουν να χρησιμοποιήσουν προκατασκευασμένα πρότυπα.
{% endhint %}

Καθώς το Overleaf Pro έχει σχεδιαστεί να λειτουργεί εκτός σύνδεσης, δεν υπάρχει αυτοματοποιημένος τρόπος ενσωμάτωσης των προτύπων γκαλερί του overleaf.com στην τοπική σας εγκατάσταση· ωστόσο, είναι δυνατό να γίνει αυτό χειροκίνητα ανά πρότυπο. Για περισσότερες πληροφορίες σχετικά με το πώς λειτουργεί αυτό, δείτε τον οδηγό μας για τη μεταφορά προτύπων από το overleaf.com: [/pages/0ccb7c3011304e4a00d5682ba8daf59d82e2bd02#transferring-templates-from-overleaf.com](https://overleaf-pro.ayaka.space/on-premises/el/rythmisi/overleaf-toolkit/pages/0ccb7c3011304e4a00d5682ba8daf59d82e2bd02#transferring-templates-from-overleaf.com "mention").

{% hint style="info" %}
Το Sandboxed Compiles απαιτεί ότι το `sharelatex` κοντέινερ έχει πρόσβαση στο Docker socket στο μηχάνημα host (μέσω bind mount) ώστε να μπορεί να διαχειρίζεται αυτά τα γειτονικά κοντέινερ μεταγλώττισης.
{% endhint %}

## Πώς λειτουργεί

Όταν το Sandboxed Compiles είναι ενεργοποιημένο, το Docker socket θα προσαρτηθεί από το μηχάνημα host στο `sharelatex` κοντέινερ, έτσι ώστε η υπηρεσία μεταγλώττισης μέσα στο κοντέινερ να μπορεί να δημιουργεί νέα Docker containers στον host. Στη συνέχεια, για κάθε εκτέλεση του μεταγλωττιστή σε κάθε έργο, η υπηρεσία μεταγλωττιστή LaTeX (CLSI) θα κάνει τα εξής:

* Θα εγγράψει τα αρχεία του έργου σε μια τοποθεσία μέσα στο `OVERLEAF_DATA_PATH`.
* Θα χρησιμοποιήσει το προσαρτημένο Docker socket για να δημιουργήσει ένα νέο `texlive` κοντέινερ για την εκτέλεση της μεταγλώττισης.
* Θα κάνει το `texlive` κοντέινερ να διαβάσει τα δεδομένα του έργου από την τοποθεσία κάτω από το `OVERLEAF_DATA_PATH`.
* Θα μεταγλωττίσει το έργο μέσα στο `texlive` κοντέινερ.

### Ενεργοποίηση Sandboxed Compiles&#xD;

#### Για χρήστη του Toolkit

Για να ενεργοποιήσετε τις sandboxed μεταγλωττίσεις (επίσης γνωστές ως γειτονικά κοντέινερ), ορίστε τις ακόλουθες επιλογές ρύθμισης στο `overleaf-toolkit/config/overleaf.rc`:

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

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

{% endcode %}

#### Για χρήστη του Docker Compose <a href="#docker-compose-example" id="docker-compose-example"></a>

{% hint style="danger" %}
Ξεκινώντας με το Overleaf CE/Server Pro `5.0.3` οι μεταβλητές περιβάλλοντος έχουν μετονομαστεί από `SHARELATEX_*` σε `OVERLEAF_*`.
{% endhint %}

Αν χρησιμοποιείτε μια `4.x` έκδοση (ή νωρίτερα) βεβαιωθείτε ότι οι μεταβλητές έχουν το κατάλληλο πρόθεμα (π.χ. `SHARELATEX_MONGO_URL` αντί για `OVERLEAF_MONGO_URL`).

<pre class="language-yml"><code class="lang-yml">έκδοση: '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

{% hint style="info" %}
Για χρήστες στην ηπειρωτική Κίνα, μπορείτε να χρησιμοποιήσετε `ghcr.nju.edu.cn` για να επιταχύνετε τη λήψη σας.&#x20;
{% endhint %}

Το Overleaf Pro χρησιμοποιεί τρεις μεταβλητές περιβάλλοντος για να καθορίσει ποιες εικόνες TeX Live θα χρησιμοποιούνται για το Sandboxed Compiles:

* `TEX_LIVE_DOCKER_IMAGE` **(απαιτείται),** Η προεπιλεγμένη εικόνα TeX Live που χρησιμοποιείται για τη μεταγλώττιση νέων έργων. Αυτή η εικόνα πρέπει να περιλαμβάνεται στο `ALL_TEX_LIVE_DOCKER_IMAGES`.
* `ALL_TEX_LIVE_DOCKER_IMAGE_NAMES` **(απαιτείται),** Μια λίστα με ονόματα φιλικά προς τον χρήστη, διαχωρισμένα με κόμμα, για τις εικόνες, που χρησιμοποιούνται για τις επιλογές του frontend.
* `ALL_TEX_LIVE_DOCKER_IMAGES` **(απαιτείται),** Μια λίστα με εικόνες TeX Live, διαχωρισμένες με κόμμα, προς χρήση. Αν το Overleaf Toolkit χρησιμοποιείται για ανάπτυξη, αυτές οι εικόνες θα ληφθούν ή θα ενημερωθούν. Για να παραλείψετε τη λήψη, ορίστε `SIBLING_CONTAINERS_PULL=false` στο `config/overleaf.rc`.

Όταν ξεκινάτε το στιγμιότυπο Overleaf Pro σας χρησιμοποιώντας την `bin/up` εντολή, το Toolkit θα τραβήξει αυτόματα όλες τις εικόνες που παρατίθενται στο `ALL_TEX_LIVE_DOCKER_IMAGES`.

Να ένα παράδειγμα όπου ορίζουμε ως προεπιλογή το TeX Live 2025 για νέα έργα και κρατάμε το 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" %}
Συνιστάται ιδιαίτερα να ορίσετε **τουλάχιστον 2 εικόνες texlive-full**. Για λεπτομερή λόγο, δείτε [#known-issues](#known-issues "mention")
{% endhint %}

### Διαθέσιμες εικόνες TeX Live

Πρόκειται για μια σειρά εικόνων TeX Live που είναι ειδικά βελτιστοποιημένες για το Overleaf, και μπορούν επίσης να προστεθούν στο `TEX_LIVE_DOCKER_IMAGE` και `ALL_TEX_LIVE_DOCKER_IMAGES`:&#x20;

* `ghcr.io/ayaka-notes/texlive-full:2025.1` (Επίσης `latest` ετικέτα)
* `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" %}
Υπάρχει ένα αυστηρό σχήμα σχετικά με τον τρόπο με τον οποίο οι εικόνες **πρέπει** να επισημαίνονται (ισχύει το ακόλουθο regex `^[0-9]+.[0-9]+`, όπου ο πρώτος αριθμός καθορίζει το έτος TeX Live και ο δεύτερος την έκδοση διόρθωσης).
{% endhint %}

### Μπορώ να χρησιμοποιήσω άλλο μητρώο εικόνων;

> Κάποιοι μπορεί να αναρωτιούνται αν μπορώ να αντικαταστήσω `ghcr.io` με κάποιον άλλο ιστότοπο mirror ή να αλλάξω το texlive σε άλλη εικόνα από το Docker Hub;

Όχι, δεν το συνιστούμε επειδή η ρύθμιση είναι σχετικά περίπλοκη. Αν κάνετε λήψη από έναν ιστότοπο mirror, μπορείτε να μετονομάσετε την εικόνα σας σε `ghcr.io/ayaka-notes/texlive-full`.

Αλλά, αν πραγματικά θέλετε να χρησιμοποιήσετε το δικό σας Image Registry, προσθέστε:

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

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

{% endcode %}

Στη συνέχεια, πρέπει να βεβαιωθείτε ότι όλες οι εικόνες του texlive βρίσκονται στο `your-repo`, όπως

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

Για λεπτομερείς πληροφορίες, διαβάστε τον παρακάτω πηγαίο κώδικα για να κατανοήσετε πώς αναλύουμε τη μεταβλητή περιβάλλοντος σας:

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

```mjs
if (process.env.SANDBOXED_COMPILES === 'true') {
  // Ορισμός προεπιλεγμένης ρίζας εικόνας, αν δεν έχει δοθεί
  let imageRootPath = process.env.IMAGE_ROOT || "ghcr.io/ayaka-notes";
  // Εξαγωγή του imageRoot στις Ρυθμίσεις
  Settings.imageRoot = imageRootPath

  // οι επιτρεπόμενεςImageNames θα πρέπει να είναι:
  // [
  //  { 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],
    }))
  
  // Στο τέλος, το imageName θα συνδυαστεί με το imageRoot για να σχηματίσει την πλήρη διαδρομή της εικόνας
  // Το πλήρες όνομα θα είναι σαν: ghcr.io/ayaka-notes/texlive-2023:latest

  // Ορισμός προεπιλεγμένου ονόματος εικόνας, αν δεν έχει δοθεί
  if(!process.env.TEX_LIVE_DOCKER_IMAGE) {
    process.env.TEX_LIVE_DOCKER_IMAGE = imageRootPath + "/" + Settings.allowedImageNames[0].imageName
  }

  // Εξαγωγή του currentImageName στις Ρυθμίσεις
  // Αυτό είναι το όνομα εικόνας των νεοδημιουργημένων έργων
  Settings.currentImageName = process.env.TEX_LIVE_DOCKER_IMAGE
}
```

{% endcode %}

### Γνωστά ζητήματα

> Χρήση `6.0.1-ext-v3.3`, έχω αυτές τις ρυθμίσεις στο `variables.env`:
>
> ```dotenv
> TEX_LIVE_DOCKER_IMAGE=texlive/texlive:latest-full
> ALL_TEX_LIVE_DOCKER_IMAGES=texlive/texlive:latest-full
> ```
>
> Αυτό λειτουργεί σωστά με το `texlive/texlive:latest-full`. Ωστόσο, τράβηξα μια άλλη εικόνα texlive `danteev/texlive:2025-10-15` και άλλαξα και αυτές τις δύο μεταβλητές στο νέο όνομα εικόνας, αλλά δεν λειτουργεί:
>
> ```dotenv
> TEX_LIVE_DOCKER_IMAGE=danteev/texlive:2025-10-15
> ALL_TEX_LIVE_DOCKER_IMAGES=danteev/texlive:2025-10-15
> ```
>
> Στα logs, βλέπω τα εξής:
>
> {% 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 %}
>
> Φαίνεται ότι οι ενημερωμένες ρυθμίσεις στο `variables.env` δεν τίθενται σε ισχύ. Η μεταγλώττιση εξακολουθεί να προσπαθεί να εκτελέσει την `texlive/texlive:latest-full` εικόνα, όχι τη νέα εικόνα.
>
> Προσπάθησα να κάνω επανεκκίνηση, να διαγράψω τα κοντέινερ και να το εκτελέσω ξανά, αλλά παραμένει το ίδιο πρόβλημα.
>
> Κάποιες λύσεις;

Λόγω ορισμένων τεχνικών περιορισμών, αν ρυθμίσετε μόνο μία εικόνα Docker TeXLive, όπως `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
```

Και αφού τρέξετε το στιγμιότυπο Overleaf σας για λίγο, ίσως θελήσετε να τροποποιήσετε την εικόνα TeXLive σε `texlive-fullB: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
```

Αυτό συμβαίνει επειδή το όνομα της εικόνας TeXLive-Full (για sandbox compile) σε κάθε έργο διατηρείται στη βάση δεδομένων. *Μόνο όταν ο χρήστης αλλάξει την έκδοση TeXLive του έργου του, για παράδειγμα από το 2024 στο 2025, θα αλλάξει το όνομα της εικόνας στη βάση δεδομένων*.

Όταν το CLSI μεταγλωττίζει ένα έργο, χρησιμοποιεί το όνομα της εικόνας κοντέινερ που βρίσκεται στη βάση δεδομένων για να μεταγλωττίσει απευθείας το έργο.

Αν παρέχετε μόνο μία εικόνα Docker, οι χρήστες δεν θα μπορούν να τροποποιήσουν την εικόνα που χρησιμοποιείται για τη μεταγλώττιση του έργου. Σε αυτή την περίπτωση, πρέπει να γράψετε ένα script για να **τροποποιήσετε χειροκίνητα** την εικόνα TeXLive για όλα τα έργα των χρηστών στη mongoDB.

### Αποσφαλμάτωση

Εκτελέστε την ακόλουθη εντολή για να ελέγξετε το log του clsi από το 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://overleaf-pro.ayaka.space/on-premises/el/rythmisi/overleaf-toolkit/apomonomenes-metaglottiseis.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.
