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

# Mikro hizmetler

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

Toolkit, gerekli mikro hizmetlerin orkestrasyonunu soyutlayan bazı özel betikler kullanarak Overleaf örneğinizin oluşturulmasını 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 belirtin; Toolkit, Overleaf Server CE veya Pro örneğinizi oluşturan mikro hizmetlerin sağlanması ve birbirine bağlanmasıyla ilgilenecektir.

Bu sayede kullanıcı deneyimini özelleştirmeye ve kurumsal içi örneğinizi oluşturan belirli özellikleri uygulamaya odaklanmakta özgür kalırsınız. Toolkit, perde arkasındaki tüm karmaşıklığı üstlenerek Overleaf örneğinizin daha basit bir şekilde dağıtılmasını sağlar.

{% hint style="info" %}
Geriye dönük nedenlerle, ana Overleaf konteynerine `sharelatex`denir ve `sharelatex/sharelatex` Docker imajına 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ıarrow-up-right](https://www.overleaf.com/blog/518-exciting-news-sharelatex-is-joining-overleaf) na bakın. Bir noktada, bu ad 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, Overleaf konteynerine ek olarak bu veritabanlarının her biri için bir konteyner sağlar; toplamda üç Docker konteyneri olur.

{% hint style="info" %}
Mevcut bir MongoDB veya Redis örneğine bağlanmayı tercih ederseniz, bunu yapılandırma dosyasındaki uygun ayarları yaparak gerçekleştirebilirsiniz. [overleaf.rc](https://ayakaleaf-pro.ayaka.space/on-premises/tr/baslarken/pages/972e9bbedec601b934c63952259de7cb3c42fe36#the-overleaf.rc-file) yapılandırma dosyası.
{% 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 mevcut olan 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 **alt süreçte derlemeyi ç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 önbelleklemesi**

* **kullanıcı**: düzenleyici sayfasını yükler
* **düzenleyici**: web soketi açar
* **düzenleyici**: web soketi üzerinden bir belgeyi açma isteği gönderir
  * **real-time** -> **document-updater**: belge MongoDB'den Redis'e yüklenir
* **düzenleyici**: web soketi üzerinden belge güncellemesi 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 işbirlikçi olup olmadığını kontrol eder, 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" senkronizasyon modu**

* **düzenleyici**: senkronizasyon modu "tam" olarak ayarlanmış bir 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`, buna dahil olanlar:
  * senkronizasyon modu
  * dosya ağacının bir karması -> "proje durumu"
  * içerikleriyle birlikte tüm belgeler -> 7 MB istek gövdesi sınırına tabidir
  * ayrı indirme için ikili dosya URL'leri
* **clsi**: disk üzerindeki durumu senkronizasyon modu ve "proje durumu" ile kontrol et
  * bu tam senkronizasyondur, bu yüzden önceki disk durumu yok sayılabilir
* **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 önbellekten kopyalar
  * önbellek kaçırıldığında:
    * **clsi** -> **filestore**: dosyaları indir
* **clsi**: "proje durumu"nu yaz
* **clsi**: istenen yapılandırmaya sahip bir konteynerin mevcut olduğundan emin ol
  * konteyner seçeneklerini oluşturur, texlive sürümünü de içerir
  * seçenekleri hash'le
  * konteyner adı: `project-<project-id>-<user-id>-<hash>`
* **clsi**: konteyneri başlatır ve stdout/stderr çıktısını belleğe aktarır -> 2 MB sınırı
* **clsi**: durdurulmuş konteyneri geride bırakır -> 24 saat sonra temizlenir
* **clsi**: stdout/stderr'yi diske yazar
* **clsi**: çıktı dosyalarını benzersiz çıktı dizinine kopyalar
  * build-id, 8 rastgele bayt artı milisaniye hassasiyetinde bir zaman damgasından oluşur
  * son 3 (anonim) / son 1 (giriş yapmış kullanıcı) derleme klasörü dışındakilerin hepsini sil
* **clsi**: derleme başarısız oldu/zaman aşımına uğradı
  * derleme önbelleğini sil — kısmi dosyalar veya bozuk önbellek olabilir
* **düzenleyici**: output.log ve output.pdf dosyalarını indirir

**Derleme — "artımlı" senkronizasyon modu**

* **düzenleyici**: senkronizasyon modu "artımlı" olarak ayarlanmış bir derleme isteği gönderir
* **web** -> **document-updater**: Redis'ten herhangi bir belgeyi al
  * "proje durumu" karması da Redis'te saklanır
  * **web** dosya ağacının karmasını gönderir `document-updater` ve `document-updater` uyuşmazlık durumunda artımlı derlemeyi tam derlemeye dönüştürebilir
    * düzenleyicinin "tam" derleme talep ettiğinde gerçekleştirilen derleme sürecine bakın
* **web** -> **clsi**: derleme isteği şuraya gönderilir `clsi`, buna dahil olanlar:
  * senkronizasyon modu
  * dosya ağacının bir karması -> "proje durumu"
  * içerikleriyle birlikte Redis'teki tüm belgeler -> 7 MB istek gövdesi sınırına tabidir
  * ikili dosya yok
* **clsi**: disk üzerindeki durumu senkronizasyon modu ve "proje durumu" ile kontrol et
  * bu bir artımlı senkronizasyondur, bu yüzden "proje durumu" eşleşmelidir
  * uyuşmazlık halinde: 409 ile yanıt ver, web'in "tam" senkronizasyonla yeniden denemesine izin ver
    * düzenleyicinin "tam" derleme talep ettiğinde gerçekleştirilen derleme sürecine bakın
* **clsi**: güncellenmiş belgeleri derleme dizinine yaz
* **clsi**: istenen yapılandırmaya sahip bir konteynerin mevcut olduğundan emin ol
  * konteyner seçeneklerini oluşturur, texlive sürümünü de içerir
  * seçenekleri hash'le
  * konteyner adı: `project-<project-id>-<user-id>-<hash>`
* **clsi**: konteyneri başlatır ve stdout/stderr çıktısını belleğe aktarır -> 2 MB sınırı
* **clsi**: durdurulmuş konteyneri geride bırakır -> 24 saat sonra temizlenir
* **clsi**: stdout/stderr'yi diske yazar
* **clsi**: çıktı dosyalarını benzersiz çıktı dizinine kopyalar
  * build-id, 8 rastgele bayt artı milisaniye hassasiyetinde bir zaman damgasından oluşur
  * son 3 (anonim) / son 1 (giriş yapmış kullanıcı) derleme klasörü dışındakilerin hepsini sil
* **clsi**: derleme başarısız oldu/zaman aşımına uğradı
  * derleme önbelleğini sil — kısmi dosyalar veya bozuk önbellek olabilir
* **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 "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://ayakaleaf-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.
