> 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/bakim/horizontal-scaling.md).

# Yatay ölçeklendirme

3.5.6 sürümünden itibaren Server Pro yatay ölçeklendirmeyi destekler.

Bu belge, teknik gereksinimleri listeler ve Server Pro'yu birden fazla düğümde çalıştırmak için yönergeler sağlar.

{% hint style="danger" %}
Server CE/Server Pro ile başlayarak `5.0.3` ortam değişkenleri şu isimden yeniden adlandırıldı `SHARELATEX_*` ile `OVERLEAF_*`.

Eğer bir `4.x` sürümünü (veya daha eski) kullanıyorsanız, lütfen değişkenlerin buna göre önekli olduğundan emin olun (örn. `SHARELATEX_SITE_URL` yerine `OVERLEAF_SITE_URL`)
{% endhint %}

Yatay ölçeklendirmeyi kurmak önemli miktarda çaba gerektirir. Yatay ölçeklendirmeyi değerlendirmeyi öneririz **yalnızca** belirli bir ölçeğe ulaşıldığında. Örneğin, toplam 1.000 kullanıcı için bir Server Pro kurulumu, iki 4 çekirdekli işlemci ve 32 GB sistem belleği sağlanan tek bir sunucu kullanılarak başarıyla kuruldu. Şuraya bakın: [donanım gereksinimleri](/on-premises/tr/baslarken/requirements/hardware-requirements.md) öneriler için belgeleri.

Yatay ölçeklendirmeli bir Server Pro dağıtımı, Yük Dengeleyici ve S3 ile uyumlu bir depolama arka ucu gibi bir dizi harici bileşen içerir.

Yanlış yapılandırmadan kaynaklanabilecek Server Pro kapsayıcılarındaki hataların giderilmesine yardımcı olabilir ve bu belgeye dayanarak genel tavsiyeler verebiliriz. Ne yazık ki, üçüncü taraf uygulamaları/sistemleri yapılandırma konusunda yardımcı olamayız.

Harici bileşenleri sağlamak için donanımınıza/yazılımınıza özgü teknik sorunların giderilmesi destek koşullarımız kapsamında değildir.

### Gereksinimler

#### Harici, merkezi veri depolama

Server Pro'daki veri depolama dört veri deposuna bölünebilir:

* **MongoDB**

  * Verilerin çoğu MongoDB'de kalıcı olarak saklanır.
  * Yerel bir örneği veya aşağıdaki gibi harici bir örneği destekliyoruz: [MongoDB](https://www.mongodb.com/atlas) Atlas (AWS altyapısında çalışan tam yönetilen bir MongoDB hizmeti).<br>

  **Not:** Ne yazık ki, şu anda CosmoDB/DocumentDB gibi MongoDB uyumlu veritabanları için resmi destek yoktur, çünkü Server Pro'yu onlarla test etmedik. Server Pro'yu uyumlu veritabanlarıyla dağıtırken **olabilir** mümkün olsa da, resmi olarak yalnızca MongoDB kullanan dağıtımları destekliyoruz.<br>
* **Redis**

  * Redis, MongoDB'ye yazılmadan önce bekleyen belge güncellemeleri gibi geçici verileri saklar.
  * Redis, belge güncellemelerini farklı hizmetler arasında iletmek ve editöre belirli bir projedeki durum değişikliklerini bildirmek için kullanılır.
  * Redis, kullanıcı oturumlarını saklamak için kullanılır.
  * Yerel bir örneği veya harici bir örneği destekliyoruz.<br>

  **Not:** Ne yazık ki, şu anda KeyDB/Valkey gibi Redis uyumlu anahtar/değer depoları için resmi destek yoktur, çünkü Server Pro'yu onlarla test etmedik. Server Pro'yu uyumlu depolarla dağıtırken **olabilir** mümkün olsa da, resmi olarak yalnızca Redis kullanan dağıtımları destekliyoruz.<br>
* **Proje dosyaları ve geçmiş dosyaları**

  * Düzenlenemeyen proje dosyaları MongoDB dışında saklanır.

    Yeni proje geçmişi sistemi (Server Pro 3.5 ve sonrasından itibaren) geçmişi de MongoDB dışında saklar.
  * Küçük tekil örnekler için, ya yerel bir dosya sistemini (yerel bir SSD, NFS veya EBS ile desteklenebilir) ya da bir [S3 ile uyumlu veri depolama sistemini](/on-premises/tr/yapilandirma/overleaf-toolkit/s3.md).
  * Yatay ölçeklendirme için biz **yalnızca** S3 ile uyumlu veri depolama sistemlerini destekliyoruz.<br>

  **Önemli:** NFS/Amazon EFS/Amazon EBS **yapmamalısınız** yatay ölçeklendirme için desteklenir. Lütfen şu bölüme bakın: [donanım depolama](/on-premises/tr/baslarken/requirements/hardware-requirements.md#storage) Server Pro'da depolamayı ölçeklendirme ile ilgili gereksinimler bölümüne daha fazla ayrıntı için.
* **Geçici dosyalar**
  * En iyi performans için LaTeX derlemelerinin hızlı, yerel disklerde çalışması gerekir. Derleme çıktısının kalıcı olarak saklanmasına veya yedeklenmesine gerek yoktur.
  * Yeni dosya yüklemelerinin tamponlanması ve proje zip dosyalarının oluşturulması da yerel bir disk kullanımından fayda sağlar.

{% hint style="danger" %}
Yerel bir disk kullanmanızı şiddetle tavsiye ederiz. Herhangi bir ağ diskini (NFS veya EBS gibi) kullanmak beklenmedik derleme hatalarına ve diğer performans sorunlarına yol açabilir.
{% endhint %}

#### **Git-bridge**

{% hint style="info" %}
Git-bridge, Server Pro'da 4.0.1 sürümünden itibaren kullanılabilir.
{% endhint %}

git depoları disk üzerinde yerel olarak saklanır. Kullanılabilir çoğaltma seçenekleri yoktur. Git-bridge şu şekilde çalıştırılmalıdır: **tekil örnek**. En iyi performans için git-bridge verileri için yerel bir disk kullanmanızı öneririz. Git-bridge veri diski düzenli olarak yedeklenmelidir.

Yatay ölçeklendirmede veri depolama için şunlara ihtiyacınız vardır:

* tüm Server Pro örneklerinden erişilebilen merkezi bir MongoDB örneği
* tüm Server Pro örneklerinden erişilebilen merkezi bir Redis örneği
* proje ve geçmiş dosyaları için merkezi bir S3 uyumlu depolama arka ucu
* geçici dosyalar için her örnekte yerel bir disk
* git-bridge kapsayıcısını barındıran örnekte git-bridge verileri için yerel bir disk

#### Yük dengeleyici gereksinimleri

* **Kalıcı yönlendirme**, örn. bir çerez kullanarak

  Bu gereksinim şu bileşenlerden kaynaklanır:

  * Server Pro'daki gerçek zamanlı düzenleme özelliği, XHR yoklamasına geri dönüş yapan WebSocket'ler kullanır. Her düzenleme oturumunun sunucu tarafında yerel durumu vardır ve belirli bir düzenleme oturumunun istekleri her zaman aynı Server Pro örneğine yönlendirilmelidir. İşbirliği özelliği Redis kullanır [Pub/Sub](https://redis.io/docs/latest/develop/interact/pubsub/) birden fazla Server Pro örneği arasında güncellemeleri paylaşmak için.
  * LaTeX derlemesi, isteğe bağlı performans için çıktıyı ve derleme önbelleğini yerel olarak tutar. Bir Server Pro örneğine bir derleme isteği gönderildiğinde, aşağıdaki PDF/günlük indirme istekleri aynı Server Pro örneğine yönlendirilmelidir.
* **Uzun istek zaman aşımı** büyük LaTeX belgelerinin derlenmesini desteklemek için
* **WebSocket desteği** en iyi performans için
* **50 MB POST yük boyutu**
* **Keep-alive zaman aşımı** Server Pro keep-alive zaman aşımından daha düşük olmalıdır

  Server Pro'daki keep-alive zaman aşımı ortam değişkeni kullanılarak yapılandırılabilir `NGINX_KEEPALIVE_TIMEOUT`. Varsayılan değer 65 saniyedir.

  Varsayılan ayarla, yük dengeleyicide 60 saniyelik bir keep-alive zaman aşımı çalışır.

  Şununla `NGINX_KEEPALIVE_TIMEOUT=120`, yük dengeleyici 115 saniye seçebilir.
* **İstemci IP'leri**

  İstek üstbilgisini ayarlayın `X-Forwarded-For` istemci IP'sine.
* Ne zaman **SSL sonlandırma**

  Yük dengeleyicinin isteğe şu üstbilgiyi eklemesi gerekir `X-Forwarded-Proto: https`.

<details>

<summary>Örnek HAProxy yapılandırması</summary>

```
global
  group haproxy
  user haproxy

  # Ayrıntılı günlükleme
  log stdout format raw local0 debug

defaults
  mode                    http
  option                  httpchk HEAD /status
  http-check              expect status 200
  default-server          check

  # Ayrıntılı günlükleme
  log                     global
  option                  httplog

  # Yapışkan olan kapalıysa farklı bir arka uca yeniden yönlendir
  option                  redispatch 1
  # Bu yeniden denemeler TCP bağlantı hataları içindir, HTTP 500 yanıtları için değil
  retries                 3

  # 24 saatlik hareketsizlik için yapışkan oturum -- derleme çıktısı 24 saat sonra silinir
  cookie                  server-pro-ha insert maxidle 24h

  # Herhangi bir arka uca 1 dakika bağlanmayı dene, sonra 503 döndür
  timeout queue           1m
  # Server Pro örneklerine başlamak için 15 saniye ver
  timeout connect         15s

  # Çok yavaş istemcilerden gelen istekleri iptal et (bir istek okunurken 1 dakika hareketsizliğe izin ver)
  timeout client          1m

  # Yavaş derlemelere izin ver -- clsi'deki sabit sınır 10 dakikadır
  timeout server          10m

  # 23 saat sonra düzenleyicinin bağlantısını kes -- dünkü son kullanımlarından 1 saat önce
  timeout tunnel          23h

  # Not: haproxy'deki keepalive davranışı, Server Pro'daki varsayılan keepalive ayarıyla harika çalışır.
  #       Haproxy arka planda bağlantıları temizliyor ve gerektiğinde istekleri yeniden yönlendirecek.

listen server-pro-ha-http
  bind :80
  http-request redirect scheme https unless { ssl_fc }

listen server-pro-ha-https
  bind :443 ssl crt /etc/ssl/certs/ssl-key-and-certificate-bundle.pem

  # Uygulamaya https arkasında olduğumuzu söyle
  http-request set-header X-Forwarded-Proto https

  # Uygulamaya gerçek istemci IP'sini söyle
  option forwardfor

  # Şuraya bakın https://hstspreload.org/#deployment-recommendations
  http-response set-header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload;"

  # Git trafiğini git-bridge'in kardeş kapsayıcısına yönlendir
  use-server server-pro-ha-1 if { path_beg /git/ }

  # Hata ayıklama
  http-response add-header X-Served-By %s
  stats enable
  stats uri /haproxy

  server server-pro-ha-1 198.18.1.1:80 cookie server-pro-ha-1
  server server-pro-ha-2 198.18.1.2:80 cookie server-pro-ha-2
  server server-pro-ha-3 198.18.1.3:80 cookie server-pro-ha-3
```

</details>

#### Server Pro yapılandırması

**Gizli bilgiler**

Server Pro örneklerinin paylaşılan gizli bilgiler üzerinde anlaşması gerekir:

* `WEB_API_PASSWORD` (web api kimlik doğrulaması)
* `STAGING_PASSWORD` ve `V1_HISTORY_PASSWORD` aynı değer (geçmiş kimlik doğrulaması)
* `CRYPTO_RANDOM` (oturum çerezi için)
* `OT_JWT_AUTH_KEY` (geçmiş kimlik doğrulaması)

Bu gizli bilgilerin tümü kendi benzersiz değerleriyle yapılandırılmalı ve örnekler arasında paylaşılmalıdır.

Yapılandırılmadığında ve kullanıcı istekleri farklı Server Pro örneklerine yönlendirildiğinde, istekleri kimlik doğrulama denetimlerinden geçemez ve sık sık giriş sayfasına yönlendirilirler ya da arayüzdeki eylemleri beklenmedik şekillerde başarısız olur.

Yapılandırılmadığında, Server Pro her gizli bilgi için şuradan alınan 32 rastgele bayta dayalı yeni bir rastgele değer kullanır: `/dev/urandom` (256 rastgele bit).

{% code overflow="wrap" %}

```bash
# https://github.com/overleaf/overleaf/blob/45ca0f796c679103efd305ddbef28073c4a5de32/server-ce/init_scripts/00_regen_sharelatex_secrets.sh#L14
dd if=/dev/urandom bs=1 count=32 2>/dev/null | base64 -w 0 | rev | cut -b 2- | rev | tr -d '\n+/'
```

{% endcode %}

**MongoDB**

Şunu belirtin `OVERLEAF_MONGO_URL` (`SHARELATEX_MONGO_URL` sürümleri için `4.x` ve öncesi) merkezi MongoDB örneğine.

**Redis**

Şunu belirtin `OVERLEAF_REDIS_HOST` (`SHARELATEX_REDIS_HOST` sürümleri için `4.x` ve öncesi) ve `REDIS_HOST` merkezi Redis örneğine.

**proje ve geçmiş dosyaları için S3 uyumlu depolama**

Lütfen şunla ilgili belgelere bakın: [S3 uyumlu depolama](/on-premises/tr/yapilandirma/overleaf-toolkit/s3.md) ayrıntılar için.

**Geçici dosyalar**

Yerel bir SSD'nin şuraya varsayılan bağlama montajı `/var/lib/overleaf` (`/var/lib/sharelatex` sürümleri için `4.x` ve öncesi) yeterli olacaktır. Şunu işaret ettiğinizden emin olun: `SANDBOXED_COMPILES_HOST_DIR` ana makinedeki bağlama noktasına.

{% hint style="danger" %}
Yerel bir disk kullanmanızı şiddetle tavsiye ederiz. Herhangi bir ağ diskini (NFS veya EBS gibi) kullanmak beklenmedik derleme hatalarına ve diğer performans sorunlarına yol açabilir.
{% endhint %}

**Proxy yapılandırması**

* Şunu ayarlayın `OVERLEAF_BEHIND_PROXY=true` (`SHARELATEX_BEHIND_PROXY` sürümleri için `4.x` ve öncesi) doğru istemci IP'leri için.
* Şunu ayarlayın `TRUSTED_PROXY_IPS` yük dengeleyicinin IP'sine (birden fazla CIDR belirtilebilir, virgülle ayrılır).

**Git-bridge entegrasyonu**

{% hint style="info" %}
Git-bridge, Server Pro'da 4.0.1 sürümünden itibaren kullanılabilir.
{% endhint %}

Git-bridge kapsayıcısının gelen git isteklerini işlemek için bir kardeş Server Pro kapsayıcısına ihtiyacı vardır. Bu kardeş kapsayıcı normal kullanıcı trafiğine de hizmet edebilir. Örnek yapılandırmada, ilk örnek git-bridge için kardeş kapsayıcı görevi görür, ancak gerçekte herhangi bir örnek bu işi yapabilir.

Neden bir Server Pro kapsayıcısını git-bridge için kardeş olarak belirlememiz gerekiyor? Server Pro, geçmiş hizmeti için indirme URL'lerini git-bridge'e sağlar. Bu geçmiş URL'lerinin git-bridge kapsayıcısından erişilebilir olacak şekilde yapılandırılması gerekir.

Server Pro kapsayıcı yapılandırması:

* Şunu ayarlayın `GIT_BRIDGE_ENABLED` ile `'true'`
* Şunu ayarlayın `GIT_BRIDGE_HOST` ile `<git-bridge container name>` örn. `git-bridge`
* Şunu ayarlayın `GIT_BRIDGE_PORT` ile `8000`
* Şunu ayarlayın `V1_HISTORY_URL` ile `http://<server-pro sibling container name>:3100/api`.

  Not: Bu yalnızca git-bridge kapsayıcısı için kardeş kapsayıcıda gereklidir. Diğer örnekler varsayılan olan bir localhost URL'si kullanabilir.

git-bridge kapsayıcı yapılandırması:

* Şunu ayarlayın `GIT_BRIDGE_API_BASE_URL` ile `http://<server-pro sibling container name>/api/v0`, örn. `http://server-pro-ha-1/api/v0`
* Şunu ayarlayın `GIT_BRIDGE_OAUTH2_SERVER` ile `http://<server-pro sibling container name>`, örn. `http://server-pro-ha-1`
* Şunu ayarlayın `GIT_BRIDGE_POSTBACK_BASE_URL` ile `http://<git-bridge container name>:8000`, örn. `http://git-bridge:8000`
* Şunu ayarlayın `GIT_BRIDGE_ROOT_DIR` bağlama ile monte edilmiş git-bridge veri diskine, örn. `/data/git-bridge`

<details>

<summary>Örnek docker-compose.yml yapılandırması</summary>

Aşağıdaki yapılandırma bağımsız bir kurulumu gösteriyor. Demonun çalışması için geçerli bir SSL anahtarı/sertifikası sağlamanız ve şunu ayarlamanız gerekir: `OVERLEAF_SITE_URL` (`SHARELATEX_SITE_URL` sürümleri için `4.x` ve öncesi). Gerçek bir kurulumda, yer tutucu gizli bilgileri satır içi not edildiği gibi gerçek gizli bilgilerle değiştirmeniz gerekir. Gerçek bir kurulum için, tek tek kapsayıcıları ayrılmış düğümlere taşımanız ve IP adreslerini yerel ağ yapılandırmanıza göre ayarlamanız gerekir.

```yaml
version: '2.2'

# Gerçek yatay ölçeklendirme kurulumu: kendi ağınızı seçin ve yapılandırmadaki IP'leri değiştirin.
networks:
    default:
        ipam:
            config:
                # Bu alt ağ, kıyaslama için kullanılan ayrılmış bir alt ağın parçasıdır
                # https://tools.ietf.org/html/rfc2544
                # Tüm alt ağ 198.18.0.0/15'tir
                # lb ve db'ler için 198.18.0.0/24 kullanın
                # server-pro için 198.18.1.0/24 kullanın
                # geçici kapsayıcı için 198.18.0.128/25 kullanın
                - gateway: 198.18.0.1
                  ip_range: 198.18.0.128/25
                  subnet: 198.18.0.0/23

services:
    # Gerçek yatay ölçeklendirme kurulumu: haproxy'yi docker dışında ayrı bir ana makinede çalıştırın.
    lb:
        image: haproxy:2.6
        container_name: lb
        user: root
        logging:
            driver: local
            options:
                max-size: 10g
                max-file: '100'
        birimler:
            - ./haproxy.conf:/usr/local/etc/haproxy/haproxy.cfg
            # $ cat certificate.pem key.pem > ssl-key-and-certificate-bundle.pem
            - /path/to/ssl-key-and-certificate-bundle.pem:/etc/ssl/certs/ssl-key-and-certificate-bundle.pem
        # "ports" alternatifi: docker-proxy yükünü önlemek için ana makine ağını kullanın
        network_mode: host

        # "network_mode: host" alternatifi: ağ yalıtımı için docker-proxy kullanın
        # ports:
        #     - "80:80"
        #     - "443:443"
        # networks:
        #     default:
        #         ipv4_address: 198.18.0.2

        # Gerçek yatay ölçeklendirme kurulumu: bunları kaldırın, çünkü diğer ana makinelerde çalışırlar.
        depends_on:
            server-pro-ha-1:
                condition: service_started
            server-pro-ha-2:
                condition: service_started
            server-pro-ha-3:
                condition: service_started

    # Gerçek yatay ölçeklendirme kurulumu: bu kapsayıcıyı server-pro-ha-1'in yanında çalıştırın.
    # Server Pro 4.0 ve sonrasında.
    git-bridge:
        restart: always
        # Etiket, `server-pro-ha-1` kapsayıcı etiketine uymalıdır.
        image: quay.io/sharelatex/git-bridge:4.0.1
        birimler:
            # Gerçek yatay ölçeklendirme kurulumu: /data/git-bridge yolunu ayrılmış bir yerel SSD'ye yönlendirin.
            - ~/git_bridge_data:/data/git-bridge
        container_name: git-bridge
        ortam:
            GIT_BRIDGE_API_BASE_URL: "http://server-pro-ha-1/api/v0"
            GIT_BRIDGE_OAUTH2_SERVER: "http://server-pro-ha-1"
            GIT_BRIDGE_POSTBACK_BASE_URL: "http://198.18.0.6:8000"
            GIT_BRIDGE_ROOT_DIR: "/data/git-bridge"
        user: root
        command: ["/server-pro-start.sh"]

        # Gerçek yatay ölçeklendirme kurulumu: 198.18.0.6 ana makinesinde çalıştırın ve bağlantı noktasını açın
        # ports:
        #     - "8000:8000"
        networks:
            default:
                ipv4_address: 198.18.0.6

    # Gerçek yatay ölçeklendirme kurulumu: bu kapsayıcıyı ayrı bir ana makinede çalıştırın.
    server-pro-ha-1: &server-pro-ha-config
        restart: always
        image: quay.io/sharelatex/sharelatex-pro:4.0.1
        container_name: server-pro-ha-1
        hostname: server-pro-ha-1
        depends_on:
            # Gerçek yatay ölçeklendirme kurulumu: bu girdiyi koruyun.
            git-bridge:
                condition: service_started

            # Gerçek yatay ölçeklendirme kurulumu: aşağıdakileri kaldırın, çünkü diğer ana makinelerde çalışırlar.
            mongo:
                condition: service_healthy
            redis:
                condition: service_started
            minio:
                condition: service_started
            mongo_replica_set_setup:
                condition: service_completed_successfully
            minio_setup:
                condition: service_completed_successfully
        stop_grace_period: 60s
        birimler:
            - /tmp/scratch-disk1:/var/lib/sharelatex
            - /var/run/docker.sock:/var/run/docker.sock
        environment: &server-pro-ha-environment
            # Gerçek yatay ölçeklendirme kurulumu: kendi alan adı/uygulama adınızı sağlayın.
            OVERLEAF_SITE_URL: 'https://overleaf.example.com'
            OVERLEAF_APP_NAME: Server Pro Yatay Ölçeklendirme Demosu

            OVERLEAF_MONGO_URL: mongodb://198.18.0.3/sharelatex
            OVERLEAF_REDIS_HOST: 198.18.0.4
            REDIS_HOST: 198.18.0.4

            ENABLED_LINKED_FILE_TYPES: 'project_file,project_output_file'
            EMAIL_CONFIRMATION_DISABLED: 'true'

            SANDBOXED_COMPILES: 'true'
            SANDBOXED_COMPILES_SIBLING_CONTAINERS: 'true'
            SANDBOXED_COMPILES_HOST_DIR: '/tmp/scratch-disk1/data/compiles'

            # S3
            # Gerçek yatay ölçeklendirme kurulumu: güvenli kimlik bilgileri seçin.
            OVERLEAF_FILESTORE_BACKEND: s3
            OVERLEAF_FILESTORE_USER_FILES_BUCKET_NAME: overleaf-user-files
            OVERLEAF_FILESTORE_TEMPLATE_FILES_BUCKET_NAME: overleaf-template-files
            OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID: OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID
            OVERLEAF_FILESTORE_S3_SECRET_ACCESS_KEY: OVERLEAF_FILESTORE_S3_SECRET_ACCESS_KEY
            OVERLEAF_FILESTORE_S3_ENDPOINT: http://198.18.0.5:9000
            OVERLEAF_FILESTORE_S3_PATH_STYLE: 'true'
            OVERLEAF_FILESTORE_S3_REGION: ''

            OVERLEAF_HISTORY_BACKEND: "s3"
            OVERLEAF_HISTORY_PROJECT_BLOBS_BUCKET: "overleaf-project-blobs"
            OVERLEAF_HISTORY_CHUNKS_BUCKET: "overleaf-chunks"
            OVERLEAF_HISTORY_S3_ACCESS_KEY_ID: "OVERLEAF_HISTORY_S3_ACCESS_KEY_ID"
            OVERLEAF_HISTORY_S3_SECRET_ACCESS_KEY: "OVERLEAF_HISTORY_S3_SECRET_ACCESS_KEY"
            OVERLEAF_HISTORY_S3_ENDPOINT: http://198.18.0.5:9000
            OVERLEAF_HISTORY_S3_PATH_STYLE: 'true'
            OVERLEAF_HISTORY_S3_REGION: ''
            # /S3

            # git-bridge
            GIT_BRIDGE_ENABLED: 'true'
            GIT_BRIDGE_HOST: 198.18.0.6
            GIT_BRIDGE_PORT: 8000
            # yalnızca git-bridge'in kardeş örneğinde gerekir
            V1_HISTORY_URL: "http://server-pro-ha-1:3100/api"
            # /git-bridge

            # Yatay ölçeklendirme
            # Gerçek yatay ölçeklendirme kurulumu: güvenli kimlik bilgileri seçin.
            WEB_API_PASSWORD: WEB_API_PASSWORD
            STAGING_PASSWORD: V1_HISTORY_PASSWORD
            V1_HISTORY_PASSWORD: V1_HISTORY_PASSWORD
            CRYPTO_RANDOM: CRYPTO_RANDOM
            OT_JWT_AUTH_KEY: OT_JWT_AUTH_KEY
            OVERLEAF_BEHIND_PROXY: 'true'
            # Gerçek yatay ölçeklendirme kurulumu: yük dengeleyicilerin IP'leri
            TRUSTED_PROXY_IPS: 198.18.0.1,198.18.0.2
            # /Yatay ölçeklendirme

        # Gerçek yatay ölçeklendirme kurulumu: 198.18.1.1 ana bilgisayarında çalıştırın ve portları açığa çıkarın
        # ports:
        #     - "80:80"
        networks:
            default:
                ipv4_address: 198.18.1.1

    # Gerçek yatay ölçeklendirme kurulumu: bu kapsayıcıyı ayrı bir ana makinede çalıştırın.
    server-pro-ha-2:
        <<: *server-pro-ha-config
        hostname: server-pro-ha-2
        container_name: server-pro-ha-2
        birimler:
            - /tmp/scratch-disk2:/var/lib/sharelatex
            - /var/run/docker.sock:/var/run/docker.sock
        ortam:
            <<: *server-pro-ha-environment
            SANDBOXED_COMPILES_HOST_DIR: '/tmp/scratch-disk2/data/compiles'
            V1_HISTORY_URL: "http://localhost:3100/api"

        # Gerçek yatay ölçeklendirme kurulumu: 198.18.1.2 ana bilgisayarında çalıştırın ve portları açığa çıkarın
        # ports:
        #     - "80:80"
        networks:
            default:
                ipv4_address: 198.18.1.2

    # Gerçek yatay ölçeklendirme kurulumu: bu kapsayıcıyı ayrı bir ana makinede çalıştırın.
    server-pro-ha-3:
        <<: *server-pro-ha-config
        hostname: server-pro-ha-3
        container_name: server-pro-ha-3
        birimler:
            - /tmp/scratch-disk3:/var/lib/sharelatex
            - /var/run/docker.sock:/var/run/docker.sock
        ortam:
            <<: *server-pro-ha-environment
            SANDBOXED_COMPILES_HOST_DIR: '/tmp/scratch-disk3/data/compiles'
            V1_HISTORY_URL: "http://localhost:3100/api"

        # Gerçek yatay ölçeklendirme kurulumu: 198.18.1.3 ana bilgisayarında çalıştırın ve portları açığa çıkarın
        # ports:
        #     - "80:80"
        networks:
            default:
                ipv4_address: 198.18.1.3

    # Gerçek yatay ölçeklendirme kurulumu: bu kapsayıcıyı ayrı bir ana makinede çalıştırın.
    minio:
        image: minio/minio:RELEASE.2023-05-18T00-05-36Z
        container_name: minio
        command: server /data
        birimler:
            # Gerçek yatay ölçeklendirme kurulumu: minio'yu birden fazla diskle çalıştırın, minio belgelerine bakın.
            - ~/minio_data:/data
        ortam:
            # Gerçek yatay ölçeklendirme kurulumu: güvenli kimlik bilgileri seçin.
            MINIO_ROOT_USER: MINIO_ROOT_USER
            MINIO_ROOT_PASSWORD: MINIO_ROOT_PASSWORD

        # Gerçek yatay ölçeklendirme kurulumu: 198.18.0.5 ana bilgisayarında çalıştırın ve portu açığa çıkarın
        # ports:
        #     - "9000:9000"
        networks:
            default:
                ipv4_address: 198.18.0.5

    # Gerçek yatay ölçeklendirme kurulumu: bu kurulumu ayrı bir ana bilgisayarda bir kez çalıştırın.
    minio_setup:
        depends_on:
            - minio
        image: minio/mc:RELEASE.2023-05-18T16-59-00Z
        entrypoint: sh
        komutu kullanarak:
            - '-c'
            # Gerçek yatay ölçeklendirme kurulumu: güvenli kimlik bilgileri seçin.
            - |
                mc alias set s3 http://198.18.0.5:9000 MINIO_ROOT_USER MINIO_ROOT_PASSWORD \
                || sleep 10 && \
                mc alias set s3 http://198.18.0.5:9000 MINIO_ROOT_USER MINIO_ROOT_PASSWORD \
                || sleep 10 && \
                mc alias set s3 http://198.18.0.5:9000 MINIO_ROOT_USER MINIO_ROOT_PASSWORD \
                || sleep 10 && \
                mc alias set s3 http://198.18.0.5:9000 MINIO_ROOT_USER MINIO_ROOT_PASSWORD

                mc mb --ignore-existing s3/overleaf-user-files
                mc mb --ignore-existing s3/overleaf-template-files
                mc admin user add s3 \
                  OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID \
                  OVERLEAF_FILESTORE_S3_SECRET_ACCESS_KEY

                mc mb --ignore-existing s3/overleaf-project-blobs
                mc mb --ignore-existing s3/overleaf-chunks
                mc admin user add s3 \
                  OVERLEAF_HISTORY_S3_ACCESS_KEY_ID \
                  OVERLEAF_HISTORY_S3_SECRET_ACCESS_KEY

                echo '
                  {
                    "Version": "2012-10-17",
                    "Statement": [
                      {
                        "Effect": "Allow",
                        "Action": [
                          "s3:ListBucket"
                        ],
                        "Resource": "arn:aws:s3:::overleaf-user-files"
                      },
                      {
                        "Effect": "Allow",
                        "Action": [
                          "s3:PutObject",
                          "s3:GetObject",
                          "s3:DeleteObject"
                        ],
                        "Resource": "arn:aws:s3:::overleaf-user-files/*"
                      },
                      {
                        "Effect": "Allow",
                        "Action": [
                          "s3:ListBucket"
                        ],
                        "Resource": "arn:aws:s3:::overleaf-template-files"
                      },
                      {
                        "Effect": "Allow",
                        "Action": [
                          "s3:PutObject",
                          "s3:GetObject",
                          "s3:DeleteObject"
                        ],
                        "Resource": "arn:aws:s3:::overleaf-template-files/*"
                      }
                    ]
                  }' > policy-filestore.json

                echo '
                  {
                    "Version": "2012-10-17",
                    "Statement": [
                      {
                        "Effect": "Allow",
                        "Action": [
                          "s3:ListBucket"
                        ],
                        "Resource": "arn:aws:s3:::overleaf-project-blobs"
                      },
                      {
                        "Effect": "Allow",
                        "Action": [
                          "s3:PutObject",
                          "s3:GetObject",
                          "s3:DeleteObject"
                        ],
                        "Resource": "arn:aws:s3:::overleaf-project-blobs/*"
                      },
                      {
                        "Effect": "Allow",
                        "Action": [
                          "s3:ListBucket"
                        ],
                        "Resource": "arn:aws:s3:::overleaf-chunks"
                      },
                      {
                        "Effect": "Allow",
                        "Action": [
                          "s3:PutObject",
                          "s3:GetObject",
                          "s3:DeleteObject"
                        ],
                        "Resource": "arn:aws:s3:::overleaf-chunks/*"
                      }
                    ]
                  }' > policy-history.json

                # Önceki bölümdeki politikanın içeriğini policy-filestore.json dosyasına koyun
                # Hatırlatma: Kova adlarını buna göre değiştirin.
                mc admin policy create s3 overleaf-filestore policy-filestore.json
                mc admin policy attach s3 overleaf-filestore \
                  --user=OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID || true

                mc admin policy create s3 overleaf-history policy-history.json
                mc admin policy attach s3 overleaf-history \
                  --user=OVERLEAF_HISTORY_S3_ACCESS_KEY_ID || true

    # Gerçek yatay ölçeklendirme kurulumu: bu kapsayıcıyı ayrı bir ana makinede çalıştırın.
    mongo:
        restart: always
        image: mongo:4.4
        container_name: mongo
        command: "--replSet overleaf"
        expose:
            - 27017
        birimler:
            - ~/mongo_data:/data/db
        healthcheck:
            test: echo 'db.stats().ok' | mongo localhost:27017/test --quiet
            interval: 10s
            timeout: 10s
            retries: 5

        # Gerçek yatay ölçeklendirme kurulumu: 198.18.0.3 ana bilgisayarında çalıştırın ve portu açığa çıkarın
        # ports:
        #     - "27017:27017"
        networks:
            default:
                ipv4_address: 198.18.0.3

    mongo_replica_set_setup:
        image: mongo:4.4
        entrypoint: sh
        depends_on:
            mongo:
                condition: service_healthy
        komutu kullanarak:
            - '-c'
            - |
                mongo 198.18.0.3 --eval "rs.initiate({ _id: \"overleaf\", members: [ { _id: 0, host: \"198.18.0.3:27017\" } ] })"

    # Gerçek yatay ölçeklendirme kurulumu: bu kapsayıcıyı ayrı bir ana makinede çalıştırın.
    redis:
        restart: always
        image: redis:6.2
        container_name: redis
        expose:
            - 6379
        birimler:
            - ~/redis_data:/data

        # Gerçek yatay ölçeklendirme kurulumu: 198.18.0.4 ana bilgisayarında çalıştırın ve portu açığa çıkarın
        # ports:
        #     - "6379:6379"
        networks:
            default:
                ipv4_address: 198.18.0.4
```

</details>

#### Donanım

Yatay ölçeklendirmeye katılan tüm Server Pro örnekleri için aynı donanım özelliklerini kullanmanızı öneririz.

Hakkındaki genel öneriler [donanım özellikleri](/on-premises/tr/baslarken/requirements/hardware-requirements.md) Server Pro örnekleri için geçerlidir.

#### Server Pro'yu yükseltme

Yükseltme sürecinin bir parçası olarak, Server Pro otomatik olarak veritabanı geçişlerini çalıştırır. Bu geçişler **yapmamalısınız** birden fazla örnekten paralel olarak çalışacak şekilde tasarlanmıştır.

Geçişlerin gerçek web uygulaması başlatılmadan önce tamamlanması gerekir. Günlüklerde şu girdiyi arayabilir ya da `Geçişler tamamlandı` uygulamanın trafik kabul etmesini bekleyebilirsiniz.

Yükseltme işlemi şöyle görünür:

1. Bir bakım penceresi planlayın
2. Server Pro'nun tüm örneklerini durdurun
3. Belirtilen şekilde tutarlı bir yedek alın [belgelendirme](/on-premises/tr/bakim/data-and-backups.md#performing-a-consistent-backup)
4. Yeni sürümle Server Pro'nun tek bir örneğini başlatın
5. Yeni örneğin beklendiği gibi çalıştığını doğrulayın
6. Diğer örnekleri yeni sürümle başlatın


---

# 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/bakim/horizontal-scaling.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.
