Factorizer/Cluster ERP WikiCluster ERP English
Ana sayfa / İşletme

Referans

Servis ve süreç yöneticisi

Bir Linux düğümünün systemd birimi ve gunicorn yapılandırması, iki sunucu giriş noktası ve bir işçinin açılış sırası.

Bu sayfa bir Linux düğümünün Cluster ERP sunucusunu nasıl çalıştırdığını açıklar: systemd birimi deploy/cluster-erp.service, gunicorn yapılandırması deploy/gunicorn.conf.py ve iki giriş noktası src/cluster_erp/server/asgi.py ile src/cluster_erp/server/main.py. Sayfa bir işçinin açılış sırasıyla biter. Uygulamanın kendi açılışında ne yaptığı sunucu açılışı ve uygulama fabrikası sayfasında açıklanır.

Kapsam ve kaynak

  • Tanımlandığı yer: deploy/cluster-erp.service, deploy/gunicorn.conf.py, src/cluster_erp/server/asgi.py (app), src/cluster_erp/server/main.py (main).
  • Sayı: birim tablosu [Unit], [Service] ve [Install] bölümlerinin her yönergesini; gunicorn tablosu yapılandırma dosyasının modül düzeyindeki her ayarını listeler.

Gerçek bir düğümün yolları değer olarak değil, birimin kendi adlarıyla (WorkingDirectory, EnvironmentFile, ReadWritePaths) yazılır.

Giriş noktaları

Giriş noktası Kullanan Davranış Kaynak
cluster_erp.server.asgi:app Linux düğümünde gunicorn create_app() ile kurulan modül düzeyinde bir uygulama; her işçi onu içe aktarır, hiçbir şey önceden yüklenmez. src/cluster_erp/server/asgi.py:1-19
python -m cluster_erp.server.main bir iş istasyonu uvicorn'u create_app fabrikasıyla koşar; hata ayıklama kipinde yeniden yükleme; işçi süreçleri yalnız hata ayıklama kipi dışında ve hiçbir zaman Windows'ta değil. src/cluster_erp/server/main.py:12-58

main.py vekil sunucu ayarlarını uvicorn'a geçirir: trust_proxy_headers değerinden proxy_headers, trusted_proxy_ips değerinden forwarded_allow_ips, erişim günlüğü anahtarı ve keep-alive saniyeleri (src/cluster_erp/server/main.py:39-58).

Systemd birimi

Yönerge Birimdeki değer Anlamı Kaynak
After, Wants ağ çevrim içi, PostgreSQL Ağdan ve yerel PostgreSQL servisinden sonra başlar. deploy/cluster-erp.service:7-8
Type simple Başlatılan süreç servisin kendisidir. deploy/cluster-erp.service:11
User, Group servis kullanıcısı Süreç root yetkisi olmadan koşar. deploy/cluster-erp.service:12-13
WorkingDirectory çalışma kopyası alembic.ini dosyasının bulunduğu depo kökü. deploy/cluster-erp.service:14
EnvironmentFile ortam dosyası Ayar kaynağı; yalnız başlangıçta okunur. deploy/cluster-erp.service:15
Environment PYTHONUNBUFFERED=1 Günlük satırları günlüğe hemen ulaşır. deploy/cluster-erp.service:16-18
Environment PLAYWRIGHT_BROWSERS_PATH PDF oluşturucunun Chromium yapısının çalışma kopyası içindeki yeri. deploy/cluster-erp.service:19-20
ExecStart deploy/gunicorn.conf.py ve cluster_erp.server.asgi:app ile gunicorn Ana süreci başlatır. deploy/cluster-erp.service:25
ExecReload ana sürece kill -HUP gunicorn güncel kodla yeni işçiler başlatır ve eskileri emekliye ayırır. deploy/cluster-erp.service:21-26
KillMode mixed Durdurma sinyalini ana süreç alır ve işçilerini durdurur. deploy/cluster-erp.service:27-29
Restart, RestartSec always, 3 systemd servisi çıktıktan üç saniye sonra yeniden başlatır. deploy/cluster-erp.service:30-31
LimitNOFILE 65535 Birkaç işçinin havuzları ve soketleri için açık dosya sınırı. deploy/cluster-erp.service:32-34
TimeoutStopSec 30 Süreç öldürülmeden önce süren isteklere tanınan süre. deploy/cluster-erp.service:35-36
ReadWritePaths yedek klasörü ve durum klasörü Yazılabilir tek yollar: yedekler, posta kuyruğu, ek depolaması. deploy/cluster-erp.service:37-38
NoNewPrivileges, PrivateTmp, ProtectSystem, ProtectHome true, true, full, true Standart systemd sertleştirmesi. deploy/cluster-erp.service:39-43
WantedBy multi-user.target Etkinleştirildikten sonra açılışta başlar. deploy/cluster-erp.service:45-46

Gunicorn yapılandırması

Her değer, uygulamanın okuduğu aynı ortam dosyasından gelir (deploy/gunicorn.conf.py:11-13, deploy/gunicorn.conf.py:22-23).

Ayar Değer Anlamı Kaynak
bind CLUSTER_ERP_SERVER_HOST:CLUSTER_ERP_SERVER_PORT Ana sürecin adresi; varsayılan geri döngü adresidir. deploy/gunicorn.conf.py:26
workers CLUSTER_ERP_SERVER_WORKERS veya 0 ya da ayarsızsa çekirdek başına bir, en çok sekiz İşçi süreci sayısı. deploy/gunicorn.conf.py:27-30
worker_class uvicorn_worker.UvicornWorker Her işçi uvicorn koşar. deploy/gunicorn.conf.py:31
preload_app False Yeniden yükleme yeni kodu yeni işçilerde içe aktarır. deploy/gunicorn.conf.py:32-34
max_requests, max_requests_jitter 5000, 500 Bir işçi bu kadar istekten ve sapmadan sonra yeniden başlar. deploy/gunicorn.conf.py:35-38
graceful_timeout 30 Yeniden yükleme veya durdurmada süren istekler için saniye; TimeoutStopSec ile eşleşir. deploy/gunicorn.conf.py:39-41
timeout 120 Saniye cinsinden işçi zaman aşımı. deploy/gunicorn.conf.py:42
keepalive CLUSTER_ERP_SERVER_KEEP_ALIVE_SECONDS, varsayılan 5 Vekil sunucu arkasında boşta keep-alive penceresi. deploy/gunicorn.conf.py:43-46
forwarded_allow_ips, proxy_allow_ips CLUSTER_ERP_TRUSTED_PROXY_IPS, varsayılan geri döngü adresi İletilen başlıklarına güvenilen karşı uçlar. deploy/gunicorn.conf.py:47-49
accesslog None gunicorn erişim günlüğü yok; uygulama kendi istek günlüğünü yazar. deploy/gunicorn.conf.py:50-52
errorlog, loglevel, capture_output standart hata, info, True Çıktıyı günlük yakalar. deploy/gunicorn.conf.py:53-56

Açılış sırası

Diyagram systemctl start komutundan bir işçinin hazır olmasına kadar olanları gösterir. Her işçi sıranın tamamını koşar; göç kilidi işçilerin şema adımında sırayla ilerlemesini sağlar.

flowchart TD
  systemd["systemd cluster-erp.service"] --> master["gunicorn ana süreci"]
  master --> w1["işçi 1 asgi:app içe aktarır"]
  master --> w2["işçi N asgi:app içe aktarır"]
  w1 --> life["lifespan başlar"]
  w2 --> life
  life --> mt{"multi_tenant"}
  mt -- "evet" --> lock["migration_lock altında upgrade_database_to_head"]
  lock --> ctl["TenantRegistry.ensure_schema ve ilk operatör"]
  mt -- "hayır" --> budget["bağlantı bütçesi denetimi"]
  ctl --> budget
  budget --> load["registry.load_all ve tohumlar"]
  load --> loops["arka plan döngüleri başlar"]
  loops --> ready["GET /ready 200 döndürür"]

Düz yazıyla:

  1. systemd gunicorn ana sürecini yapılandırma dosyasıyla başlatır (deploy/cluster-erp.service:25).
  2. Ana süreç işçileri başlatır; her biri create_app() çağıran cluster_erp.server.asgi:app modülünü içe aktarır (src/cluster_erp/server/asgi.py:17-19).
  3. Her işçinin lifespan bağlamı başlar (src/cluster_erp/server/app.py:58-65).
  4. Çok kiracılı kipte işçi gerekirse varsayılan veritabanını oluşturur ve onu danışma niteliğindeki göç kilidi içinde en yeni revizyona göç ettirir; ikinci bir işçi bekler ve sonra yapacak bir şey bulamaz (src/cluster_erp/server/app.py:99-113, src/cluster_erp/core/tenancy.py:693-720). Ardından kontrol düzlemini ve ilk operatörü hazırlar (src/cluster_erp/server/app.py:114-118). Tek kiracılı bir işçi göç ettirmez.
  5. İşçi en kötü durumdaki bağlantı talebini sunucunun max_connections değeriyle karşılaştırır ve sığmadığında POOL BUDGET uyarısı yazar (src/cluster_erp/server/app.py:119-128, src/cluster_erp/server/app.py:610-631).
  6. İşçi etkin her modülü yükler, dizileri ve yetkileri tohumlar, silme defterini yeniden oynatır ve arka plan döngülerini başlatır (src/cluster_erp/server/app.py:139-194).
  7. Bağlam yield eder; /ready veritabanını ve çok kiracılı kipte kontrol düzlemini yoklar (src/cluster_erp/server/app.py:196, src/cluster_erp/server/app.py:1476-1504).

Yeniden yükleme ve yeniden başlatma

  • systemctl reload bir HUP gönderir; uygulama önceden yüklenmediği için yeni işçiler güncel kodu içe aktarır (deploy/gunicorn.conf.py:3-10, deploy/gunicorn.conf.py:32-34).
  • install.sh, ortam dosyası çalışan servisten yeniyse, birim değiştiyse veya requirements.lock değiştiyse yeniden yükleme yerine yeniden başlatır. Yeniden yüklenen bir işçi ana sürecin önceden içe aktardığı paketleri devralır (deploy/install.sh:140-144, deploy/install.sh:228-246).

Kısıtlar ve doğrulama

  • Windows'ta main.py birden büyük server_workers değerini yok sayar ve bir uyarı yazar (src/cluster_erp/server/main.py:27-35).
  • main.py içinde yeniden yükleme ve işçi süreçleri birbirini dışlar (src/cluster_erp/server/main.py:36-38).

Tutarsızlıklar

Tanıtılan terimler

Terim Kod tanımlayıcısı Tanım Türkçe terim Kaynak
göç kilidi migration_lock Bir veritabanında açılış göçünü aynı anda tek bir işçinin koşmasını sağlayan PostgreSQL danışma kilidi. göç kilidi src/cluster_erp/core/tenancy.py:707-720
bağlantı bütçesi _single_tenant_connection_budget İşçi sayısı çarpı havuz artı taşmanın max_connections içinde kaldığı denetimi. bağlantı bütçesi src/cluster_erp/server/app.py:610-631

İlgili sayfalar


92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.

Doğrulanan commit 92f8051 · 2026-11-13