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

# Mikropalvelut

Suositeltu tapa ottaa käyttöön ja hallita Overleaf Server CE- ja Overleaf Pro -instansseja on käyttää Toolkitia.

Toolkit yksinkertaistaa Overleaf-instanssisi luomista käyttämällä mukautettuja skriptejä, jotka abstrahoivat tarvittavien mikropalvelujen orkestroinnin pois näkyvistä. Suorita vain mukana tuleva alustusskripti, anna muutamia määritysvaihtoehtoja, kuten pysyvän tallennuksen polut, ja Toolkit huolehtii Overleaf Server CE- tai Pro -instanssisi muodostavien mikropalvelujen provisioinnista ja yhdistämisestä.

Näin voit keskittyä käyttökokemuksen mukauttamiseen ja paikallisen instanssisi muodostavien erityisominaisuuksien toteuttamiseen. Toolkit hoitaa kaiken monimutkaisuuden taustalla, mikä mahdollistaa Overleaf-instanssisi yksinkertaistetun käyttöönoton.

{% hint style="info" %}
Perintösyistä pääasiallista Overleaf-konttia kutsutaan nimellä `sharelatex`, ja se perustuu `sharelatex/sharelatex` Docker-kuvaan. Tämä johtuu siitä, että teknologia perustuu ShareLaTeX-koodipohjaan, joka yhdistettiin Overleafiin. Katso [tästä blogikirjoituksestaarrow-up-right](https://www.overleaf.com/blog/518-exciting-news-sharelatex-is-joining-overleaf) lisätietoja varten. Jossain vaiheessa tulevaisuudessa tämä nimetään uudelleen Overleafin nimeämiskäytännön mukaiseksi.
{% endhint %}

#### Arkkitehtuuri

Overleaf-kontin sisällä ohjelmisto toimii joukkona mikropalveluja, joita hallitsee `runit`. Joitakin kontin sisällä olevista mielenkiintoisemmista tiedostoista ovat:

* `/etc/service/`: alustustiedostot mikropalveluille.
* `/var/log/overleaf/`: lokit kullekin mikropalvelulle.
* `/overleaf/services/`: eri mikropalvelujen koodi.
* `/var/lib/overleaf/`: pysyvän datan liitoskohta (vastaa hakemistoa, joka on merkitty `OVERLEAF_DATA_PATH` isännässä).

#### MongoDB- ja Redis-kontit

Overleaf riippuu kahdesta ulkoisesta tietokannasta: MongoDB:stä ja Redisistä. Oletusarvoisesti Toolkit ottaa käyttöön kontin kullekin näistä tietokannoista Overleaf-kontin lisäksi, yhteensä kolme Docker-konttia.

{% hint style="info" %}
Jos haluat mieluummin yhdistää olemassa olevaan MongoDB- tai Redis-instanssiin, voit tehdä niin asettamalla asianmukaiset asetukset [overleaf.rc](https://ayakaleaf-pro.ayaka.space/on-premises/fi/aloitus/pages/57ab130a4f77245cc4b99f983c24243edca07f9f#the-overleaf.rc-file) asetustiedostossa.
{% endhint %}

#### Editori ja käännösprosessi

Tämä osio tarjoaa yleiskatsauksen dokumenttien käsittelyyn ja käännösprosessiin.

{% hint style="info" %}
Tämä sivu kuvaa käännösprosessia Sandboxed Compiles -toiminnolla, joka on saatavilla vain Overleaf Prossa. Server CE:ssä käännösprosessi käyttää yksinkertaisia aliprosesseja — korvaa kohteet, jotka viittaavat a **kontin** yhdellä kohteella **suorita käännös aliprosessina**.
{% endhint %}

Komponentit / toimijat:

* `käyttäjä` — Sovelluksen käyttäjä
* `editori` — Selaimessa toimiva asiakassovellus
* `clsi` — Mikropalvelu, jota käytetään PDF-tiedostojen kääntämiseen
* `document-updater` — Mikropalvelu, jota käytetään dokumenttipäivitysten käsittelyyn
* `filestore` — Mikropalvelu, joka käsittelee binääritiedostoja
* `real-time` — Mikropalvelu, jota käytetään WebSocket-yhteyksien käsittelyyn
* `web` — (ei niin) mikropalvelu, jota käytetään API-pyyntöjen käsittelyyn

**Redis-välimuisti**

* **käyttäjä**: lataa editorisivun
* **editori**: avaa WebSocket-yhteyden
* **editori**: lähettää pyynnön avata dokumentti WebSocketin kautta
  * **real-time** -> **document-updater**: dokumentti ladataan MongoDB:stä Redisiin
* **editori**: lähettää dokumenttipäivityksen WebSocketin kautta
  * **real-time** -> **document-updater**: dokumenttia päivitetään Redisissä
* **editori**: lähettää lisää käännöspyyntöjä
  * Kun viimeisestä tyhjennyksestä on kulunut 5 minuuttia (per dokumentti):
    * **document-updater**: tyhjennä dokumentti Redisistä MongoDB:hen
* **editori**: lähettää lisää päivityksiä
  * joka 100. päivityksen jälkeen (per dokumentti):
    * **document-updater**: tyhjennä dokumentin historia Redisistä MongoDB:hen
* **käyttäjä**: poistuu editorista/sulkee selaimen välilehden
  * 5 minuuttia myöhemmin
    * **real-time**: tarkistaa muut yhteistyökumppanit, jos niitä ei ole:
      * **real-time** -> **document-updater**: tyhjentää dokumentit Redisistä MongoDB:hen

**Lukeminen MongoDB:stä Redisiiin**

* **document-updater** -> **web** -> **docstore**: lue MongoDB:stä

**Tyhjentäminen Redisistä MongoDB:hen**

* **document-updater** -> **web** -> **docstore**: kirjoita MongoDB:hen

**Käännös — "full"-synkronointitila**

* **editori**: lähettää käännöspyynnön, jossa sync-mode on asetettu arvoon "full"
* **web** -> **document-updater**: mahdolliset dokumentit tyhjennetään Redisistä MongoDB:hen
* **web** -> **docstore**: kaikki dokumentit ladataan MongoDB:stä
* **web** -> **clsi**: käännöspyyntö lähetetään kohteeseen `clsi`, mukaan lukien:
  * synkronointitila
  * tiedostopuun hash -> "projektin tila"
  * kaikki dokumentit sisältöineen -> 7 Mt:n pyyntökehorajoituksen alainen
  * binääritiedostojen URL-osoitteet erillistä latausta varten
* **clsi**: tarkista levyllä oleva tila synkronointitilan ja "projektin tilan" avulla
  * tämä on täysi synkronointi, joten aiempi levyllä oleva tila voidaan sivuuttaa
* **clsi**: siivoa käännöskansio
* **clsi**: kirjoita kaikki dokumentit käännöskansioon
* **clsi**: kirjoita kaikki binääritiedostot käännöskansioon
  * `clsi` kopioi tiedostot projektikohtaisesta paikallisesta välimuistista
  * välimuistiosuman puuttuessa:
    * **clsi** -> **filestore**: lataa tiedostot
* **clsi**: kirjoita "projektin tila"
* **clsi**: varmista, että Docker-kontti on olemassa halutulla kokoonpanolla
  * muodosta konttiasetukset, sisältää TeX Live -version
  * laske asetusten hash
  * kontin nimi: `project-<project-id>-<user-id>-<hash>`
* **clsi**: käynnistä kontti ja suoratoista stdout/stderr muistiin -> rajoitus 2 Mt
* **clsi**: jätä pysäytetty kontti jäljelle -> siivotaan 24 tunnin kuluttua
* **clsi**: kirjoita stdout/stderr levylle
* **clsi**: kopioi tulostiedostot yksilölliseen tulostekansioon
  * build-id koostuu 8 satunnaisesta tavusta sekä millisekuntitarkkuuden aikaleimasta
  * poista kaikki paitsi 3 viimeisintä (anonyymi) / 1 viimeisin (kirjautunut käyttäjä) build-kansiota
* **clsi**: käännös epäonnistui / aikakatkaistiin
  * poista käännösvälimuisti — siinä voi olla osittaisia tiedostoja / vioittunut välimuisti
* **editori**: lataa output.log- ja output.pdf-tiedostot

**Käännös — "incremental"-synkronointitila**

* **editori**: lähettää käännöspyynnön, jossa sync-mode on asetettu arvoon "incremental"
* **web** -> **document-updater**: hae mahdolliset dokumentit Redisistä
  * "projektin tila" -hash tallennetaan myös Redisiin
  * **web** lähettää tiedostopuun hashin kohteeseen `document-updater` ja `document-updater` voi muuttaa inkrementaalisen käännöksen täydelliseksi käännökseksi, jos vastaavuus ei täsmää
    * katso editorin pyytämän "full"-käännöksen mukainen käännösprosessi
* **web** -> **clsi**: käännöspyyntö lähetetään kohteeseen `clsi`, mukaan lukien:
  * synkronointitila
  * tiedostopuun hash -> "projektin tila"
  * kaikki dokumentit Redisistä sisältöineen -> 7 Mt:n pyyntökehorajoituksen alainen
  * ei binääritiedostoja
* **clsi**: tarkista levyllä oleva tila synkronointitilan ja "projektin tilan" avulla
  * tämä on inkrementaalinen synkronointi, joten "projektin tilan" on täsmättävä
  * epäyhteensopivuuden tapauksessa: vastaa 409:llä, anna verkon yrittää uudelleen "full"-synkronoinnilla
    * katso editorin pyytämän "full"-käännöksen mukainen käännösprosessi
* **clsi**: kirjoita päivitetyt dokumentit käännöskansioon
* **clsi**: varmista, että Docker-kontti on olemassa halutulla kokoonpanolla
  * muodosta konttiasetukset, sisältää TeX Live -version
  * laske asetusten hash
  * kontin nimi: `project-<project-id>-<user-id>-<hash>`
* **clsi**: käynnistä kontti ja suoratoista stdout/stderr muistiin -> rajoitus 2 Mt
* **clsi**: jätä pysäytetty kontti jäljelle -> siivotaan 24 tunnin kuluttua
* **clsi**: kirjoita stdout/stderr levylle
* **clsi**: kopioi tulostiedostot yksilölliseen tulostekansioon
  * build-id koostuu 8 satunnaisesta tavusta sekä millisekuntitarkkuuden aikaleimasta
  * poista kaikki paitsi 3 viimeisintä (anonyymi) / 1 viimeisin (kirjautunut käyttäjä) build-kansiota
* **clsi**: käännös epäonnistui / aikakatkaistiin
  * poista käännösvälimuisti — siinä voi olla osittaisia tiedostoja / vioittunut välimuisti
* **editori**: lataa output.log- ja output.pdf-tiedostot

**Käännös — tilojen vaihtaminen**

* **editori**: havaitsee käännöksen epäonnistumisen, seuraava käännös on "full"-käännös
* **editori**: havaitsee käännöksen onnistumisen, seuraava käännös on "incremental"-käännös


---

# 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/fi/aloitus/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.
