Bu sayfa Cluster ERP sunucu sürecinin nasıl başladığını anlatır: iki giriş noktası server/main.py ve server/asgi.py, server/app.py içindeki create_app fabrikası ve açılışta ve kapanışta çalışan lifespan bağlamı. Geliştiriciler ve işletmeciler içindir. Ara katman sırası istek hattı ve ara katmanlar sayfasında, servis birimleri ve gunicorn ayarları işletim bölümündedir.
Kısaca¶
python -m cluster_erp.server.main,uvicorn.run("cluster_erp.server.app:create_app", factory=True,...)çağrısını yapar (src/cluster_erp/server/main.py:39-58).cluster_erp.server.asgi:app, bir süreç yöneticisi içincreate_app()ile oluşturulan modül düzeyinde bir uygulamadır (src/cluster_erp/server/asgi.py:1-19).create_app,Settingsokur,FastAPInesnesini kurar, hata işleyicilerini ve ara katmanları yükler, ortak rotaları ve web uygulamasını bağlar ve uygulamayı döndürür (src/cluster_erp/server/app.py:1287-1646).lifespanbağlamı veritabanı tutamacını,EventBus'ı,ModuleRegistry'yi ve depolama arka ucunu oluşturur, ardından etkin her modülü yükler (src/cluster_erp/server/app.py:58-140).- Kapanışta lifespan PDF oluşturucuyu kapatır, arka plan görevlerini iptal eder, her modülü kapatır ve veritabanını kapatır (
src/cluster_erp/server/app.py:196-224).
Nasıl çalışır¶
Giriş noktaları¶
İki giriş noktası vardır.
| Giriş noktası | Kullanım | Davranış | Kaynak |
|---|---|---|---|
python -m cluster_erp.server.main (konsol betiği cluster-erp-server) |
Geliştirme ve tek süreçli çalıştırma | Uvicorn'u fabrikayla çalıştırır; debug açıkken yeniden yüklemeyi açar; değer 1'den büyükse ve yeniden yükleme kapalıysa server_workers kadar süreç kullanır |
src/cluster_erp/server/main.py:12-58, pyproject.toml:87 |
cluster_erp.server.asgi:app |
Uvicorn işçileriyle gunicorn | Uygulamayı içe aktarma anında, işçi başına bir kez oluşturur | src/cluster_erp/server/asgi.py:1-19 |
main.py, Windows'ta 1'den büyük server_workers değerini yok sayar ve bir uyarı yazar (src/cluster_erp/server/main.py:27-35). Vekil başlık ayarlarını, erişim günlüğü anahtarını ve keep-alive süresini uvicorn'a iletir (src/cluster_erp/server/main.py:50-55). Bu ayarlar için ayarlar başvurusu sayfasına bakın.
Fabrika¶
create_app(settings=None) şu adımları sırayla çalıştırır:
- Ayar verilmemişse
Settings()oluşturur (src/cluster_erp/server/app.py:1288-1289). - Günlüğü DEBUG ya da INFO düzeyinde yapılandırır (
src/cluster_erp/server/app.py:1291-1294). - "Cluster ERP" başlığı,
0.1.0sürümü velifespanbağlamıylaFastAPInesnesini kurar./api/docsve/api/redocsayfaları yalnızcadebugaçıkken vardır (src/cluster_erp/server/app.py:1296-1303). - Ayarları
app.state.settingsüzerinde saklar (src/cluster_erp/server/app.py:1304). - Süreç geneli üç ayarı uygular: değişiklik geçmişi gizleme sütunları, yetkilendirme önbelleği süresi ve liste sayım tavanı (
src/cluster_erp/server/app.py:1307-1313). - Hata işleyicilerini yükler (
src/cluster_erp/server/app.py:1314). Bkz. hatalar ve istisnalar. - Beş ara katman ekler (
src/cluster_erp/server/app.py:1317-1430). Bkz. istek hattı ve ara katmanlar. - Sekiz ortak yönlendiriciyi, çok kiracılı kipte ayrıca signup ve vendor yönlendiricilerini ekler (
src/cluster_erp/server/app.py:1432-1450). Bkz. ortak sunucu rotaları. - Yedi satır içi rota tanımlar:
GET /api/v1/signup/(yalnızca tek kiracılı),/.well-known/security.txt,/health,/ready,/api/v1/modules,/api/v1/_metave/api/v1/_switches(src/cluster_erp/server/app.py:1451-1572). webapp/varsa web uygulamasını/app/vve/appyollarına bağlar (src/cluster_erp/server/app.py:1633-1644). Bkz. önbellek ve varlık damgası.
Modül rotalarını create_app eklemez. Her modül, lifespan onu yüklediğinde kendi rotalarını ekler.
Açılışta lifespan¶
Sıra şeması lifespan bağlamının açılış yolunu gösterir.
sequenceDiagram participant U as uvicorn veya gunicorn participant L as lifespan participant R as ModuleRegistry participant M as Module participant D as Database U->>L: uygulamayı başlat L->>D: Database(settings) L->>L: EventBus(), ModuleRegistry(), create_storage_backend() L->>R: load_all(app, bus, database, enabled_modules) R->>M: initialize, register_routes, register_events L->>D: sıralar, izinler, kullanımdan kaldırma sütunları tohumlanır L->>L: arka plan görevlerini başlat L-->>U: yield (istekleri sun)
Lifespan sırasıyla şunları yapar:
Database(settings),EventBus(),ModuleRegistry()ve depolama arka ucunu oluşturur veapp.stateüzerinde saklar (src/cluster_erp/server/app.py:60-92).AnonymiseSubjectolayına, anonimleştirilen hesabın önbellekteki kullanıcı adlarını silen bir işleyici abone eder (src/cluster_erp/server/app.py:80-90).- Çok kiracılı kipte varsayılan veritabanını oluşturur ve günceller,
TenantRegistry'yi açar ve ilk operatörü güvenceye alır. Tek kiracılı kipte bağlantı bütçesini denetler (src/cluster_erp/server/app.py:100-129). Kiracılık çok kiracılılık sayfasında belgelenir. enabled_modulesiçinde listelenen modülleri yükler (src/cluster_erp/server/app.py:140). Bkz. modül yaşam döngüsü.- Her alt tablo sekmesinin sütunları olan bir varlığı gösterdiğini doğrular; aksi halde açılışı durdurur (
src/cluster_erp/server/app.py:146,src/cluster_erp/server/app.py:547-589). - Kod sıralarını tohumlar (
src/cluster_erp/server/app.py:148,src/cluster_erp/server/app.py:1058-1066). Bkz. temel model ve kimlikler. - Her modülün metadata'sından kiracı alanı tanımlarını kurar (
src/cluster_erp/server/app.py:151). Bkz. kiracı alanları. - Metadata'dan izinleri tohumlar, eksik kullanımdan kaldırma sütunlarını ekler ve kullanımdan kaldırma kaydını kurar (
src/cluster_erp/server/app.py:152-154). - Üç veri uzlaştırma geçişi çalıştırır: CRM müşterilerinden taraflara, taraf rol bayrakları ve yarım kalmış MRP çalışmaları (
src/cluster_erp/server/app.py:155-157). - Bir günlük saklama geçişi çalıştırır, denetim günlüğü gizleme dolgusunu görev olarak başlatır ve silme defterini yeniden oynatır (
src/cluster_erp/server/app.py:160-168). - Arka plan görevlerini başlatır: saklama temizliği, abonelik taraması, analitik özet yenilemesi ve çok kiracılı kipte üyelik süresi döngüsü (
src/cluster_erp/server/app.py:170-194). - Yield eder; sunucu artık istekleri sunar (
src/cluster_erp/server/app.py:196).
Günlük arka plan döngüleri her geçişten önce 24 saat uyur (src/cluster_erp/server/app.py:384, src/cluster_erp/server/app.py:424, src/cluster_erp/server/app.py:521). Analitik döngüsü yapılandırılmış bir aralık kadar uyur (src/cluster_erp/server/app.py:483). Periyodik bir geçişi yalnızca PostgreSQL danışma kilidini (advisory lock) alan işçi çalıştırır (src/cluster_erp/server/app.py:357-369).
Kapanışta lifespan¶
Yield'den sonra lifespan ortak PDF oluşturucuyu kapatır, arka plan görevlerini iptal edip bekler, registry.shutdown_all() çağırır, kiracı kaydını kapatır ve veritabanını kapatır (src/cluster_erp/server/app.py:198-224).
Neden böyle kurulmuştur¶
- Projenin yazılı mühendislik kuralları sunucunun uvicorn fabrika desenini kullandığını belirtir.
asgi.pybelge dizgisi üretimin neden uvicorn işçileriyle gunicorn kullandığını belirtir:SIGHUPile gunicorn güncel kodu içe aktaran yeni işçiler başlatır ve eskileri durdurur; bu da kesintisiz güncelleme sağlar. Uygulama işçi başına oluşturulur, böylece yeniden yükleme yeni kodu yükler (src/cluster_erp/server/asgi.py:3-12).- Bir yorum,
main.py'nin Windows'ta tek süreç tuttuğunu, çünkü orada paylaşılan soketin daha yavaş ölçüldüğünü belirtir (src/cluster_erp/server/main.py:27-34). - Yukarıdakilerin ötesinde fabrikanın kendisi için gerekçe koddan belirlenemez.
Kurallar ve sınırlar¶
Settings()oluşturulurken doğrulama yapar ve güvensiz birleşimleri reddeder; örneğindebugaçıkken çok kiracılı kip (src/cluster_erp/config/settings.py:766-770). Bu durumda sunucu başlamaz. Bkz. ayarlar başvurusu.- Sütunsuz bir alt tablo sekmesi açılışı hatayla durdurur (
src/cluster_erp/server/app.py:547-589).
Diğer parçalarla etkileşim¶
- Modüller modül yaşam döngüsü üzerinden yüklenir.
- Burada oluşturulan
EventBustüm modüllerce paylaşılır (src/cluster_erp/server/app.py:62,src/cluster_erp/server/app.py:140). Bkz. olay veri yolu. - Saklama ve günlük geçişleri
recordsvelogsmodüllerine dayanır. Bkz. records ve zamanlanmış işler ve saklama.
Sınırlar ve açık noktalar¶
- Tek kiracılı bir açılışın Alembic göçlerini uygulayıp uygulamadığı
server/app.pyiçinde belirtilmez; lifespanupgrade_database_to_headçağrısını yalnızca çok kiracılı kipte yapar (src/cluster_erp/server/app.py:100-113). Göç yönetimi veritabanı göçleri sayfasında belgelenir. - Açılış geçişlerinin çoğu başarısız olduğunda bir uyarı yazar ve devam eder; örneğin
_seed_sequences(src/cluster_erp/server/app.py:1058-1066).
Tanıtılan terimler¶
| Terim | Kod tanımlayıcısı | Tanım | Türkçe terim | Kaynak |
|---|---|---|---|---|
| app factory | create_app |
FastAPI uygulamasını kurup döndüren işlev. | uygulama fabrikası | src/cluster_erp/server/app.py:1287 |
| lifespan | lifespan |
Sunmaya başlamadan önce açılış işini, sonra temizliği çalıştıran async bağlam. | yaşam süresi bağlamı | src/cluster_erp/server/app.py:58-59 |
İlgili sayfalar¶
- Platform çekirdeği
- Modül yaşam döngüsü
- İstek hattı ve ara katmanlar
- Ayarlar başvurusu
- Servis ve süreç yöneticisi
92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.