ei-worker daemon’unu çalıştırırsınız; bu süreç yalnızca dışa doğru HTTPS çağrıları yapar, sandbox işleri için Empiric Intelligence’a uzun yoklama uygular, her işlemi yerel platformunuzda yürütür ve sonuçları geri gönderir.
Gereksinimler
- Python 3.11+.
- Empiric Intelligence bulut API’sine giden HTTPS erişimi.
- Yerel sandbox platformuna ağ erişimi.
- Sandbox örneklerinden yapıt deposuna giden HTTPS erişimi (aşağıdaki “Dosya aktarımı ve dışa erişim” bölümüne bakın).
- Worker’ın sonuç günlüğü için kalıcı disk (aşağıdaki “Sonuç günlüğü ve kurtarma” bölümüne bakın).
Dosya aktarımı ve dışa erişim
Küçük işlem verileri iş kuyruğu üzerinden taşınır; dosya içerikleri taşınmaz. Sandbox, bulutun her işlem için ürettiği kısa ömürlü ön imzalı URL’leri kullanarak yapıt deposuyla doğrudan okuma ve yazma yapar. Büyük dosyalar Empiric Intelligence API’si üzerinden gidip gelmez; yüzlerce megabaytlık bir çalışma alanını uygulanabilir kılan şey tam olarak budur. Bu nedenle tek bir dışa erişim kuralı yeterlidir ve bu kural worker sunucusunda değil, sandbox’larda tanımlanır:
Herhangi bir kuralı açmadan önce Empiric Intelligence ilgiliniz, kurulumunuza ait tam yapıt sunucu adını doğrular.
Gerekli olmayanlar:
- Hiçbir zaman içe erişim kuralı gerekmez. İki kural da dışa yöneliktir; platformunuz dışarıdan erişilemez kalır.
- Ağınızda hiçbir bulut kimlik bilgisi tutulmaz. Ön imzalı URL kendi yetkisini taşır, tek bir nesneyle sınırlıdır ve 60 dakika içinde geçerliliğini yitirir. Ne worker ne de bir sandbox yapıt deposu için erişim anahtarı tutar.
- Worker sunucusunun yapıt deposuna erişmesi gerekmez. Worker API ile, sandbox’lar depo ile konuşur.
network_policy ile kısıtlarsanız yapıt sunucusu erişilebilir kalmalıdır; aksi halde dosya hazırlığı çalışmanın başında başarısız olur ve çalışma sürdürülemez.
Politikanız Amazon S3’e dışa erişime izin veremiyorsa, başlamadan önce bize ulaşın. Yapıt trafiğini Empiric Intelligence’ın kendi sunucusundan sunabiliriz; böylece izin listenizde üçüncü bir tarafın alan adı yerine bizim işlettiğimiz tek bir alan adı yer alır. Bu özellik henüz geliştirilmedi: sizi engellediğini bildirmeniz yeterli, önceliklendiririz. Kısıtınız müşteri verisinin ağınızdan hiç çıkmaması ise — bu, izin listesinden farklı bir gereksinimdir — bunu açıkça belirtin; çünkü orada gereken şey dağıtım değil, depolama tasarımıdır.
Kurulum
empiric-intelligence-worker paketi PyPI üzerinde yayımlanmıştır; runtime id ve worker anahtarı bilgilerinizi Empiric Intelligence temsilciniz ayrıca iletir. Sistem servisi olarak çalıştıracaksanız sabitlenmiş wheel paketini root tarafından yönetilen bir sanal ortama kurun:
pipx veya uv tool, etkileşimli bir kullanıcı için uygundur; ancak bunların çalıştırılabilir dosyaları genellikle o kullanıcının ev dizininde bulunur ve aşağıdaki sıkılaştırılmış systemd biriminin bu dizine erişimi bilinçli olarak kapatılmıştır.
Sürümler, Empiric Intelligence CI üzerinden PyPI Trusted Publishing ile yayımlanır ve kaynak doğrulaması için Sigstore PEP 740 attestation kayıtları taşır. Paket, kısıtlı kullanım lisansıyla kaynak koda erişilebilir (source-available) biçimde dağıtılır (bkz. LICENSE): Empiric Intelligence’a bağlanmak için çalıştırabilirsiniz, ancak yeniden dağıtamaz veya değiştiremezsiniz.
Yapılandırma
Worker tarafından okunan Empiric Intelligence ayarları:e2b SDK’sının kendisi tarafından okunan sandbox platformu ayarları (worker bunlara bilinçli olarak dokunmaz; tek bir worker’ı hem gerçek E2B bulutunda hem de bir CubeSandbox platformunda çalışabilir kılan da budur):
Worker anahtarı hakkında
lkw01_... biçimindeki anahtar, Empiric Intelligence tarafından tek bir runtime için üretilir ve yalnızca bir kez gösterilir; anahtarı Empiric Intelligence temsilcinizden alırsınız. Yalnızca bu runtime’ın iş kuyruğu için kimlik doğrular (bir runtime’a ait anahtar başka bir runtime’ın kuyruğunu asla yoklayamaz). Anahtarı, sahibi root olan ve izinleri 600 olarak ayarlanmış bir dosyada saklayın. Anahtar değişimi yeniden üretim demektir: yeni bir anahtar alır ve ortam değişkeni dosyasında eskisiyle değiştirirsiniz.
systemd ile çalıştırma
Bu birimi/etc/systemd/system/ei-worker.service olarak kaydedin:
SIGTERM alındığında worker düzenli biçimde kapanır: yeni iş üstlenmeyi bırakır, devam eden işlemleri tamamlar ve çıkmadan önce hâlâ üzerinde olan işleri bildirir.
Ön kontroller: doctor
Daemon’u etkinleştirmeden önce ve her platform yükseltmesinden sonra yeniden çalıştırın:OK, WARN veya FAIL yazdırır (herhangi bir FAIL durumunda sıfırdan farklı çıkış kodu döner):
- Bulut erişilebilirliği, anahtarın geçerliliği ve anahtar ile runtime arasındaki bağ.
- Sunucuya göre saat sapması (30 saniyenin üzerinde uyarı, 300 saniyenin üzerinde hata).
- Yerel sandbox platformunun erişilebilirliği.
- Duraklatma yeteneği (
--probekullanılmadıkça yalnızca hatırlatma). - Anlık görüntü yeteneği (CubeSandbox >= v0.5.1;
--probekullanılmadıkça yalnızca hatırlatma). - Boş disk alanı.
--probe ek olarak gerçek sandbox kontrollerini çalıştırır. Duraklatma kontrolü burada yürütülür: platformunuzda gerçek bir sandbox oluşturur, duraklatılan bir sandbox’ın diskinin korunduğunu ve doğru şekilde sürdürüldüğünü doğrular. Anlık görüntü kontrolü ise bu runtime için Empiric Intelligence bulutundan kendi turunu çalıştırmasını ister (anlık görüntü alır, bu anlık görüntüden bir türev sandbox başlatır, diskin aktarıldığını doğrular) ve dönen sonucu yazdırır; çünkü “Empiric Intelligence bu runtime’ı bağlayacak mı” sorusunu yalnızca bulut yanıtlayabilir — ve o turun oluşturduğu anlık görüntü aynı adımda bulut tarafında kaydedilir, dolayısıyla sağlayıcınızda takip etmediğimiz bir artefakt kalmaz. Bu kontrol için daemon çalışıyor olmalıdır, çünkü tur bu runtime’ın kendi iş kuyruğu üzerinden yürütülür; çalışmıyorsa kontrol bunu açıkça söyler ve daemon’u başlatmanızı ister. İki kontrolün oluşturduğu hiçbir şey yok edilmez: denetim sandbox’ları duraklatılır ve anlık görüntü olduğu yerde bırakılır — ondan bir türev sandbox başlatıldığı için sağlayıcınız zaten silmeyi reddederdi. Her ikisi de depolama tüketir, işlem gücü tüketmez; platformunuz anlık görüntüyü sabitleyen duraklatılmış kutuların süresini doldurduğunda Empiric Intelligence anlık görüntüyü toplar. Devreye alırken bir kez, ardından her platform yükseltmesinden sonra çalıştırın. Bunun CubeSandbox üzerinde neden önemli olduğunu öğrenmek için bkz. Uyumluluk.
Sürüm sabitleme ve HTTP 426
Bulut, dağıtım genelinde geçerli bir genel worker sürüm alt sınırı uygular (anlık görüntü ve kimlik doğrulama uyumluluğu için; şu anda 0.5.0 veya runtime üzerinde yapılandırılmış daha yüksek bir sabitleme). Bu sınırın altındaki bir worker HTTP 426 ile geri çevrilir ve sıfırdan farklı bir durum koduyla çıkar; systemd bu durumda daemon’u bilinçli olarak yeniden başlatmaz (kalıcı bir sorunda çökme ve yeniden başlatma döngüsüne girilmez). Sabitlenmiş paketi yükseltin (sudo /opt/ei-worker/bin/pip install --upgrade empiric-intelligence-worker==0.13.1) ve daemon’u yeniden başlatın (sudo systemctl restart ei-worker). Worker 0.7.0, sandbox network_policy yeteneğini ekler (izin listeleri ve ağ erişimi kapalı türev sandbox’lar dahil). Dağıtım sürecinde, genel ağa çıkışa izin veren işler uyumlu eski bir worker üzerinde sürebilir; ancak çıkışı kısıtlanmış bir çalıştırma, işi üstlenen worker’ı denetler ve bu yetenek yoksa başlamayı reddeder. Worker 0.8.0 bir WIRE PROTOKOL değişikliğidir: büyük dosya baytları artık bir işlem sonucunun içinde taşınmaz, bu nedenle 0.7.0 veya daha eski bir worker yükseltilene kadar kimlik doğrulamada geri çevrilir. Kurulumunuzda başka bir şey değişmez — baytlar zaten sandbox’tan depoya gidiyordu ve hâlâ öyle. Worker 0.10.0 da bir WIRE PROTOKOL değişikliğidir; bu kez eksiltici bir değişiklik: exec-server stdio tünel işlemi ve ona ait iki aktarma uç noktası kaldırıldı, çünkü artık bunları gönderen hiçbir çağıran kalmamıştı. 0.9.0 veya daha eski bir worker, yükseltilene kadar kimlik doğrulamada geri çevrilir; sandbox düzleminizde, anahtarınızda veya systemd birim dosyanızda hiçbir şey değişmez. Worker 0.11.0 aynı eksiltici türden bir WIRE PROTOKOL değişikliğidir: sandbox.kill işlemi işlem sözlüğünden kaldırıldı. Empiric Intelligence artık hiçbir yerde bir sandbox’ı yok etmiyor — işi biten bir kutu DURAKLATILIR, bu da hiç işlem gücü harcamaz ve diskini süresiz saklar — dolayısıyla bulutun bu işlem için bir çağıranı yok; onu hâlâ yanıtlayan bir worker ise sizin düzleminizde duran bir kutu yok etme yetkisi anlamına gelirdi. 0.10.0 veya daha eski bir worker, yükseltilene kadar kimlik doğrulamada geri çevrilir. Worker 0.12.0 eklemeli türden bir WIRE PROTOKOL değişikliğidir: uzun süren bir işlem çalışırken buluta İLERLEME bildirir ve bir komutun sınırı artık toplam süre değildir. exec.run bir zaman aşımı yerine SESSİZLİK sınırı taşır — çıktı üretmeye devam eden bir komut, ne kadar uzun sürerse sürsün durdurulmaz; pencerenin tamamı boyunca sessiz kalan bir komutun ise SÜRECİ kutunun içinde sonlandırılır (kutunun kendisine dokunulmaz, çalışmaya devam eder). Bir şablon derlemesi de derleme günlüğünü aynı şekilde bildirir, böylece yavaş bir imaj derlemesi artık otuzuncu dakikada terk edilmez. 0.11.0 veya daha eski bir worker, yükseltilene kadar kimlik doğrulamada geri çevrilir; sandbox düzleminizde, anahtarınızda veya systemd birim dosyanızda hiçbir şey değişmez. Worker 0.13.1 eksiltici türden bir WIRE PROTOKOL değişikliğidir: sandbox.delete_template işlemi işlem sözlüğünden kaldırıldı. Empiric Intelligence saklanan hiçbir sandbox nesnesini silmez — bir şablon veya anlık görüntü saklanır, sağlayıcı onu geri almaz ve bunun için ücret almaz — dolayısıyla bulutun bu işlem için bir çağıranı yok; onu hâlâ yanıtlayan bir worker ise sizin düzleminizde duran, saklanan bir nesneyi yok etme yetkisi anlamına gelirdi. 0.12.0 veya daha eski bir worker, yükseltilene kadar kimlik doğrulamada geri çevrilir; sandbox düzleminizde, anahtarınızda veya systemd birim dosyanızda hiçbir şey değişmez.
Yükseltme sırası: önce bulut, sonra paket. Protokol her iki yönde de TAM olarak eşleşir; bu nedenle yeni paketi eski buluta karşı önceden hazırlamak, eski bir paketin yeni buluta karşı geri çevrilmesiyle aynı nedenle geri çevrilir. Yeni protokolü taşıyan Empiric Intelligence dağıtımını bekleyin, ardından worker’ı yükseltin.
Sonuç günlüğü ve kurtarma
Her işlemin sonucu, bildirilmeden önce yerel bir SQLite günlüğüne yazılır. Bu, sonuçları çökmeye dayanıklı kılar:- Daemon veya makine yeniden başlarsa, yeniden teslim edilen bir işlem iki kez yürütülmek yerine günlükteki sonucu yeniden oynatır.
- Bir işlem farklı bir makineye yeniden teslim edilirse (örneğin ikinci bir worker makinesine yük devretmesinden sonra) ve o makinede günlüğe yazılmış bir sonuç yoksa, worker bir komutu tekrarlamak veya kopya bir sandbox oluşturmak yerine yürütmeyi belirsiz (indeterminate) olarak bildirir.
İnce ayar
EI_WORKER_CONCURRENCY: platformunuzda kapasite payı varsa ve görevler kuyruğa biriktiyse bu değeri yükseltin; her yuva aynı anda tek bir sandbox’ın işlemlerini yürütür.EI_WORKER_IDLE_TIMEOUT_S: boşta duran bir üstlenmenin yuvası bırakılmadan önce ne kadar tutulacağı. Varsayılan değer (330 saniye), bulutun işlem başına süre bütçesinin üzerinde kalacak şekilde seçilmiştir; yalnızca yuva kıtlığı sorun oluşturuyorsa düşürün.
