# نقل الماسة هوم إلى الإنترنت

## متطلبات الاستضافة

Python 3.11+، إمكانية تشغيل تطبيق Python دائم عبر Waitress، مساحة قرص دائمة لقاعدة SQLite والصور والنسخ، ووكيل HTTPS مثل Nginx أو خدمة تستضيف حاوية Docker مع قرص دائم. الموقع مصمم لخادم واحد وعدة زوار؛ لا تستخدم عدة حاويات بملفات SQLite مستقلة، ولا تخزنه على قرص مؤقت. توسع متعدد الخوادم يحتاج نقل قاعدة البيانات والصور إلى خدمات مشتركة.

## متغيرات التشغيل

| المتغير | المعنى |
|---|---|
| ALMASA_BASE_URL | رابط الموقع النهائي مع https، دون شرطة أخيرة، مثل https://catalog.example.com |
| ALMASA_DATA_DIR | مسار دائم للبيانات، مثل /var/lib/almasa |
| ALMASA_BIND | عنوان الاستماع، افتراضيًا 127.0.0.1؛ داخل الحاوية 0.0.0.0 |
| PORT | المنفذ، افتراضيًا 8000 |

يجب تطابق اسم المضيف في الطلب مع ALMASA_BASE_URL. استخدام localhost بدل 127.0.0.1 عند الإعداد الافتراضي لن يعمل. لتجربة من هاتف على الشبكة، عيّن ALMASA_BASE_URL إلى عنوان جهازك المحلي والمنفذ، وALMASA_BIND إلى 0.0.0.0، واسمح بالمنفذ في جدار الحماية للشبكة الخاصة فقط. لا تفتح هذا المنفذ مباشرة للإنترنت؛ استخدم HTTPS عند النشر.

## تشغيل مباشر على Linux

1. انسخ الحزمة إلى `/opt/almasa` وأنشئ مستخدم تشغيل غير root ومجلد بيانات يملكه.
2. أنشئ بيئة افتراضية وثبت المكتبات:

```sh
python3 -m venv /opt/almasa/.venv
/opt/almasa/.venv/bin/python -m pip install -r /opt/almasa/requirements.txt
```

3. عيّن متغيرات التشغيل أعلاه في إعدادات الخدمة، ثم أنشئ كلمة المدير بنفس مسار البيانات:

```sh
ALMASA_DATA_DIR=/var/lib/almasa /opt/almasa/.venv/bin/python /opt/almasa/server.py --setup
```

4. شغّل `server.py` بخدمة systemd أو مدير العمليات في الاستضافة. استخدم نفس متغيرات البيئة في كل تشغيل، واجعل الخدمة تعيد التشغيل تلقائيًا.
5. ضع Nginx أو وكيل HTTPS أمام 127.0.0.1:8000. مرر Host الأصلي، ولا تجعل مجلد data قابلًا للتصفح. المثال التالي يوضع داخل server block مضبوط بشهادة HTTPS فعلية:

```nginx
client_max_body_size 150m;
location / {
    proxy_pass http://127.0.0.1:8000;
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-Proto https;
    proxy_read_timeout 300s;
}
```

يُرجى إعداد TLS والدومين وحد محاولات الدخول لدى مسؤول الاستضافة؛ هذا المقطع ليس ملف Nginx كاملًا.

## تشغيل بواسطة Docker

الحزمة تضم Dockerfile وcompose.yaml. من مجلد المشروع:

```sh
# اضبط هذا المتغير إلى رابطك الفعلي في بيئة التشغيل أو ملف .env محلي غير منشور
export ALMASA_BASE_URL=https://catalog.example.com
docker compose build
docker compose run --rm web python server.py --setup
docker compose up -d
```

البيانات داخل named volume باسم almasa_data (قد يضيف Compose بادئة اسم المشروع). لا تستخدم `docker compose down -v` لأنه يحذف البيانات. يحتاج المنفذ المحلي 8000 وكيل HTTPS أمامه. هذه أوامر إعداد توثيقية؛ لم تُنفّذ عملية Docker أو نشر فعلي أثناء البناء.

## نقل المحتوى والاختبار قبل الإطلاق

1. نزّل نسخة ZIP من لوحة الموقع المحلي.
2. أنشئ كلمة مرور المدير على الخادم الجديد ثم ادخل لوحة إدارته واستعد النسخة.
3. تأكد من الصور والمنتجات والمقاسات والأقسام والمشاريع وبيانات الاتصال.
4. افتح الموقع من متصفح آخر غير مسجل؛ تأكد أن المنتجات المنشورة ظاهرة والمسودات مخفية، وأن التعديل محمي.
5. اختبر البحث والتصفية وصور المنتج وقائمة طلب الأسعار وحاسبة البلاط وواتساب على الهاتف والكمبيوتر.
6. افحص صورة المشاركة لرابط منتج من الخدمة المستهدفة؛ خدمات التواصل قد تخزن معاينة قديمة مؤقتًا.
7. افحص `/sitemap.xml` و`/robots.txt` بعد ضبط الدومين، ويمكن إرسال sitemap لمحرك البحث.
8. جدّول نسخًا خارج الخادم. النسخ الموجودة على نفس القرص لا تحمي من فقدان الخادم كله.
9. راجع نص الخصوصية مع إعدادات الاستضافة الفعلية، خصوصًا إذا أضفت تحليلات أو تتبعًا لاحقًا.
10. اختبر استعادة نسخة في بيئة منفصلة قبل الاعتماد النهائي.

## نطاق الإصدار

يشمل كتالوجًا وإدارة مركزية وعرض أسعار عبر واتساب. لا يتضمن بوابة دفع أو محاسبة مخزون أو استقبال رسائل واتساب أو تسجيل طلبات مؤكدة أو حسابات زبائن. لا يحتاج الزوار حسابًا للتصفح. لا توجد تحليلات تتبع مدمجة.
