# البداية السريعة

من خادم فارغ إلى استدعاء supabase-js على أول بيئة لك. هذه هي الخطوات التي نفّذتها تجربة كاملة على خادم فارغ، في آلة افتراضية نظيفة بنظام Fedora 44 فيها 4 أنوية معالج و6 GB من الذاكرة ([lab/vm-rehearsal.sh](https://github.com/M7MMAD-OMAR/sbarbase/blob/main/lab/vm-rehearsal.sh)). لم تُشغَّل على خادم حقيقي بعد، وخطوة HTTPS في النهاية لم تُفحص إلا بشهادة موقّعة ذاتيًا. صباربيز قيد التطوير: لا تضع عليه بيانات لا تحتمل خسارتها.

إذا كان Docker موجودًا على الخادم، فإن [التثبيت عبر Docker](https://base.sbarah.com/docs/guides/docker/) أقصر ولا يعتمد على إصدار Python في الخادم. هذه الصفحة هي مسار systemd.

قبل أن تبدأ، اقرأ [اختيار خادم](https://base.sbarah.com/docs/guides/choosing-a-server/). تحتاج صلاحية root على خادم Fedora 44 أو Ubuntu 26.04 فيه 4 أنوية و8 GB من الذاكرة (3 أنوية هي الحد الأدنى المفيد) و12 GiB من القرص الفارغ. آلة التجربة ذات 6 GB اتسعت لبيئة واحدة بالضبط، وهي التي تنشئها الخطوة 6.

![ثماني خطوات: حزم النظام، وحساب الخدمة ونسخة المستودع، وBun، وملف المشغّل، وفحص الخادم، وأمر استلام واحد يثبّت ويجرّب وينشئ أول مشروع، ثم لوحة الإدارة عبر نفق SSH، وتطبيقك عبر HTTPS](https://base.sbarah.com/docs/diagrams/install-flow.ar.svg)

*المسار كله في نظرة واحدة، كما جُرّب في آلة افتراضية محلية؛ ولم يُشغَّل على خادم حقيقي بعد.*

## 1. ثبّت حزم النظام

على Fedora 44:

```bash
sudo dnf install -y moby-engine git python3-cryptography
sudo systemctl enable --now docker
```

على Ubuntu 26.04 أو Ubuntu 24.04 أو Debian 13:

```bash
sudo apt-get install -y docker.io git python3-cryptography curl unzip
sudo systemctl enable --now docker
```

الحزمتان `curl` و`unzip` لمثبّت Bun في الخطوة 3. تحقق أن `/usr/bin/python3 --version` يعطي 3.12 أو أحدث. تنجح اختبارات الوحدات مع إصدار Python الذي يأتي مع Ubuntu 24.04 وDebian 13، لكن هذا التثبيت لم يُجرَّب من أوله إلى آخره إلا على Fedora 44، ولم يُجرَّب على أي من الأنظمة الثلاثة هذه.

## 2. أنشئ حساب الخدمة ونسخة المستودع

يعمل صباربيز بحسابه الخاص، وهو صاحب نسخة المستودع تحت `/opt/sbarbase`:

```bash
sudo useradd -m -s /bin/bash sbarbase
sudo usermod -aG docker sbarbase
sudo install -d -o sbarbase -g sbarbase /opt/sbarbase
sudo -u sbarbase git clone https://github.com/M7MMAD-OMAR/sbarbase /opt/sbarbase
```

العضوية في مجموعة `docker` تعادل root على هذا الخادم؛ ويشرح [نموذج التهديد](https://base.sbarah.com/docs/explain/threat-model/) لماذا نقبل ذلك حاليًا.

## 3. ثبّت Bun لذلك الحساب

```bash
sudo -u sbarbase -H bash -c 'curl -fsSL https://bun.sh/install | bash -s bun-v1.3.14'
```

نسخت التجربة الملف التنفيذي نفسه لـBun 1.3.14 إلى `/home/sbarbase/.bun/bin` بدلًا من ذلك؛ والمثبّت الرسمي يضعه في المكان نفسه.

## 4. اكتب بيانات اعتماد المشغّل الأول في ملف خاص

```bash
cd /opt/sbarbase
sudo -u sbarbase /usr/bin/python3 lab/operator_file.py /home/sbarbase/operator.json
```

يطلب بريدًا إلكترونيًا واسم عميل وكلمة مرور (مرتين، دون إظهارها، و12 حرفًا على الأقل)، ثم يكتب ملفًا بالوضع 600. لا تظهر كلمة المرور أبدًا في وسيط أو سجل أو في الأدلة.

## 5. افحص الخادم

```bash
sudo -u sbarbase /usr/bin/python3 lab/install_server.py check
```

يجب أن ينتهي بـ`Preflight: 0 blocker(s)`. كل عائق يذكر ما عليك إصلاحه، ومعه أرقام الذاكرة والأنوية الدقيقة التي يحتاجها.

## 6. ثبّت وجرّب وأنشئ أول مشروع بأمر واحد

```bash
sudo deploy/server-acceptance.sh --rehearse --install-unit --first-project \
     --service-user sbarbase --home /home/sbarbase --bun-dir /home/sbarbase/.bun/bin \
     --docker-host unix:///var/run/docker.sock --bootstrap-file /home/sbarbase/operator.json
```

يفعل بالترتيب ما يلي: يفحص المتطلبات، ويبني لوحة الإدارة، ويفحص وكيل TLS، ويثبّت خدمة systemd المسماة `sbarbase` ويشغّلها، ويسحب الصور المثبّتة الإصدار (نحو 2.4 GB، مع عرض التقدم)، ويجرّب تشغيلًا وإيقافًا نظيفًا، ثم يشغّل الخدمة من جديد. بعدها ينشئ مشروعًا اسمه "First project" فيه بيئة `production`، ويصدر مفتاحًا، ويسجّل مستخدمًا بـsupabase-js عبر البوابة، ثم يسحب المفتاح. ينتهي بـ`Server acceptance: PASSED`، وتُحفظ الأدلة في `docs/evidence/`. المشروع الأول حقيقي: يشغل واحدة من البيئات الثماني التي يسمح بها التثبيت، وحذفه لا يحرّر مكانها بعد، ويترك في تلك البيئة مستخدم تطبيق واحدًا للاختبار.

عند الفشل يذكر الأمر الخطوة التي فشلت، ويترك الخدمة كما وجدها. أصلح السبب وشغّل الأمر نفسه مجددًا.

## 7. افتح لوحة الإدارة

تستمع لوحة الإدارة على الواجهة المحلية فقط. ثبّت منفذها ليبقى بعد إعادة التشغيل، ثم صِل إليها من حاسوبك عبر نفق SSH:

```bash
sudo mkdir -p /etc/systemd/system/sbarbase.service.d
printf '[Service]\nEnvironment=SBARBASE_CONSOLE_PORT=8787\n' | sudo tee /etc/systemd/system/sbarbase.service.d/console-port.conf
sudo systemctl daemon-reload && sudo systemctl restart sbarbase
```

```bash
ssh -L 8787:127.0.0.1:8787 you@your-server
```

افتح بعدها `http://localhost:8787` وادخل بالبريد وكلمة المرور من الخطوة 4. سترى عميلك و"First project" وبيئته `production`. افتح البيئة، وأنشئ مفتاحًا عامًا من **API keys**. تستطيع نسخ المفتاح العام مرة أخرى لاحقًا، أما المفتاح السري فلا يظهر إلا مرة واحدة.

## 8. استخدمه من تطبيقك

ينتهي **Project URL** الخاص بالبيئة بمسارها، `/<runtime>`. وعبر نفق SSH يبدأ بـ `http://localhost:8787`، فوجّه supabase-js إلى عنوانك العام مضافًا إليه ذلك المسار:

```js
import {createClient} from '@supabase/supabase-js';
const supabase = createClient('https://console.example.com/<runtime>', '<publishable key>');
```

يعمل Auth وREST وStorage عبر هذا العنوان الواحد، من خادم أو من صفحة في المتصفح على أي نطاق. ويُشغَّل Realtime لكل بيئة ([Realtime](https://base.sbarah.com/docs/guides/realtime/))، ويُضبط مزوّدو OAuth لكل بيئة ([تسجيل الدخول](https://base.sbarah.com/docs/guides/sign-in/))، وتُنشر Edge Functions لكل بيئة من مجلد دوال Supabase ([Edge Functions](https://base.sbarah.com/docs/guides/edge-functions/)).

للعنوان العام عبر HTTPS، ضع وكيل TLS المرجعي (أو nginx أو Caddy) أمام `127.0.0.1:8787` بشهادة حقيقية، كما يصف [دليل النشر على خادم](https://base.sbarah.com/docs/guides/server-deployment/). لا تفتح في الجدار الناري إلا SSH و80 و443، واسمح [بالمسارين من الحاويات إلى الخادم](https://base.sbarah.com/en/docs/guides/server-deployment/#firewall-two-routes-from-containers-to-the-host) اللذين يحتاجهما Studio وEdge Functions.

## ماذا بعد

- انسخ احتياطيًا: تُنسخ كل بيئة احتياطيًا كل يوم على الخادم، ويمكن إرسال نسخ مشفّرة إلى حاوية تخزين متوافقة مع S3 خارجه. اقرأ [النسخ الاحتياطي والاستعادة](https://base.sbarah.com/docs/guides/backup-and-restore/) لتعرف الطريقة وحدودها.
- افتح Studio لبيئة: [Supabase Studio](https://base.sbarah.com/docs/guides/studio/).
- افهم ما تتشاركه بيئاتك: [العزل والثقة](https://base.sbarah.com/docs/explain/isolation-and-trust/).
- تحقق مما ثبت وما لم يثبت: [الحالة](https://base.sbarah.com/docs/reference/status/).
