sbarbase
المحتويات

الأمر sbarbase

أمر واحد اسمه sbarbase يجمع المهام التي يكررها المشغّل كل أسبوع: فحص الخادم، وأخذ نسخة احتياطية أو استعادتها، وإضافة بيئة، وتدوير مفتاح، والترقية، وفتح Studio، وقراءة السجلات. لا يضيف قدرة جديدة. كل أمر فرعي يشغّل أداة موجودة أصلًا، أو يستدعي واجهة الإدارة البرمجية التي تستعملها لوحة الإدارة، بالفحوص نفسها وحالات الرفض نفسها.

تقرأ أوامر الإدارة سياسة MFA للتثبيت بعد تسجيل الدخول بكلمة المرور. تسمح السياسة الاختيارية للحسابات التي لا تملك عوامل موثقة بالمتابعة دون رمز مصادقة، بينما تتحقق الحسابات ذات العوامل المفعّلة منها. يغير مالك التثبيت السياسة من Account security. راجع عقد المصادقة.

التشغيل

الأمر هو الملف deploy/sbarbase في مجلد التثبيت. يشغّل lab/sbarbase.ts عبر Bun من ذلك المجلد، أينما استدعيته. يبحث عن Bun في مسار الأوامر، ثم في ~/.bun/bin للحساب الذي يشغّله، ثم في المسار الذي تعطيه الوحدة المثبّتة للخدمة؛ ويحدده SBARBASE_BUN صراحة. شغّله بحساب الخدمة، فهو مالك ملفات الحالة:

sudo -u sbarbase /opt/sbarbase/deploy/sbarbase status

لتكتب sbarbase وحده، اربطه بمسار الأوامر مرة واحدة:

sudo ln -s /opt/sbarbase/deploy/sbarbase /usr/local/bin/sbarbase

مع Docker، شغّله داخل حاوية طبقة التحكم، من مجلد المستودع:

docker compose exec sbarbase deploy/sbarbase status

يعرض sbarbase help كل الأوامر الفرعية، ويشرح sbarbase help <command> أمرًا واحدًا.

الأوامر الفرعية

المهمة الأمر ما يشغّله
معرفة حال الخادم sbarbase status يقرأ الحالة المحلية، بلا تسجيل دخول
عرض البيئات sbarbase environments يقرأ الفهرس، بلا تسجيل دخول
نسخة احتياطية الآن sbarbase backup now [<environment>] lab/backup.py create
عرض النسخ sbarbase backups list [<environment>] lab/backup.py list
استعادة بيئة sbarbase restore <environment> <backup> lab/backup.py restore بعد تأكيدك
تجهيز نسخة من تثبيت آخر sbarbase relink <runtime> <backup> واجهة الإدارة البرمجية، لمشغّلي التثبيت وحدهم
إضافة بيئة sbarbase add-environment <project> <name> واجهة الإدارة البرمجية، كما تفعل لوحة الإدارة
تدوير مفتاح عام sbarbase rotate-key <environment> واجهة المفاتيح، كما تفعل لوحة الإدارة
حصة البوابة sbarbase share <environment> [<n>] واجهة الإدارة البرمجية، كما تفعل لوحة الإدارة
نسيت كلمة مرور اللوحة sbarbase reset-password <email> واجهة الإدارة لخدمة تسجيل الدخول، على الخادم فقط
الترقية sbarbase upgrade [check|start|status|rollback|channel] lab/upgrade.py
Studio sbarbase studio start|stop <environment> واجهة الإدارة البرمجية، ثم يشغّل المشرف lab/studio.py
السجلات sbarbase logs [supervisor|auth|rest|storage|database] journalctl أو docker logs

قيمة <environment> هي معرّف البيئة من لوحة الإدارة، أو معرّف التشغيل (e_ ثم 24 رمزًا ست عشريًا)، أو <project>/<name> مثل shop/production. إذا كان لعميلين مشروعان بالاسم نفسه فاكتب <client>/<project>/<name>. أما <backup> فهو الوقت الذي يعرضه backups list، مثل 20260924T030000Z.

الأمر status

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

ينتهي بالرمز 0 حين تعمل لوحة الإدارة وتجيب كل بيئة منشورة، وبالرمز 1 في غير ذلك. ويطبع status --json الحقائق نفسها في كائن JSON واحد يناسب أدوات المراقبة.

الأوامر backup now وbackups list وrestore

تشغّل هذه الأوامر lab/backup.py، المشروح في النسخ الاحتياطي والاستعادة. إذا لم تسمِّ بيئة، ينسخ backup now كل البيئات. وتحتفظ النسخة اليدوية بعدد النسخ نفسه الذي تحتفظ به النسخة اليومية: تقرأ SBARBASE_BACKUP_KEEP من الطرفية، أو من الوحدة في تثبيت systemd، ويغيّره الخيار --keep N. إذا لم يضبطه أيّ منهما، يحتفظ lab/backup.py بسبع نسخ.

يجمع الأمر backup collect-installation --output <directory> ملفات هذا التثبيت المحلية الخاصة في مجلد خاص جديد، دون تشفير ودون أن تكون كاملة. أما backup installation --output <file> --key-file <key> فمحجوز للحزمة الكاملة، ويرفض حاليًا. كلاهما مشروح في الجمع المحلي الخاص لملفات التثبيت.

يطلب restore أن تكتب وقت النسخة قبل أن يستبدل شيئًا، ويذكر ما سيضيع. إذا لم تكن هناك طرفية، كما في سكربت، يرفض ما لم تمرر --yes. وما تحفظه الاستعادة جانبًا يُحذف بالأمر lab/backup.py discard-previous.

الأمر relink <runtime> <backup> هو الخطوة الأولى لاستعادة نسخة أُخذت على تثبيت آخر، كما يشرح النسخ الاحتياطي والاستعادة. ضع النسخة أولًا في .lab/backups/<runtime>/<backup>/. يقرأ الأمر العميل والمشروع والبيئة المسجلة في بيان النسخة، ويسجّل الدخول مثل الأوامر التالية، ثم يطلب من واجهة الإدارة البرمجية أن تنشئها هنا بالمعرّفات نفسها ومعرّف التشغيل نفسه. لا يملك ذلك إلا مشغّلو التثبيت. ولا يربط النسخة بالاسم أبدًا: إذا وُجد عميل أو مشروع بالاسم المسجل لكن بمعرّف آخر رُفض الطلب، وكذلك أي تعارض آخر، ولا يتغير شيء. بعدها يجهّز العامل بيئة فارغة، ويملؤها restore.

الأوامر add-environment وrotate-key وshare وstudio

تسجّل هذه الأوامر الدخول إلى واجهة الإدارة البرمجية بحساب المشغّل الخاص بك، تمامًا كما تفعل لوحة الإدارة، فتنطبق فحوص العضوية وحد السعة وسجل التدقيق نفسها. يأتي البريد من --email أو SBARBASE_EMAIL أو من سؤال في الطرفية. وتأتي كلمة المرور من سؤال لا يُظهر ما تكتبه، أو من --password-stdin، أو من --operator-file مع الملف الخاص ذي الصلاحية 0600 الذي يكتبه lab/operator_file.py. لا تُقبل كلمة المرور وسيطًا في سطر الأمر أبدًا. تُغلق الجلسة في النهاية، ولا يُخزَّن رمزها ولا يُطبع.

الأمر upgrade

يشغّل sbarbase upgrade الأمر lab/upgrade.py check، ولا يغيّر شيئًا. أما upgrade start وupgrade status وupgrade rollback فتشغّل الأوامر الفرعية نفسها في lab/upgrade.py، ويختار --to REF الإصدار. وتصل إلى قناة الإصدارات بالطريقة نفسها:

المهمة الأمر
أحدث إصدار موقّع وما يحتاجه sbarbase upgrade channel [--json]
الانتقال إلى إصدار متحقق منه sbarbase upgrade start --release vX.Y.Z [--allow-class rebuild|attended]
هل سيمضي التراجع sbarbase upgrade rollback --check

يجب أن يكون الإصدار وسمًا بسيطًا على شكل vX.Y.Z، وأن يسمّي --allow-class إما rebuild أو attended؛ وأعطه مرتين لإصدار يحتاج الاثنين. وأي شيء آخر، أو خيار لا يناسب الأمر الفرعي، يُرفض قبل أن يعمل lab/upgrade.py. تشرح الترقيات كل خطوة.

الأمر logs

يعرض sbarbase logs سجل المشرف عبر journalctl؛ يبقيه --follow مفتوحًا، ويحدد --lines N كم سطرًا سابقًا يظهر. يحتاج حساب الخدمة إذنًا بقراءة السجل، مثل العضوية في systemd-journal. مع Docker، سجل المشرف هو مخرج الحاوية: شغّل docker compose logs sbarbase على الخادم نفسه بدلًا منه.

يعرض sbarbase logs auth <environment> وsbarbase logs rest <environment> حاوية Auth أو REST لبيئة واحدة. ويعرض sbarbase logs storage وsbarbase logs database حاويتي Storage وPostgreSQL المشتركتين.

رموز الخروج

الرمز المعنى
0 تمّ، أو كل ما فحصه status سليم
1 فشلت العملية. ورمز خروج الأداة المفوَّضة يمر كما هو
2 خطأ في الاستعمال: أمر أو خيار غير معروف، أو وسيط ناقص
3 رُفض أو لم يُؤكَّد: لم يتغير شيء

الحدود

عدّل على GitHub