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

# Korumalı Alan Derlemeleri

Overleaf Pro, kurumsal güvenlik için derlemeleri güvenli bir sandbox ortamında çalıştırma seçeneğiyle gelir. Bunu, her projeyi kendi güvenli Docker ortamında çalıştırarak yapar.

### Geliştirilmiş güvenlik

Sandboxed Compiles, birçok LaTeX belgesinin PDF derleme sürecinin bir parçası olarak keyfi kabuk komutları çalıştırma gereksinimi/sahip olabilmesi nedeniyle Server Pro için önerilen yaklaşımdır. Sandboxed Compiles kullanırsanız, her derleme sınırlı yeteneklere sahip ayrı bir Docker konteynerinde çalışır; bu yetenekler başka hiçbir kullanıcı veya projeyle paylaşılmaz ve ana ağ gibi dış kaynaklara erişimi yoktur.

{% hint style="warning" %}
Overleaf Pro'yu çalıştırmayı denerseniz **olmadan** Sandboxed Compiles ile derleme, ana Docker konteyneri içinde eşzamanlı diğer derlemelerle birlikte çalışır ve kullanıcıların `sharelatex` konteyner kaynaklarına (dosya sistemi, ağ ve ortam değişkenleri) LaTeX derlemeleri çalıştırılırken tam okuma ve yazma erişimi olur.
{% endhint %}

### Daha kolay paket yönetimi

Paketleri elle yüklemekten kaçınmak için Sandboxed Compiles'i etkinleştirmenizi öneririz. Bu, Server Pro içinde yapılandırılabilir bir ayardır ve kullanıcılarınıza overleaf.com'dakiyle aynı TeX Live ortamına, ancak kendi şirket içi kurulumunuz içinde erişim sağlar. Sandboxed Compiles tarafından kullanılan TeX Live görüntüleri, galeri şablonlarımızla test edilmiş en popüler paketleri ve yazı tiplerini içerir ve şirket içi projelerle maksimum uyumluluk sağlar.

Sandboxed Compiles'i etkinleştirmek, kullanıcıların projeleri içinden seçebilecekleri TeX Live sürümlerini yapılandırmanıza ve yeni projeler için varsayılan bir TeX Live görüntü sürümü belirlemenize olanak tanır.

{% hint style="info" %}
Overleaf Pro'yu Sandboxed Compiles olmadan çalıştırmayı denerseniz, örneğiniz derlemeler için varsayılan olarak TeX Live'ın temel bir şema sürümünü kullanır. Bu temel sürüm hafiftir ve yalnızca çok sınırlı bir LaTeX paketleri alt kümesini içerir; bu da büyük olasılıkla kullanıcılarınız için eksik paket hatalarına yol açar, özellikle de önceden hazırlanmış şablonları kullanmaya çalışırlarsa.
{% endhint %}

Overleaf Pro çevrimdışı çalışacak şekilde tasarlandığından, overleaf.com galeri şablonlarını şirket içi kurulumunuza entegre etmenin otomatik bir yolu yoktur; ancak bunu şablon bazında manuel olarak yapmak mümkündür. Bunun nasıl çalıştığı hakkında daha fazla bilgi için lütfen overleaf.com'dan şablon aktarma rehberimize göz atın: [/pages/3d92c9f99518c5c3a7efcfb565c4a5c3f990c63e#transferring-templates-from-overleaf.com](https://ayakaleaf-pro.ayaka.space/on-premises/tr/yapilandirma/overleaf-toolkit/pages/3d92c9f99518c5c3a7efcfb565c4a5c3f990c63e#transferring-templates-from-overleaf.com "mention").

{% hint style="info" %}
Sandboxed Compiles, `sharelatex` konteynerin bu kardeş derleme konteynerlerini yönetebilmesi için ana makinedeki Docker soketine (bir bind mount aracılığıyla) erişimini gerektirir.
{% endhint %}

## Nasıl çalışır

Sandboxed Compiles etkinleştirildiğinde, Docker soketi ana makineden `sharelatex` konteynerine bağlanır; böylece konteyner içindeki derleyici hizmeti ana makinede yeni Docker konteynerleri oluşturabilir. Ardından her projedeki her derleyici çalıştırması için LaTeX derleyici hizmeti (CLSI) aşağıdakileri yapar:

* Proje dosyalarını içindeki bir konuma yazın `OVERLEAF_DATA_PATH`.
* Bağlanan Docker soketini kullanarak yeni bir `texlive` konteyneri oluşturun.
* Şunun `texlive` konteynerin proje verilerini `OVERLEAF_DATA_PATH`.
* Projeyi içinde derleyin `texlive` konteyner.

### Sandboxed Compiles'i Etkinleştirme

#### Toolkit kullanıcıları için

Korumalı derlemeleri (Sibling konteynerleri olarak da bilinir) etkinleştirmek için, içindeki aşağıdaki yapılandırma seçeneklerini ayarlayın `overleaf-toolkit/config/overleaf.rc`:

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

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

{% endcode %}

#### Docker Compose kullanıcıları için <a href="#docker-compose-example" id="docker-compose-example"></a>

{% hint style="danger" %}
Overleaf CE/Server Pro ile birlikte `5.0.3` ortam değişkenleri yeniden adlandırıldı `SHARELATEX_*` şuna `OVERLEAF_*`.
{% endhint %}

Eğer bir `4.x` sürüm (veya daha eski) kullanıyorsanız, değişkenlerin uygun önekle başladığından emin olun (ör. `SHARELATEX_MONGO_URL` yerine `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 Görüntüsünü Değiştirme

{% hint style="info" %}
Çin anakarasındaki kullanıcılar için şunu kullanabilirsiniz `ghcr.nju.edu.cn` indirme işleminizi hızlandırmak için.
{% endhint %}

Overleaf Pro, Sandboxed Compiles için hangi TeX Live görüntülerinin kullanılacağını belirlemek üzere üç ortam değişkeni kullanır:

* `TEX_LIVE_DOCKER_IMAGE` **(gerekli),** Yeni projeleri derlemek için kullanılan varsayılan TeX Live görüntüsü. Bu görüntü, `ALL_TEX_LIVE_DOCKER_IMAGES`.
* `ALL_TEX_LIVE_DOCKER_IMAGE_NAMES` **(gerekli),** Arayüz seçeneklerinde kullanılan, görüntüler için virgülle ayrılmış bir dostça adlar listesi.
* `ALL_TEX_LIVE_DOCKER_IMAGES` **(gerekli),** Kullanılacak TeX Live görüntülerinin virgülle ayrılmış bir listesi. Dağıtım için Overleaf Toolkit kullanılıyorsa, bu görüntüler indirilecek veya güncellenecektir. İndirmeyi atlamak için şunu ayarlayın `SIBLING_CONTAINERS_PULL=false` içinde `config/overleaf.rc`.

Overleaf Pro örneğinizi kullanarak başlatırken `bin/up` komutu, Toolkit içinde listelenen tüm görüntüleri otomatik olarak çekecektir `ALL_TEX_LIVE_DOCKER_IMAGES`.

İşte yeni projeler için varsayılan olarak TeX Live 2025'i kullandığımız ve mevcut projelerde 2024'ü kullanmaya devam ettiğimiz bir örnek.

{% tabs %}
{% tab title="ortak kurulum" %}
Aşağıdaki yapılandırma, 2025'ten 2026'ya kadar olan tüm tam TeX Live Docker görüntülerini kurar. Bu yapılandırmayı kullanmadan önce en az 80 GB kullanılabilir depolama alanına sahip olmanızı öneririz.

{% 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="tam kurulum" %}
Aşağıdaki yapılandırma, 2020'den 2026'ya kadar olan tüm tam TeX Live Docker görüntülerini kurar. Bu yapılandırmayı kullanmadan önce en az 256 GB kullanılabilir depolama alanına sahip olmanızı öneririz.

{% 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" %}
Ayarlamanız şiddetle önerilir **en az 2 texlive-full görüntüsü**. Ayrıntılı neden için şuna bakın [#known-issues](#known-issues "mention")
{% endhint %}

### Kullanılabilir TeX Live görüntüleri

Bunlar, Overleaf için özel olarak optimize edilmiş bir dizi TeX Live görüntüsüdür; ayrıca şunlara da eklenebilir `TEX_LIVE_DOCKER_IMAGE` ve `ALL_TEX_LIVE_DOCKER_IMAGES`:

* `ghcr.io/ayaka-notes/texlive-full:2026.1` (Ayrıca `latest` etiketi)
* `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" %}
Görüntülerin nasıl **zorunlu olarak** etiketlenmesi gerektiğine dair katı bir şema vardır (aşağıdaki regex geçerlidir `^[0-9]+.[0-9]+`, burada ilk sayı TeX Live yılını ve ikinci sayı yama sürümünü belirler).
{% endhint %}

### Başka Bir İmaj Kayıt Defteri Kullanabilir miyim

> Bazı kişiler, değiştirip değiştiremeyeceğimi merak edebilir `ghcr.io` başka bir ayna siteyle veya texlive'ı Docker Hub'daki başka bir görüntüyle değiştirebilir miyim?

Hayır, yapılandırma nispeten karmaşık olduğu için bunu önermiyoruz. Bir ayna siteden indiriyorsanız, görüntünüzün adını şu şekilde değiştirebilirsiniz `ghcr.io/ayaka-notes/texlive-full`.

Ancak, gerçekten kendi İmaj Kayıt Defterinizi kullanmak istiyorsanız, lütfen şunu ekleyin:

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

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

{% endcode %}

Sonra, texlive'ın tüm görüntülerinin içinde olduğundan emin olmanız gerekir `your-repo`, örneğin

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

Ayrıntılı bilgi için, ortam değişkeninizi nasıl ayrıştırdığımızı anlamak üzere aşağıdaki kaynak kodu okuyun:

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

```mjs
if (process.env.SANDBOXED_COMPILES === 'true') {
  // Sağlanmamışsa varsayılan görüntü kökünü ayarla
  let imageRootPath = process.env.IMAGE_ROOT || "ghcr.io/ayaka-notes";
  // imageRoot'u Settings'e aktar
  Settings.imageRoot = imageRootPath

  // allowedImageNames şu şekilde olmalıdır:
  // [
  //  { 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],
    }))
  
  // Sonunda, imageName, tam görüntü yolunu oluşturmak için imageRoot ile birleştirilecektir
  // Tam ad şu şekilde olacaktır: ghcr.io/ayaka-notes/texlive-2023:latest

  // Sağlanmamışsa varsayılan görüntü adını ayarla
  if(!process.env.TEX_LIVE_DOCKER_IMAGE) {
    process.env.TEX_LIVE_DOCKER_IMAGE = imageRootPath + "/" + Settings.allowedImageNames[0].imageName
  }

  // currentImageName'i Settings'e aktar
  // Bu, yeni oluşturulan projelerin görüntü adıdır
  Settings.currentImageName = process.env.TEX_LIVE_DOCKER_IMAGE
}
```

{% endcode %}

### Bilinen Sorunlar

Bu, Overleaf topluluğundan gerçek bir vakadır:

> Kullanırken `6.0.1-ext-v3.3`sürümünde, `variables.env`:
>
> ```dotenv
> TEX_LIVE_DOCKER_IMAGE=texlive/texlive:latest-full
> ALL_TEX_LIVE_DOCKER_IMAGES=texlive/texlive:latest-full
> ```
>
> Bu, `texlive/texlive:latest-full`ile sorunsuz çalışıyor. Ancak başka bir texlive görüntüsü çektim `danteev/texlive:2025-10-15` ve bu iki değişkeni yeni görüntü adına göre değiştirdim ama çalışmıyor:
>
> ```dotenv
> TEX_LIVE_DOCKER_IMAGE=danteev/texlive:2025-10-15
> ALL_TEX_LIVE_DOCKER_IMAGES=danteev/texlive:2025-10-15
> ```
>
> Günlüklerde şunu görüyorum:
>
> {% 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 %}
>
> Görünüşe göre `variables.env` içindeki güncellenmiş ayarlar etkili olmuyor. Derleme hâlâ `texlive/texlive:latest-full` görüntüsünü, yeni görüntüyü değil, kullanmaya çalışıyor.
>
> Yeniden başlatmayı, konteynerleri silmeyi ve tekrar çalıştırmayı denedim, ama yine aynı sorun.
>
> Herhangi bir çözüm var mı?

Bazı teknik sınırlamalar nedeniyle, yalnızca tek bir Docker TeXLive görüntüsü kurarsanız, örneğin `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
```

Ve Overleaf örneğinizi bir süre çalıştırdıktan sonra, TeXLive görüntüsünü şu şekilde değiştirmek isteyebilirsiniz `texlive-fullB:latest`. O zaman kullanıcılarınızın tüm projeleri derleyemediğini göreceksiniz.

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

Bunun nedeni, her projedeki TeXLive-Full görüntü adının (sandbox derleme için) veritabanında kalıcı olarak saklanmasıdır. *Yalnızca kullanıcı projesinin TeXLive sürümünü örneğin 2024'ten 2025'e değiştirdiğinde, görüntü adı veritabanında değiştirilecektir*.

CLSI bir projeyi derlerken, projeyi doğrudan derlemek için veritabanında bulunan konteyner görüntü adını kullanır.

Yalnızca bir Docker görüntüsü sağlarsanız, kullanıcılar projeyi derlemek için kullanılan görüntüyü değiştiremez. Bu durumda, tüm kullanıcı projeleri için TeXLive görüntüsünü **elle değiştirmek** üzere bir betik yazmanız gerekir.

### Hata ayıklama

Toolkit'ten clsi günlüğünü kontrol etmek için aşağıdaki komutu çalıştırın:

{% 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/tr/yapilandirma/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.
