> 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/tr/baslarken/microservices.md).

# Mikro hizmetler

Overleaf Server CE ve Overleaf Pro örneklerini dağıtmanın ve yönetmenin önerilen yolu Toolkit'i kullanmaktır.

Toolkit, gerekli mikro hizmetlerin orkestrasyonunu soyutlayan bazı özel betikler aracılığıyla Overleaf örneğinizi oluşturmayı kolaylaştırır. Sadece birlikte gelen başlatma betiğini çalıştırın, kalıcı depolama yollarınız gibi birkaç yapılandırma seçeneği sağlayın; Toolkit, Overleaf Server CE ya da Pro örneğinizi oluşturan mikro hizmetlerin sağlanması ve birbirine bağlanmasıyla ilgilenecektir.

Bu da sizi kullanıcı deneyimini özelleştirmeye ve kurumsal ortamınızda yer alan belirli özellikleri uygulamaya odaklanmakta özgür bırakır. Toolkit, sahne arkasındaki tüm karmaşıklığı üstlenerek Overleaf örneğinizin daha basit bir şekilde dağıtılmasını sağlar.

{% hint style="info" %}
Eski nedenlerle, ana Overleaf konteynerine `sharelatex`, ve `sharelatex/sharelatex` Docker görüntüsüne dayanır. Bunun nedeni teknolojinin, Overleaf'e birleştirilen ShareLaTeX kod tabanına dayanmasıdır. Daha fazla ayrıntı için [bu blog yazısınabarrow-up-right](https://www.overleaf.com/blog/518-exciting-news-sharelatex-is-joining-overleaf) ileride bir noktada bu, Overleaf adlandırma şemasına uyacak şekilde yeniden adlandırılacaktır.
{% endhint %}

#### Mimari

Overleaf konteynerinin içinde, yazılım runit tarafından yönetilen bir mikro hizmetler kümesi olarak çalışır. `runit`. Konteyner içindeki daha ilginç dosyalardan bazıları şunlardır:

* `/etc/service/`: mikro hizmetler için başlatma dosyaları.
* `/var/log/overleaf/`: her mikro hizmet için günlükler.
* `/overleaf/services/`: çeşitli mikro hizmetlerin kodu.
* `/var/lib/overleaf/`: kalıcı veriler için bağlama noktası (ana makinede `OVERLEAF_DATA_PATH` ile belirtilen dizine karşılık gelir).

#### MongoDB ve Redis Konteynerleri

Overleaf iki harici veritabanına bağlıdır: MongoDB ve Redis. Varsayılan olarak Toolkit, toplamda üç Docker konteyneri olacak şekilde, Overleaf konteynerine ek olarak bu veritabanlarının her biri için bir konteyner sağlar.

{% hint style="info" %}
Mevcut bir MongoDB ya da Redis örneğine bağlanmayı tercih ederseniz, bunu [overleaf.rc](https://overleaf-pro.ayaka.space/on-premises/tr/baslarken/pages/972e9bbedec601b934c63952259de7cb3c42fe36#the-overleaf.rc-file) yapılandırma dosyasında uygun ayarları belirleyerek yapabilirsiniz.
{% endhint %}

#### Düzenleyici ve derleme süreci

Bu bölüm, belgelerin işlenmesi ve derleme sürecine dair genel bir bakış sunar.

{% hint style="info" %}
Bu sayfa, yalnızca Overleaf Pro'da kullanılabilen Sandboxed Compiles ile derleme sürecini açıklar. Server CE'de derleme süreci basit alt süreçler kullanır — bir **kapsayıcısı** tek bir öğeyle **derlemeyi alt süreçte çalıştır**.
{% endhint %}

Bileşenler / Aktörler:

* `kullanıcı` — Uygulamanın bir kullanıcısı
* `düzenleyici` — Tarayıcıda çalışan istemci uygulama
* `clsi` — PDF'leri derlemek için kullanılan mikro hizmet
* `document-updater` — Belge güncellemelerini işlemek için kullanılan mikro hizmet
* `filestore` — İkili dosyaları işleyen mikro hizmet
* `real-time` — Web soketlerini işlemek için kullanılan mikro hizmet
* `web` — API isteklerini işlemek için kullanılan (pek de) mikro hizmet olmayan hizmet

**Redis önbellekleme**

* **kullanıcı**: düzenleyici sayfasını yükler
* **düzenleyici**: web soketi açar
* **düzenleyici**: bir belgeyi web soketi üzerinden açma isteği gönderir
  * **real-time** -> **document-updater**: belge MongoDB'den Redis'e yüklenir
* **düzenleyici**: belge güncellemesi web soketi üzerinden gönderir
  * **real-time** -> **document-updater**: belge Redis'te güncellenir
* **düzenleyici**: daha fazla derleme isteği gönderir
  * Son boşaltmadan bu yana 5 dakika geçtikten sonra (belge başına):
    * **document-updater**: belgeyi Redis'ten MongoDB'ye boşalt
* **düzenleyici**: daha fazla güncelleme gönderir
  * her 100 güncellemede (belge başına):
    * **document-updater**: belge geçmişini Redis'ten MongoDB'ye boşalt
* **kullanıcı**: düzenleyiciden ayrılır/tarayıcı sekmesini kapatır
  * 5 dakika sonra
    * **real-time**: başka ortak çalışanları kontrol eder, eğer yoksa:
      * **real-time** -> **document-updater**: belgeleri Redis'ten MongoDB'ye boşaltır

**MongoDB'den Redis'e okuma**

* **document-updater** -> **web** -> **docstore**: MongoDB'den oku

**Redis'ten MongoDB'ye boşaltma**

* **document-updater** -> **web** -> **docstore**: MongoDB'ye yaz

**Derleme — "tam" eşitleme modu**

* **düzenleyici**: eşitleme modu "tam" olarak ayarlanmış derleme isteği gönderir
* **web** -> **document-updater**: herhangi bir belge Redis'ten MongoDB'ye boşaltılır
* **web** -> **docstore**: tüm belgeler MongoDB'den indirilir
* **web** -> **clsi**: derleme isteği şuraya gönderilir `clsi`, aşağıdakiler dahil:
  * eşitleme modu
  * dosya ağacının karması -> "proje durumu"
  * içeriğiyle birlikte tüm belgeler -> 7 MB istek gövdesi sınırına tabi
  * ayrı indirme için ikili dosya URL'leri
* **clsi**: disk üzerindeki durumu eşitleme modu ve "proje durumu" ile karşılaştırın
  * bu tam bir eşitlemedir, bu yüzden önceki disk üzerindeki durum göz ardı edilebilir
* **clsi**: derleme dizinini temizle
* **clsi**: tüm belgeleri derleme dizinine yaz
* **clsi**: tüm ikili dosyaları derleme dizinine yaz
  * `clsi` dosyaları proje başına yerel bir önbellekten kopyalar
  * önbellek kaçırmada:
    * **clsi** -> **filestore**: dosyaları indir
* **clsi**: "proje durumu"nu yaz
* **clsi**: istenen yapılandırmayla docker konteynerinin mevcut olduğundan emin ol
  * konteyner seçeneklerini oluştur, texlive sürümünü içerir
  * seçenekleri karmala
  * konteyner adı: `project-<project-id>-<user-id>-<hash>`
* **clsi**: konteyneri başlat ve stdout/stderr'i belleğe aktar -> 2 MB sınırı
* **clsi**: durdurulmuş konteyneri geride bırak -> 24 saat sonra temizlenir
* **clsi**: stdout/stderr'i diske yaz
* **clsi**: çıktı dosyalarını benzersiz bir çıktı dizinine kopyala
  * build-id, 8 rastgele bayt ile milisaniye hassasiyetindeki zaman damgasının birleşiminden oluşur
  * son 3'ü (anonim) / son 1'i (giriş yapmış kullanıcı) hariç tüm derleme klasörlerini sil
* **clsi**: derleme başarısız/zaman aşımına uğradı
  * derleme önbelleğini sil — kısmi dosyalar/bozuk önbellek içerebilir
* **düzenleyici**: output.log ve output.pdf dosyalarını indirir

**Derleme — "artımlı" eşitleme modu**

* **düzenleyici**: eşitleme modu "artımlı" olarak ayarlanmış derleme isteği gönderir
* **web** -> **document-updater**: Redis'ten herhangi bir belge al
  * "proje durumu" karması da Redis'te saklanır
  * **web** dosya ağacının karmasını şuraya gönderir `document-updater` ve `document-updater` eşleşmeme durumunda artımlı derlemeyi tam derlemeye dönüştürebilir
    * düzenleyici "tam" derleme istediğinde gerçekleştirilen derleme sürecine bakın
* **web** -> **clsi**: derleme isteği şuraya gönderilir `clsi`, aşağıdakiler dahil:
  * eşitleme modu
  * dosya ağacının karması -> "proje durumu"
  * içeriğiyle birlikte Redis'teki tüm belgeler -> 7 MB istek gövdesi sınırına tabi
  * ikili dosya yok
* **clsi**: disk üzerindeki durumu eşitleme modu ve "proje durumu" ile karşılaştırın
  * bu artımlı bir eşitlemedir, bu yüzden "proje durumu" eşleşmelidir
  * uyuşmazlıkta: 409 ile yanıt ver, web'in "tam" eşitleme ile yeniden denemesine izin ver
    * düzenleyici "tam" derleme istediğinde gerçekleştirilen derleme sürecine bakın
* **clsi**: güncellenen belgeleri derleme dizinine yaz
* **clsi**: istenen yapılandırmayla docker konteynerinin mevcut olduğundan emin ol
  * konteyner seçeneklerini oluştur, texlive sürümünü içerir
  * seçenekleri karmala
  * konteyner adı: `project-<project-id>-<user-id>-<hash>`
* **clsi**: konteyneri başlat ve stdout/stderr'i belleğe aktar -> 2 MB sınırı
* **clsi**: durdurulmuş konteyneri geride bırak -> 24 saat sonra temizlenir
* **clsi**: stdout/stderr'i diske yaz
* **clsi**: çıktı dosyalarını benzersiz bir çıktı dizinine kopyala
  * build-id, 8 rastgele bayt ile milisaniye hassasiyetindeki zaman damgasının birleşiminden oluşur
  * son 3'ü (anonim) / son 1'i (giriş yapmış kullanıcı) hariç tüm derleme klasörlerini sil
* **clsi**: derleme başarısız/zaman aşımına uğradı
  * derleme önbelleğini sil — kısmi dosyalar/bozuk önbellek içerebilir
* **düzenleyici**: output.log ve output.pdf dosyalarını indirir

**Derleme — modlar arasında geçiş**

* **düzenleyici**: bir derleme başarısızlığını gözlemler, sonraki derleme "tam" derlemedir
* **düzenleyici**: bir derleme başarısını gözlemler, sonraki derleme bir "artımlı" derlemedir


---

# 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/tr/baslarken/microservices.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.
