sbarbase
المحتويات

الإعدادات

ما يستطيع المشغّل ضبطه، وأين يحفظ صباربيز حالته. المسارات نسبية إلى نسخة المستودع. لا يوجد في صباربيز ملف إعدادات واحد: الإعدادات موزعة على الملفات والخيارات أدناه، والباقي يحدده الكود وملفات القفل المثبّتة الإصدار.

متطلبات الخادم

الإعداد مكانه ملاحظات
عنوان Docker DOCKER_HOST، أو --docker-host في deploy/server-acceptance.sh يجب أن يصل إلى خدمة Docker أصلية على Linux. خدمة النظام لا ترث بيئة الطرفية، فإذا كان سياق Docker على الخادم يشير إلى مقبس نسخة سطح المكتب، فمرّره صراحة في ملف الوحدة
Bun على PATH، و--bun-dir لوحدة الخدمة يبني لوحة الإدارة ويشغّل خادم الحلقة المحلية
Python /usr/bin/python3، الإصدار 3.12 أو أحدث، ومعه cryptography الخيار --python في deploy/server-acceptance.sh يغيّره

الصور المثبّتة الإصدار

الملفات lab/distro-image.lock.json وlab/images.lock.json وlab/storage-image.lock.json وlab/realtime-image.lock.json وlab/functions-image.lock.json وlab/studio-image.lock.json تثبّت كل صورة من الأصل بوسمها وبصمتها. لا تغيّرها إلا عبر lab/pin_update.py، وانظر الترقيات.

المثبّت والخدمة

أوامر /usr/bin/python3 lab/install_server.py <command>:

الأمر أو الخيار المعنى
check فحص مسبق للقراءة فقط، وينتهي برمز غير الصفر عند أي عائق
plan يطبع خطوات التثبيت بدقة
install --bootstrap-file PATH يثبّت مستخدمًا ملف المشغّل ذا الصلاحية 0600 (أدناه)
images يفحص إعدادات Docker، ثم يسحب كل صورة مثبّتة الإصدار ويتحقق منها
smoke يتحقق من أن لوحة الإدارة ونقاط الإدارة تجيب
supervise يولّد وحدة systemd لنسخة المستودع هذه ويتحقق منها، والخيار --apply يثبّتها (للجذر فقط)، و--defer-start يثبّتها ويفعّلها دون أن يشغّلها
wait-console ينتظر حتى تجيب لوحة الإدارة؛ و--timeout يحدد الثواني، وكذلك مع supervise --apply
--service-user، --home، --bun-dir الحساب ومجلد المنزل ومجلد Bun التي تُكتب في الوحدة. الحساب الافتراضي sbarbase

يقبل deploy/server-acceptance.sh الخيارات --rehearse و--skip-install و--install-unit و--first-project و--bootstrap-file و--service-user و--home و--bun-dir و--docker-host و--console-timeout و--python. الوحدة المرفقة هي deploy/sbarbase.service. لا تعدّل نسخة مثبّتة منها يدويًا، بل ولّدها بالأمر supervise.

وكيل TLS

ينهي bun deploy/console-tls-proxy.ts اتصالات HTTPS أمام خادم الحلقة المحلية.

الخيار الافتراضي المعنى
--cert، --key إلزامي ملفا الشهادة والمفتاح
--public-host إلزامي اسم الخادم العام (والمنفذ اختياريًا). يُستخدم في إعادة التوجيه بدل ترويسة Host التي يرسلها العميل
--https-port 8443 منفذ استماع HTTPS
--http-port 8080 منفذ HTTP عادي يعيد التوجيه بالرمز 308
--upstream خادم الحلقة المحلية العامل الوجهة التي تُمرَّر إليها الطلبات
--max-body حد الرفع مع 1 MiB إضافي (51 MiB) الأجسام الأكبر تأخذ 413. الأجسام حتى 1 MiB تُقرأ كاملة، والأكبر منها (رفع الملفات) تُمرَّر كما تصل
--studio-host SBARBASE_STUDIO_HOST نمط عنوان Studio، مثل studio-{id}.example.com، ويخدم الوكيل عناوينه أيضًا. أي اسم خادم ليس الاسم العام ولا loopback ولا عنوان Studio مطابقًا يأخذ 421

يضبط الأمر /usr/bin/python3 lab/studio_address.py plan|apply|verify DOMAIN العنوان العام لـStudio مرة واحدة: plan يعدّد سجل DNS الشامل والشهادة والإعداد المطلوب توفيرها، وapply (بصلاحية الجذر) يكتب SBARBASE_STUDIO_HOST في ملف systemd إضافي (drop-in) للوحة الإدارة (--service، وافتراضيه sbarbase) وللوكيل (--proxy-service، وافتراضيه sbarbase-proxy) ثم يعيد تشغيلهما، وverify يخبرك بالخطوة الناقصة (Studio).

ملف الإعداد الأولي للمشغّل

يسأل /usr/bin/python3 lab/operator_file.py PATH عن البيانات دون إظهار ما تكتبه، ثم يكتب ملف JSON بصلاحية 0600 فيه email وpassword وorganization فقط. الخيار --stdin يقرأ الكائن نفسه من الإدخال القياسي (بحد أقصى 8192 بايت) للأتمتة. مرّر الملف إلى install --bootstrap-file، أو شغّل lab/bootstrap.py تفاعليًا بدلًا منه. انظر إعداد المشغّل.

بريد كل بيئة

يُفعَّل بريد التطبيق (التأكيد والاستعادة) لبيئة واحدة بملف واحد هو .secrets/upstream/<runtime>-mail.json بصلاحية 0600. اكتبه أو اعرضه أو احذفه بالأمر lab/mail_config.py write|show|remove PATH، ولا تُطبع كلمة المرور أبدًا. المفاتيح: host وport وuser وpass وadmin_email وsender_name وreply_to وmax_frequency وotp_exp وotp_length وsecure_email_change وautoconfirm. يسري التغيير بمطابقة حاوية Auth لتلك البيئة. المخطط الكامل: بريد البيئة.

تنبيهات المشغّل

إذا وُجد الملف .lab/upstream/notifications.json، يرسل العامل أحداث المشغّل بالبريد، أو بخطاف ويب موقّع، أو عبر تيليجرام، أو بأي مزيج منها:

{
  "schema": 1,
  "email": {"enabled": true, "host": "smtp.example.invalid", "port": 587,
            "from": "sbarbase@example.invalid", "to": "operator@example.invalid", "tls": "starttls"},
  "webhook": {"enabled": true, "url": "https://hooks.example.invalid/sbarbase",
              "secretFile": ".secrets/upstream/notifier.json"},
  "telegram": {"enabled": true, "chatId": "-1001234567890",
               "tokenFile": ".secrets/upstream/telegram.json"}
}

قيمة tls واحدة من none أو starttls أو tls. سر توقيع خطاف الويب محفوظ في .secrets/upstream/notifier.json بالشكل {"schema": 1, "webhookSecret": "<64 hex characters>"}. لتيليجرام: أنشئ بوتًا عبر @BotFather، وأضفه إلى محادثتك، وضع رمزه في ملف خاص (صلاحياته 0600) بالشكل {"schema": 1, "botToken": "<token>"}. قيمة chatId هي رقم المحادثة، أو @channelname لقناة عامة. يُقرأ الرمز من هذا الملف فقط، ولا يظهر في أي رسالة. التصميم الكامل: تنبيهات المشغّل.

ربط تيليجرام من لوحة الإدارة. يستطيع مالك التثبيت ربط تيليجرام دون تعديل أي ملف: من التنبيهات في قائمة التثبيت. الصق رمز البوت الذي أخذته من @BotFather، فيتحقق منه صباربيز مع تيليجرام، ويحفظه في .secrets/upstream/telegram.json (صلاحياته 0600)، ولا يعرضه بعدها أبدًا، بل آخر أربعة أحرف منه فقط. ثم افتح الرابط الذي تعطيك إياه الصفحة واضغط Start في تيليجرام: لا تُربط إلا المحادثة التي تفتح هذا الرابط، وهو يعمل مرة واحدة ويبقى صالحًا 30 دقيقة، وتصلها رسالة تأكيد. ومن الصفحة نفسها ترسل رسالة تجريبية، أو تفصل القناة فينسى صباربيز الرمز. تبقى القنوات الأخرى في notifications.json كما هي، ويسري أي تغيير على التثبيت العامل خلال ثانية دون إعادة تشغيل. يرى مدراء التثبيت حالة القناة، ولا يغيّرها إلا المالكون، ويُسجَّل كل تغيير في سجل التدقيق. إذا انكشف الرمز يومًا، أرسل /revoke إلى @BotFather والصق الرمز الجديد.

امتلاء القرص وتوقف الخدمات. يفحص المشرف مرة كل دقيقة. إذا قلّ المتاح في نظام ملفات يكتب فيه (مجلد التثبيت، ومجلد بيانات Docker) عن 10% أو 5 غيغابايت يصلك تحذير، وإذا قلّ عن 5% أو 2 غيغابايت يصلك تنبيه حرج. وإذا بقيت حاوية قاعدة البيانات أو Storage أو تسجيل دخول الإدارة، أو حاوية Auth أو REST أو Realtime لإحدى البيئات، متوقفة خمس دقائق يصلك تنبيه حرج. لا تُراقب Edge Functions، لأنها تبقى متوقفة عمدًا ما دامت البيئة موقوفة عن الكتابة.

الفحص من الخارج. الخادم المتوقف لا يستطيع أن يبلّغ عن نفسه. في deploy/uptime-worker/ عامل Cloudflare (Worker) يسأل مسار /health العام كل خمس دقائق: فشلان متتاليان يرسلان رسالة واحدة على تيليجرام، وأول جواب سليم بعدها يرسل رسالة أخرى. انسخ هناك wrangler.example.toml إلى wrangler.toml (يتجاهله git)، واضبط فيه HEALTH_URL ومعرّف مساحة KV لحفظ حالته (bunx wrangler kv namespace create sbarbase-uptime)، ثم انشره بالأمر bunx wrangler deploy -c deploy/uptime-worker/wrangler.toml، وأعطه رمز البوت ورقم المحادثة سرّين بالأمرين bunx wrangler secret put TELEGRAM_TOKEN وbunx wrangler secret put CHAT_ID (مع -c نفسه)؛ لا يُكتب أيّ منهما في ملف. رقم المحادثة هو chatId الذي كتبته لوحة الإدارة في .lab/upstream/notifications.json.

من بين الأحداث: بيئة ظلت تحتاج أكثر من حصتها. تضمن البوابة لكل بيئة 8 طلبات في الوقت نفسه، وتسمح للمزدحمة أن تستعير حتى 24 من 64 (8 لكل واحدة من البيئات الثماني التي يتسع لها التثبيت)، مع إبقاء الحصة غير المستخدمة لكل مشروع نشط في الدقيقة الأخيرة فارغة (8 على الأقل). الاستعارة وحدها لا تُبلَّغ أبدًا. إذا بقيت البيئة 15 دقيقة متتالية تُرفض عند حدها، أو تزاحم جارة لها، يصلك تنبيه واحد عنها مع ما يجب فعله: ارفع حصتها (صفحة البيئة في لوحة الإدارة، قسم حصة البوابة، لمشغّلي التثبيت وحدهم)، أو انقلها إلى محرك قاعدة بيانات خاص بها، أو كبّر الخادم. لا تُرفع الحصة إلا إذا بقيت حصص كل البيئات الجاهزة ضمن الـ64 التي تملكها البوابة، فإن لم تتسع فاخفض حصة بيئة أخرى أولًا. التصميم: الحصة العادلة.

نسخ احتياطية خارج الخادم

إذا وُجد الملف .lab/upstream/backup-offsite.json يُشفَّر كل تشغيل يومي للنسخ الاحتياطي ويُنسخ إلى مخزن واحد متوافق مع S3 (bucket):

{
  "schema": 1,
  "s3": {"endpoint": "https://s3.eu-central-1.amazonaws.com", "region": "eu-central-1",
         "bucket": "example-backups", "prefix": "sbarbase/",
         "credentialsFile": ".secrets/upstream/offsite-s3.json"},
  "keyFile": ".secrets/upstream/offsite-key.json"
}

يجب أن يكون endpoint بعنوان https (ويُقبل http العادي على الحلقة المحلية فقط). تقبل prefix الحروف والأرقام و. و_ و- و/. الحقل credentialsFile ملف بصلاحية 0600 بالشكل {"schema": 1, "accessKeyId": "...", "secretAccessKey": "..."}. والحقل keyFile ملف بصلاحية 0600 بالشكل {"schema": 1, "key": "<64 hex characters>"}، لا يُنشأ إلا بطلب صريح عبر python3 lab/backup.py offsite-key PATH. يُرفض الملفان إذا كانا رابطًا رمزيًا أو مقروءين للمجموعة أو لغيرها. يتبع الاحتفاظ SBARBASE_BACKUP_KEEP. الإعداد والحدود في النسخ الاحتياطي والاستعادة.

قناة التحديث

تقع إعدادات التحديث وطلباته وسجل الترقية في .lab/upgrades/، خاصة بحساب الخدمة: المجلد 0700، وملفات JSON بصلاحية 0600، ويُستبدل كل منها دفعة واحدة. لا تكتب لوحة الإدارة إلا settings.json وrequest.json، ويكتب المشرف وlab/upgrade.py الباقي (الترقيات).

المسار ما يحفظه
.lab/upgrades/settings.json إعدادات المشغّل: check (مفعّل افتراضيًا)، وautomatic (معطّل افتراضيًا)، وwindow نافذة الصيانة بالتوقيت المحلي للخادم (افتراضيًا من 3:00 AM إلى 5:00 AM، وتُحفظ "03:00" و"05:00"). الملف الغائب أو التالف يعني القيم الافتراضية
.lab/upgrades/request.json الطلب الوحيد قيد التنفيذ (apply أو rollback أو check، مع acknowledged لإصدار attended)، ولا يُنشأ إلا إذا لم يوجد غيره؛ ويحكم عليه المشرف من جديد قبل التنفيذ
.lab/upgrades/last-request.json آخر طلب انتهى، لعرض التقدم في لوحة الإدارة
.lab/upgrades/current.json كلمة المشرف إلى لوحة الإدارة: الإصدار الذي يعمل، وحكم rollback، وحكم apply على الإصدار المعروض (هل يمكن تثبيته الآن، والسبب، وهل يحتاج الإقرار)، وpending ما دامت ترقية أو تراجع ينتظر، وtimezone التي تُقرأ بها النافذة
.lab/upgrades/available.json نتيجة آخر فحص: الإصدار الذي يعمل، والإصدار المعروض بصنفه وملاحظاته وأسباب رفضه، والإصدارات الأحدث التي تخطّاها الفحص مع السبب
.lab/upgrades/available.previous.json نتيجة فحص جرى على إصدار آخر، نُقلت جانبًا حتى لا تعرض لوحة الإدارة الإصدار الذي ثُبّت للتو
.lab/upgrades/check.json وقت آخر فحص، وخطؤه، وعدد مرات الفشل المتتالية (لتباعد المحاولات)
.lab/upgrades/outcome.json كيف انتهت آخر عملية تحديث فرعية شغّلها المشرف (هل تجاوزت نقطة اللاعودة، وهل غيّرت شيئًا، وأسباب الرفض، والخطأ)، لتفاصيل الطلب وللمحاولات التلقائية
.lab/upgrades/ledger.json لكل إصدار: هل أُعلن عنه، وعدد المحاولات التلقائية، وهل استُنفدت محاولة بعد نقطة اللاعودة، وهل تُراجع عنه
.lab/upgrades/state.json آخر ترقية: من أين وإلى أين، والمرحلة (applied، confirmed، rolling_back، rolled_back، rollback_failed، failed)، ومن بدأها، ولقطتها، وعدد محاولات الحارس ومرات فشل النقل، وسبب العودة، وفشل التراجع عن إصدار معتمد، وهل هي عالقة، والإشعارات التي يرسلها التشغيل التالي
.lab/upgrades/snapshots/ لقطات حالة التحكم (الفهرس ومخزن المفاتيح) مع ملف وصف؛ تُحفظ أحدث ثلاث، ومعها اللقطة التي تذكرها آخر ترقية
.lab/upgrades/guard.py حارس التشغيل الخاص بالإصدار الذي غادرته آخر ترقية، ويشغّله كل تشغيل أولًا (انظر حارس التشغيل)
.lab/upgrades/hold موجود ما دام إصدار جديد ينتظر فحوص السلامة؛ ولا تحجز البوابة حركة التطبيقات إلا إذا قال state.json أيضًا إن بداية ما تنتظر الاعتماد
.lab/upgrades/probe-token رمز عشوائي لفحوص سلامة هذا التشغيل عبر البوابة، بصلاحية 0600؛ ولا يوجد إلا ما دام الحجز قائمًا
.lab/upgrades/evidence-<time>/ أدلة كُتبت على هذا الخادم، نُسخت جانبًا قبل أن تنتقل نسخة المستودع (في ترقية أو عودة)
.lab/upgrades/aside-<time>/ التعديلات المحلية على الملفات المتتبَّعة خارج docs/evidence/، والملفات غير المتتبَّعة التي سيكتب الإصدار السابق فوقها، تنسخها العودة إلى هنا قبل أن تنقل نسخة المستودع قسرًا؛ مجلد لكل عودة. لا شيء يحذفها: احذف المجلد بنفسك حين لا تحتاجه
.lab/upgrades/upgrade.lock، channel.lock، check.log، apply.log، rollback.log القفل الذي تحمله ترقية أو تراجع واحد، وقفل فحص أو جلب إصدار واحد، ومخرجات آخر عملية فرعية من كل نوع
.lab/upstream/worker-drain موجود ما دام المشرف يصرّف العمل قبل تحديث: لا يلتقط العامل مهمة جديدة
.lab/upstream/upgrade-intent.json الصور المثبّتة التي يجوز للتشغيل التالي أن يستبدلها، وتكتبه الترقية أو العودة

يحدد SBARBASE_RELEASE_SOURCE مستودع Git الذي يقرأه فحص الإصدارات (عنوان أو مسار)، والافتراضي المستودع الرسمي عبر HTTPS. أيًا كان المصدر، يُتحقق من التواقيع مقابل deploy/release-signers في نسخة المستودع التي تعمل. ويضبط TZ المنطقة الزمنية التي تُقرأ بها نافذة الصيانة؛ ويمرر compose.yaml كليهما إلى الحاوية (انظر إعدادات المشغّل).

مجلدات الحالة

يتجاهل Git المجلدين كليهما. لا تطبع محتوى .secrets/ أبدًا، ولا تحذف أيًّا منهما لتتجاوز رفضًا.

المسار ما يحفظه
.lab/upstream/control.sqlite الفهرس: العملاء والمشاريع والبيئات والعضويات والمهام والتوجيه
.lab/upstream/server.json عنوان خادم الحلقة المحلية العامل ورقم عمليته (PID)
.lab/upstream/*.json سجلات العمليات وواصفات الاستعادة ومخرجات الفحوص الحية
.lab/ui/ لوحة الإدارة بعد بنائها
.lab/backups/ النسخ اليومية لكل بيئة، وبيان التثبيت لكل تشغيل تحت installation/
.lab/backups/upgrade-moved.json تشغيلات النسخ الاحتياطي الخاصة بترقيات نقلت نسخة المستودع. تُحمى آخر 3 منها من الحذف الدوري؛ أما محاولة الترقية التي توقفت قبل الانتقال فنسخها عادية
.secrets/upstream/runtime.json بيانات الاعتماد المولّدة للخدمات التي يملكها صباربيز
.secrets/upstream/managed-keys.sqlite البيانات الوصفية لمفاتيح API: المفاتيح السرية ببصماتها فقط، والمفاتيح العامة محفوظة أيضًا لتعرضها اللوحة مرة أخرى
.secrets/upstream/access-tokens.sqlite رموز الوصول (sbp_...) ببصمات SHA-256، مع نطاقها وتاريخ انتهائها
.secrets/upstream/studio-session.key المفتاح الذي يوقّع تذاكر دخول Studio وملفات تعريف جلسته
.secrets/upstream/telegram.json رمز بوت Telegram، عند ربطه من لوحة الإدارة
.secrets/upstream/bootstrap.json سجل عملية إعداد المشغّل (بلا كلمة مرور)
.secrets/offsite.json إعدادات النسخ خارج الخادم، ومفتاح التخزين وعبارة المرور (النسخ الاحتياطي والاستعادة)
.secrets/upstream/<runtime>-auth.json إعدادات تسجيل الدخول لبيئة، ومنها أسرار المزوّدين، تكتبها اللوحة (تسجيل الدخول)

إعدادات المشغّل

اضبطها في compose.yaml (مع Docker) أو في أسطر Environment= لخدمة systemd.

المتغير الافتراضي المعنى
SBARBASE_STUDIO_HOST {id}.studio.localhost عنوان Studio لكل بيئة، و{id} مكان أحرفها الست عشرية الأربعة والعشرين، مثل studio-{id}.example.com. القيمة الافتراضية تعمل عبر نفق SSH، أما النمط العام فيحتاج سجل DNS شاملًا وشهادة تغطيه، ويقرأ وكيل TLS المتغير نفسه (يكتبه lab/studio_address.py للاثنين؛ Studio). يُطبَّق أي تغيير عند التشغيل التالي
SBARBASE_PUBLIC_URL http://localhost العنوان الذي يصل منه الناس ومزوّدو OAuth إلى هذا الخادم، مثل https://api.example.com. يبني Auth منه روابط البريد وعناوين العودة من OAuth. يُطبَّق أي تغيير عند التشغيل التالي
SBARBASE_CONSOLE_PORT يُختار عند التشغيل، و8790 مع Docker منفذ اللوحة والـ API على الحلقة المحلية، لوكيل TLS
SBARBASE_BACKUP_HOUR 3 ساعة النسخ الاحتياطي اليومي بتوقيت UTC؛ القيمة off توقفه
SBARBASE_MANAGEMENT_SESSION_SECONDS 2592000 عدد الثواني التي يجوز فيها لتسجيل دخول واحد بكلمة المرور إبقاء جلسة الإدارة صالحة، من 3600 إلى 2592000 (ثلاثون يومًا). القيمة الفارغة أو غير الصالحة أو الخارجة عن النطاق تعني الافتراضي، لا أقرب حد. يلزم بعد التغيير إعادة تشغيل الخدمة: يقطع الخفض الجلسات القائمة عند طلبها التالي، ويسري الرفع على الإثباتات التي تصدر بعد ذلك. تحفظ لوحة الإدارة الجلسة في المتصفح حتى تسجيل الخروج، ويقرؤها أي برنامج نصي يعمل على نطاقها (التفاصيل وطريقة الضبط، في المصادقة متعددة العوامل لحسابات الإدارة)
SBARBASE_BACKUP_KEEP 7 عدد النسخ المحفوظة لكل بيئة. لا تُحسب النسخ المأخوذة لترقية: تُحفظ نسخ آخر 3 ترقيات نقلت نسخة المستودع دائمًا
TZ UTC في الحاوية المنطقة الزمنية التي تُقرأ بها نافذة الصيانة للتحديث التلقائي، مثل Asia/Dubai. خارج Docker تسري منطقة الخادم نفسه
SBARBASE_RELEASE_SOURCE المستودع الرسمي المكان الذي يقرأ منه فحص التحديثات الإصدارات الموقّعة: عنوان Git لمرآة أو مسارها
SBARBASE_DATABASE_PORT 6543 منفذ الوصول المباشر إلى قاعدة البيانات (الوصول إلى قاعدة البيانات)؛ والقيمة off تطفئه
SBARBASE_DATABASE_BIND 127.0.0.1 العنوان الذي يستمع عليه ذلك المنفذ. أبقِه على loopback واستخدم نفق SSH؛ فأي عنوان آخر يرسل بيانات قاعدة البيانات دون تشفير
SBARBASE_UPLOAD_LIMIT_MB 50 أكبر ملف يستطيع التطبيق رفعه إلى Storage، بالميبيبايت (من 1 إلى 5120)، مثل حد حجم الملفات العام في Supabase. الرفع الأكبر يأخذ 413. يُطبَّق أي تغيير عند التشغيل التالي، الذي يعيد إنشاء حاوية Storage المشتركة؛ ويمكن أن يكون حد الـbucket نفسه أصغر (الدليل)

ومع Docker يقرأ deploy/compose.sh هذه أيضًا. ويرفض إن غاب المقبس أو مجلد بيانات Docker، أو إن لم يكن SBARBASE_ROOT هو نسخة المستودع هذه:

المتغير الافتراضي المعنى
SBARBASE_ROOT نسخة المستودع نسخة المستودع، مركّبة في المسار نفسه داخل الحاوية، ويجب أن تكون النسخة التي يعمل منها deploy/compose.sh
SBARBASE_DOCKER_SOCKET /var/run/docker.sock مقبس Docker المحلي الذي تتحكم به الحاوية
SBARBASE_DOCKER_DATA_ROOT /var/lib/docker مجلد بيانات Docker، مركّبًا للقراءة فقط لتجد حدود الإدخال والإخراج قرصه
SBARBASE_COMPOSE_PROJECT COMPOSE_PROJECT_NAME، وإلا sbarbase اسم مشروع Compose

متغيرات البيئة الداخلية

باقي المتغيرات التي تبدأ بـSBARBASE_* (مثل SBARBASE_WORKER_FD وSBARBASE_EFFECT_TOKEN، وSBARBASE_DOCKER_PROFILE وSBARBASE_CONTAINER اللذين يضبطهما compose.yaml) تنقل واصفات الأقفال والرموز بين عمليات صباربيز نفسها. ليست إعدادات للمشغّل، فلا تضبطها يدويًا.

ما لا يمكن ضبطه بعد

فئات الموارد وعتبات القبول ثابتة في الكود (lab/resource_policy.py، lab/pressure_admission.py). حدود التزامن في البوابة ومهلها قيم افتراضية في المُنشئ داخل src/gateway/concurrency.ts.

عدّل على GitHub