Advanced Excel Search (Arabic-friendly)
برنامج بحث متقدم لملفات Excel:
- رفع ملفات كثيرة دفعة واحدة.
- استخراج البيانات من الأعمدة الأساسية:
- اسم الصنف
- رقم الصنف
- البدائل
- البحث السريع المتقدم (مع دعم مطابقة سنة ضمن مدى مثل
09-15).
- نفس البيانات متاحة من الكمبيوتر أو iPhone طالما الاثنين على نفس الشبكة.
1) تثبيت
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt
2) تشغيل السيرفر
uvicorn app:app --host 0.0.0.0 --port 8000
3) فتح التطبيق
- على الكمبيوتر:
- على iPhone (نفس شبكة الواي فاي):
http://YOUR_COMPUTER_IP:8000
- مثال:
http://192.168.1.20:8000
4) طريقة العمل
- من صفحة الويب اضغط رفع الملفات.
- اختر عدة ملفات Excel.
- بعد الرفع، اكتب أي كلمة بحث مثل
liana أو رينج liana.
- سترى:
- أسماء الأصناف المطابقة
- كل الصفوف المطابقة مع اسم الملف والشيت.
ملاحظات
- عند رفع نفس الملف مرة ثانية، يتم تحديث بياناته.
- التطبيق يخزن البيانات في ملف قاعدة محلية:
search_data.db.
- إذا أردت الوصول من خارج الشبكة المنزلية، تحتاج استضافة أو إعداد Port Forwarding/Cloud.
تشغيل 24/7 على Render (الأفضل)
تم تجهيز ملف render.yaml تلقائياً.
الخطوات:
- ارفع المشروع إلى GitHub.
- ادخل إلى Render وسجل دخول.
- اختر New + ثم Blueprint.
- اختر نفس الـ repository.
- Render سيقرأ
render.yaml وينشئ الخدمة تلقائياً مع:
- Web Service (Python)
- Persistent Disk لحفظ قاعدة البيانات
- متغير
APP_DB_PATH=/var/data/search_data.db
- بعد اكتمال النشر، سيعطيك رابط عام مثل:
https://badail-search.onrender.com
ملاحظات مهمة:
- طالما الخدمة شغالة على Render، التطبيق يبقى 24/7 حتى لو كمبيوترك مطفي.
- أي رفع ملفات من واجهة الموقع ينحفظ على القرص الدائم في Render.
- إذا غيّرت الكود لاحقاً، فقط اعمل Push وسيتم إعادة النشر تلقائياً.
تشغيل 24/7 على Railway
تم تجهيز ملفات Railway:
الخطوات:
- ادخل إلى Railway وسجل دخول بحساب GitHub.
- اضغط New Project ثم Deploy from GitHub repo.
- اختر الريبو:
sayyedautoparts/badail-search.
- بعد إنشاء المشروع:
- افتح Variables وأضف:
APP_DB_PATH=/data/search_data.db
- افتح Settings > Volumes:
- أنشئ Volume جديد
- Mount Path:
/data
- اعمل Redeploy للخدمة.
النتيجة:
- التطبيق يطلع على رابط عام من Railway.
- يبقى شغال 24/7 (حسب الخطة).
- البيانات تبقى محفوظة لأن قاعدة SQLite موجودة داخل Volume.
مهم:
- إذا ما أضفت Volume، ممكن تضيع البيانات بعد إعادة النشر.
- بعد أي تعديل جديد في الكود: اعمل Push على GitHub وRailway يعيد النشر تلقائياً.
تشغيل على Vercel
التطبيق FastAPI في app.py في جذر المشروع؛ Vercel يكتشفه تلقائياً (بدون vercel.json قديم). يوجد .vercelignore لتقليل حجم الرفع.
أ) من الموقع (مع GitHub)
- ارفع المشروع إلى مستودع GitHub (إن لم يكن مرفوعاً).
- ادخل vercel.com → Add New… → Project.
- اربط نفس الريبو واضغط Deploy.
- (اختياري لكن مُستحسن للديمومة) في Settings → Environment Variables أضف أحد:
DATABASE_URL أو NEON_DATABASE_URL أو SUPABASE_DB_URL (PostgreSQL)
حتى لا تعتمد على SQLite في /tmp فقط.
ب) من الطرفية (CLI)
cd مسار_المشروع
npx vercel@latest login
npx vercel@latest
للإنتاج: npx vercel@latest --prod
يُفضّل CLI حديثاً (مثلاً ≥ 48) كما في وثائق FastAPI على Vercel.
ملاحظات مهمة
- بدون Postgres: على Vercel يُستخدم SQLite تحت
/tmp (انظر VERCEL في app.py) — البيانات ليست دائمة بين إعادة التشغيل/النشر.
- لرفع ملفات Excel كبيرة: إذا انتهت المهلة، زِد Function Max Duration من إعدادات المشروع في Vercel.
- للتشغيل المحلي بنفس أسلوب الاستضافة:
npx vercel@latest dev (بعد pip install -r requirements.txt).