> 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/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 yeniden adlandırıldı `SHARELATEX_*` şuraya `OVERLEAF_*`.

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

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

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

Yanlış yapılandırmanın sonucu olabilecek Server Pro kapsayıcılarındaki hataları gidermeye yardımcı olabilir ve bu belgeye dayalı genel tavsiyeler sağlayabiliriz. Ne yazık ki, üçüncü taraf uygulamaları/sistemleri yapılandırma konusunda destek sağlayamıyoruz.

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

### Gereksinimler

#### Harici, merkezi veri depolama

Server Pro'daki veri depolama dört veri deposuna ayrılabilir:

* **MongoDB**

  * Verilerin çoğu MongoDB'ye kalıcı olarak kaydedilir.
  * Ya yerel bir örneği ya da örneğin şu gibi harici bir örneği destekliyoruz: [MongoDB](https://www.mongodb.com/atlas) Atlas (AWS altyapısı içinde çalışan, tamamen yönetilen bir MongoDB hizmeti).<br>

  **Not:** Ne yazık ki, şu anda CosmoDB/DocumentDB gibi MongoDB uyumlu veritabanları için resmi destek yok, çünkü Server Pro'yu bunlarla test etmedik. Server Pro'yu uyumlu veritabanlarıyla dağıtmak **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 depolar.
  * Redis, belge güncellemelerini farklı hizmetler arasında iletmek ve düzenleyiciyi belirli bir projedeki durum değişiklikleri hakkında bilgilendirmek için kullanılır.
  * Redis, kullanıcı oturumlarını depolamak için kullanılır.
  * Ya yerel bir örneği ya da 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 yok, çünkü Server Pro'yu bunlarla test etmedik. Server Pro'yu uyumlu depolarla dağıtmak **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ı) geçmişi de MongoDB dışında saklar.
  * Küçük tekil kurulumlar için ya yerel bir dosya sistemi (yerel bir SSD, NFS veya EBS tarafından desteklenebilir) ya da bir [S3 uyumlu veri depolama sistemi](/on-premises/tr/yapilandirma/overleaf-toolkit/s3.md).
  * Yatay ölçeklendirme için, **yalnızca** S3 uyumlu veri depolama sistemlerini destekliyoruz.<br>

  **Önemli:** NFS/Amazon EFS/Amazon EBS **kullanmayın** yatay ölçeklendirme için desteklenir. Daha fazla ayrıntı için lütfen Server Pro'da depolamayı ölçeklendirmeyle ilgili [donanım depolama](/on-premises/tr/baslarken/requirements/hardware-requirements.md#storage) gereksinimleri bölümüne bakın.
* **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ı veya yedeklenmesi gerekmez.
  * Yeni dosya yüklemelerinin arabelleğe alınması ve proje zip dosyalarının oluşturulması da yerel disk kullanımından yarar sağlar.

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

#### **Git-bridge**

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

git depoları disk üzerinde yerel olarak saklanır. Kullanılabilir çoğaltma seçeneği yoktur. Git-bridge bir **tekil örnek**. Olarak çalıştırılmalıdır. 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çeklendirme için veri depolamada ş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 verileri için git-bridge kapsayıcısını barındıran örnekte 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 WebSocket'leri, XHR yoklamasına geri dönüşle kullanır. Her düzenleme oturumunun sunucu tarafında yerel durumu vardır ve belirli bir düzenleme oturumuna ait isteklerin her zaman aynı Server Pro örneğine yönlendirilmesi gerekir. İş birliği özelliği Redis'i kullanır [Yayın/Abone](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 isteklerinin aynı Server Pro örneğine yönlendirilmesi gerekir.
* **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 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.

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

  İstek başlığını ayarlayın `X-Forwarded-For` istemci IP'sine.
* Ne zaman **SSL sonlandırma**

  Yük dengeleyicinin istek başlığını eklemesi gerekir `X-Forwarded-Proto: https`.

<details>

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

```
global
  group haproxy
  user haproxy

  # Ayrıntılı günlük kaydı
  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ük kaydı
  log                     global
  option                  httplog

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

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

  # 1 dakika boyunca herhangi bir arka uca 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 isteği okurken 1 dakika hareketsizliğe izin ver)
  timeout client          1m

  # Yavaş derlemelere izin ver -- clsi içindeki sabit sınır 10 dakikadır
  timeout server          10m

  # Düzenleyiciyi 23 saat sonra bağlantıdan çıkar -- dün son kullanımından 1 saat önce
  timeout tunnel          23h

  # Not: haproxy'deki keepalive davranışı, Server Pro'daki varsayılan keepalive ayarıyla çok iyi çalışır.
  #       Haproxy bağlantıları arka planda 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

  # https://hstspreload.org/#deployment-recommendations adresine bakın
  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 değerler**

Server Pro örneklerinin paylaşılan gizli değerler konusunda 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 değerlerin her biri kendi benzersiz değeriyle yapılandırılmalı ve örnekler arasında paylaşılmalıdır.

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

Yapılandırılmadığında, Server Pro her gizli değer için şu kaynaktaki 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**

Yönlendirin `OVERLEAF_MONGO_URL` (`SHARELATEX_MONGO_URL` sürümler için `4.x` ve daha öncesi) merkezi MongoDB örneğinde.

**Redis**

Yönlendirin `OVERLEAF_REDIS_HOST` (`SHARELATEX_REDIS_HOST` sürümler için `4.x` ve daha öncesi) ve `REDIS_HOST` merkezi Redis örneğinde.

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

Ayrıntılar için lütfen dokümantasyona 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 eklenmesi `/var/lib/overleaf` (`/var/lib/sharelatex` sürümler 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. Her türlü ağ bağlantılı disk (NFS veya EBS gibi) beklenmedik derleme hatalarına ve diğer performans sorunlarına yol açabilir.
{% endhint %}

**Proxy yapılandırması**

* Ayarlayın `OVERLEAF_BEHIND_PROXY=true` (`SHARELATEX_BEHIND_PROXY` sürümler için `4.x` ve daha öncesi) doğru istemci IP'leri için.
* Ayarlayın `TRUSTED_PROXY_IPS` yük dengeleyicinin IP'sine ayarlayın (Birden fazla CIDR virgülle ayrılarak belirtilebilir).

**Git-bridge entegrasyonu**

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

Gelen git isteklerini işlemek için git-bridge kapsayıcısının yanında bir Server Pro kardeş kapsayıcıya 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ı olarak görev yapar, ancak gerçekte herhangi bir örnek bunu yapabilir.

Git-bridge için neden bir Server Pro kapsayıcısını kardeş olarak belirtmemiz gerekiyor? Server Pro, geçmiş hizmeti için indirme URL'lerini git-bridge'e verir. Bu geçmiş URL'lerini git-bridge kapsayıcısından erişilebilir olacak şekilde yapılandırmamız gerekir.

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

* Ayarlayın `GIT_BRIDGE_ENABLED` şuraya `'true'`
* Ayarlayın `GIT_BRIDGE_HOST` şuraya `<git-bridge kapsayıcı adı>` örn. `git-bridge`
* Ayarlayın `GIT_BRIDGE_PORT` şuraya `8000`
* Ayarlayın `V1_HISTORY_URL` şuraya `http://<server-pro kardeş kapsayıcı adı>:3100/api`.

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

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

* Ayarlayın `GIT_BRIDGE_API_BASE_URL` şuraya `http://<server-pro kardeş kapsayıcı adı>/api/v0`, örn. `http://server-pro-ha-1/api/v0`
* Ayarlayın `GIT_BRIDGE_OAUTH2_SERVER` şuraya `http://<server-pro kardeş kapsayıcı adı>`, örn. `http://server-pro-ha-1`
* Ayarlayın `GIT_BRIDGE_POSTBACK_BASE_URL` şuraya `http://<git-bridge kapsayıcı adı>:8000`, örn. `http://git-bridge:8000`
* Ayarlayın `GIT_BRIDGE_ROOT_DIR` ör. bağlanmış git-bridge veri diskine, `/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östermektedir. Demonun çalışması için geçerli bir SSL anahtarı/sertifikası sağlamanız ve `OVERLEAF_SITE_URL` (`SHARELATEX_SITE_URL` sürümler için `4.x` ve öncesi). Gerçek bir kurulum için, satır içi olarak belirtildiği üzere sahte gizli değerleri gerçek gizli değerlerle 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ğ kurulumunuza 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
                # Tam 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'
        volumes:
            - ./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" için alternatif: docker-proxy yükünden kaçınmak için host ağını kullanın
        network_mode: host

        # "network_mode: host" için alternatif: ağ izolasyonu 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ına çalıştırın.
    # Server Pro 4.0 ve sonrası için.
    git-bridge:
        restart: always
        # Etiketin `server-pro-ha-1` kapsayıcı etiketiyle eşleşmesi gerekir.
        image: quay.io/sharelatex/git-bridge:4.0.1
        volumes:
            # Gerçek yatay ölçeklendirme kurulumu: /data/git-bridge'i özel bir yerel SSD'ye yönlendirin.
            - ~/git_bridge_data:/data/git-bridge
        container_name: git-bridge
        environment:
            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 portu açığa çıkarı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ü bunlar diğer ana makinelerde çalışır.
            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
        volumes:
            - /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ınızı/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 makinesinde çalıştırın ve portları açı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
        volumes:
            - /tmp/scratch-disk2:/var/lib/sharelatex
            - /var/run/docker.sock:/var/run/docker.sock
        environment:
            <<: *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 makinesinde çalıştırın ve portları açı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
        volumes:
            - /tmp/scratch-disk3:/var/lib/sharelatex
            - /var/run/docker.sock:/var/run/docker.sock
        environment:
            <<: *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 makinesinde çalıştırın ve portları açı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
        volumes:
            # Gerçek yatay ölçeklendirme kurulumu: minio'yu birden fazla diskle çalıştırın, minio belgelerine bakın.
            - ~/minio_data:/data
        environment:
            # 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 makinesinde çalıştırın ve portu açın
        # ports:
        #     - "9000:9000"
        networks:
            default:
                ipv4_address: 198.18.0.5

    # Gerçek yatay ölçeklendirme kurulumu: bu kurulumu ayrı bir ana makinede bir kez çalıştırın.
    minio_setup:
        depends_on:
            - minio
        image: minio/mc:RELEASE.2023-05-18T16-59-00Z
        entrypoint: sh
        komutunu 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
        volumes:
            - ~/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 makinesinde çalıştırın ve portu açı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
        komutunu 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
        volumes:
            - ~/redis_data:/data

        # Gerçek yatay ölçeklendirme kurulumu: 198.18.0.4 ana makinesinde çalıştırın ve portu açı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 özelliklerinin kullanılmasını öneriyoruz.

Şu konudaki 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, veritabanı göçlerini otomatik olarak çalıştırır. Bu göçler **kullanmayın** birden fazla örnekten paralel olarak çalıştırılacak şekilde tasarlanmıştır.

Göçlerin, asıl web uygulaması başlatılmadan önce tamamlanması gerekir. Günlüklerde şu girdiyi arayabilir `Göçler tamamlandı` veya uygulama trafiği kabul edene kadar bekleyebilirsiniz.

Yükseltme prosedürü şu şekildedir:

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