تضم هذه الصفحة كل القواعد التي يحتاجها مساعد الذكاء الاصطناعي لتجهيز مشروعك لـ Ai to App. لا تحتاج إلى قراءتها؛ يكفي أن تعطي مساعدك الرسالة أدناه.
اقرأ الدليل على العنوان https://aitoapp.com/ar/upload-guide. جهّز مشروعي لـ Ai to App وفق هذا الدليل، وطبّق قائمة التحقق بندًا بندًا، وأنشئ ملف zip.
يفحص Ai to App المواقع والتطبيقات التي تُرفع على شكل ملف zip وينشرها. لا تُشغَّل الملفات المرفوعة أثناء الفحص. وتعمل تطبيقات الخادم بعد النشر في بيئة مغلقة خاصة بها، منفصلة عن المشاريع الأخرى. يتضمن هذا الدليل جميع القواعد اللازمة لكي يمرّ المشروع في الرفع الأول دون مشاكل.
1. حدّد نوع المشروع
يتعرّف Ai to App بنفسه على نوع المشروع من الملفات الموجودة داخل ملف zip. إذا انطبقت عدة أنواع فيُتَّبع الترتيب التالي؛ والنوع الأعلى هو الذي يُعتمد.
| الترتيب | النوع | كيف يُعرَف | ما يوضع في zip |
|---|---|---|---|
| 1 | Dockerfile | وجود Dockerfile في الجذر | الشيفرة المصدرية + Dockerfile |
| 2 | Next.js (خادم) | وجود next في اعتماديات package.json | الشيفرة المصدرية |
| 2 | Next.js (تصدير ثابت) | وجود output: 'export' في next.config.* | محتويات مجلد out بعد البناء (من الداخل) |
| 3 | خادم Node.js | express، fastify، koa، hono، @nestjs/core، @hapi/hapi، restify، socket.io | الشيفرة المصدرية |
| 4 | موقع يحتاج إلى بناء | vite، react-scripts، vue، @angular/core، astro، @sveltejs/vite-plugin-svelte، parcel، webpack + سكربت build | محتويات مجلد dist من الداخل بعد البناء (وفي react-scripts مجلد build) |
| 5 | Node.js (عام) | سكربت start أو الحقل main في package.json | الشيفرة المصدرية |
| 6 | Python | requirements.txt أو pyproject.toml أو Pipfile أو manage.py | الشيفرة المصدرية |
| 7 | .NET | .csproj / .fsproj في الجذر | الشيفرة المصدرية |
| 8 | موقع ثابت | index.html فقط وملفات HTML/CSS/JS | الملفات نفسها |
مهم:
- في المواقع التي تحتاج إلى بناء (React وVue وVite وAngular وSvelte وAstro) شغّل
npm run buildأولًا. ثم ضع في zip الملفات الموجودة داخل مجلدdist(أوbuild) الناتج. يجب أن يكونindex.htmlفي جذر zip مباشرة. - تُنشر مشاريع Go عبر
Dockerfileفقط. - docker-compose غير مدعوم؛ يعمل التطبيق الرئيسي (Dockerfile) فقط. ويوفّر Ai to App قاعدة البيانات بشكل منفصل (انظر القسم 4).
2. قواعد ملف zip
الحدود
| القاعدة | الحد |
|---|---|
| حجم ملف zip | بحد أقصى 50 MB |
| الحجم الإجمالي للملفات بعد فك zip | حتى 200 MB للموقع الثابت وحتى 300 MB لتطبيق الخادم (100 MB في الخطة المجانية) |
| حجم الملف الواحد | بحد أقصى 25 MB |
| عدد الملفات | حتى 2000 للموقع الثابت وحتى 5000 لتطبيق الخادم |
بنية المجلدات
- يجب أن تكون ملفات المشروع في جذر zip أو داخل مجلد أعلى واحد.
- في الموقع الثابت يجب أن يكون
index.htmlفي جذر zip أو داخل مجلد أعلى واحد. - لا يُقبل وجود ملفين بالمسار نفسه، ولا المسارات غير الآمنة التي تحتوي على
../.
لا تضع في zip (تُحذف تلقائيًا وتشغل مساحة بلا فائدة)
- الاعتماديات:
node_modules،.venv،venv،__pycache__،bower_components،.pytest_cache،.mypy_cache - مجلدات الأدوات والتحكم في الإصدارات:
.git،.svn،.hg،.idea،.vscode،.vs،.cache،.turbo،.parcel-cache،.gradle - مخرجات البناء:
.next،.nuxt،.svelte-kit. وفي .NET أيضًاbinوobj. - ملفات النظام:
__MACOSX،.DS_Store،Thumbs.db،desktop.ini،*.pyc
لا تضع في zip أبدًا (تُحذف ولا تُحفظ)
- ملفات
.env: مثل.envو.env.localو.env.production. يمكن إبقاء الملفات النموذجية:.env.example،.env.sample،.env.template. إذا كان ملف zip يحتوي على.envفلن يُحفظ الملف؛ ولا تذهب إلى البناء إلا القيم العامة ذات البادئاتVITE_,NEXT_PUBLIC_,PUBLIC_,REACT_APP_. أدخل القيم السرية في لوحة التحكم. - ملفات المفاتيح وبيانات الاعتماد:
*.pem،*.key،*.p12،*.pfx،*.ppk،*.jks،*.keystore،id_rsa،id_ed25519،.npmrc،.pypirc،.netrc. إذا سبق أن شُورك أحدها فجدّد المفتاح.
الملفات التي توقف الرفع
- في شيفرة التطبيق المصدرية: سكربتات Windows وملفات التثبيت (
.bat،.cmd،.ps1،.vbs،.scr،.msi). أما الملفات البرمجية المُصرَّفة (.exe،.dll،.soوما شابهها) فتُحذف؛ والخادم يبني المشروع من الشيفرة المصدرية. - في الموقع الثابت:
- شيفرة الخادم والملفات القابلة للتنفيذ ممنوعة:
.php،.py،.rb،.pl،.cgi،.asp،.aspx،.cshtml،.jsp،.exe،.dll،.sh،.jar،.htaccess،.config. - الأنواع المسموح بها:
.html،.htm،.css،.js،.mjs،.json،.webmanifest،.txt،.xml،.csv،.svg،.png،.jpg،.jpeg،.gif،.webp،.avif،.ico،.bmp،.woff،.woff2،.ttf،.otf،.eot،.mp4،.webm،.mp3،.ogg،.wav،.pdf. - تُتجاهل ملفات
.mapو.md.
- شيفرة الخادم والملفات القابلة للتنفيذ ممنوعة:
3. الإعدادات الإلزامية لتطبيقات الخادم
المنفذ والعنوان
يعطي Ai to App المنفذ الذي يجب أن يستمع إليه التطبيق عبر متغير البيئة PORT. ويجب أن يرتبط التطبيق بالعنوان 0.0.0.0؛ أما localhost أو 127.0.0.1 فلا يمكن الوصول إليهما من الخارج.
| اللغة | الاستخدام الصحيح |
|---|---|
| Node.js | app.listen(process.env.PORT || 3000, '0.0.0.0') |
| Python (FastAPI) | uvicorn main:app --host 0.0.0.0 --port $PORT |
| Python (Flask) | gunicorn app:app --bind 0.0.0.0:$PORT |
| Python (Django) | gunicorn config.wsgi --bind 0.0.0.0:$PORT |
| Go | ":" + os.Getenv("PORT") |
| .NET | يجب ألا يوجد سطر UseUrls(...) في الشيفرة |
أمر التشغيل
- Node.js:
- يجب أن يشغّل سكربت
startفيpackage.jsonخادم الإنتاج، مثل"start": "node server.js". - يجب ألا تكون أوامر التطوير في
start:vite،next dev،nodemon،ts-node-dev،tsx watch،webpack serve،react-scripts start،npm run dev. أبقِها في سكربتdev. - TypeScript: أضف
"build": "tsc"واجعل"start": "node dist/index.js". تصريف TypeScript أثناء التشغيل بطيء. - أضف ملف القفل (
package-lock.jsonأوpnpm-lock.yamlأوyarn.lockأوbun.lockb) إلى zip. - حدّد إصدار Node عبر
package.json←engines.nodeأو.nvmrc.
- يجب أن يشغّل سكربت
- Python:
- يُتعرَّف تلقائيًا على FastAPI وFlask وDjango وStreamlit وGradio.
- إذا كنت تستخدم بنية أخرى فأنشئ في الجذر ملف
Procfile:web: <أمر التشغيل>. ويجب أن يستخدم الأمر0.0.0.0و$PORT. - Flask: يجب أن يكون
gunicornفيrequirements.txt. - Django: يجب ألا تكون
ALLOWED_HOSTSفارغة، ويجب أن يكونDEBUG = False، ويجب قراءةSECRET_KEYمن متغير البيئة. - حدّد إصدار Python عبر
runtime.txtأو.python-version.
- .NET: يجب أن يوجد
.csprojفي الجذر. يبني Ai to App المشروع بالأمرdotnet publish -c Release؛ ويُقرأ الإصدار المستهدف منTargetFrameworkفي.csproj. - Dockerfile: حدّد منفذ التطبيق بـ
EXPOSE. ومع ذلك يجب أن يقرأ التطبيق المتغيرPORT.
4. قاعدة البيانات
يُنشئ Ai to App قاعدة البيانات بنفسها ويعطي بيانات الاتصال عبر متغير بيئة. لا تكتب عنوان الاتصال في الشيفرة؛ بل اقرأه من المتغير المذكور أدناه.
| قاعدة البيانات | متغير البيئة | ملاحظة |
|---|---|---|
| PostgreSQL | DATABASE_URL | تُخصَّص لك قاعدة بيانات ومستخدم منفصلان |
| MySQL | DATABASE_URL | تُخصَّص لك قاعدة بيانات منفصلة |
| MongoDB | MONGODB_URI | تُخصَّص لك قاعدة بيانات منفصلة |
| Redis | REDIS_URL | |
| SQLite | DATABASE_PATH | يُحفظ الملف في المجلد الدائم (/data/app.db) |
| SQL Server | — | غير متوفر؛ أدخل عنوان خادمك الخاص كمتغير بيئة أو انتقل إلى PostgreSQL |
| Supabase وFirebase وNeon وPlanetScale وTurso | متغيراتك الخاصة | أدخل بيانات الاتصال في لوحة التحكم كمتغيرات بيئة |
- Prisma: أضف مجلد
prisma/migrationsإلى zip؛ وإلا فقد لا تُنشأ الجداول تلقائيًا. - Alembic: إذا وُجد
alembic.iniفيُنفَّذalembic upgrade headتلقائيًا قبل النشر. - ملف SQLite: يُستخدم ملف SQLite الموجود في zip كبيانات أولية في النشر الأول فقط؛ ولا تستبدل عمليات الرفع اللاحقة البيانات الحية. لا تضع في zip قاعدة بيانات تجريبية تحتوي على بيانات شخصية.
- التحديثات: عند رفع إصدار جديد تبقى المعلومات الموجودة في قاعدة البيانات محفوظة.
5. الملفات الدائمة
قرص المساحة التي يعمل فيها التطبيق غير دائم؛ ويُمسح عند كل نشر جديد. والمجلد الدائم الوحيد هو /data.
- احفظ تحت
/dataالصور والمستندات التي يرفعها الزوار، والملفات التي يُنشئها التطبيق، وقاعدة بيانات SQLite. - اقرأ مسار المجلد من متغير البيئة
DATA_DIR؛ يضبطه Ai to App تلقائيًا على/data.
6. المعلومات السرية ومتغيرات البيئة
- لا تكتب كلمات المرور ومفاتيح API والرموز (tokens) في الشيفرة؛ بل اقرأها من متغيرات البيئة. تُدخل القيم في لوحة التحكم؛ وتُحفظ مشفّرة.
- البادئات العامة: المتغيرات ذات البادئات
VITE_وNEXT_PUBLIC_وREACT_APP_وPUBLIC_تُدمَج في الشيفرة عند البناء ويستطيع كل زائر رؤيتها. لا تضع فيها قيمًا سرية. - نظام تسجيل الدخول (NextAuth / Auth.js): يجب أن يكون
NEXTAUTH_URL(أوAUTH_URL) هو العنوان الحقيقي للموقع، ويجب أن يكونNEXTAUTH_SECRET(أوAUTH_SECRET) معبّأً. - OAuth (Google وGitHub): أضف عنوان النشر إلى إعدادات المزوّد كعنوان إعادة توجيه مصرّح به.
- تسجيل الدخول عبر Supabase: في Supabase ضمن Authentication > URL Configuration اكتب عنوانك المنشور في Site URL وأضف العنوان الكامل إلى Redirect URLs (
https://your-app.aitoapp.com/). وإلا فستنتقل الروابط في رسائل التأكيد وتسجيل الدخول إلىlocalhost:3000ولن يكتمل تسجيل الدخول. لتسجيل الدخول عبر Google، أضف في Google Cloud عنوانك المنشور إلى Authorized JavaScript origins وhttps://PROJECT.supabase.co/auth/v1/callbackإلى Authorized redirect URIs. - المتغيرات التي يعطيها Ai to App بنفسها:
PORTوHOST=0.0.0.0,DATA_DIR=/dataومتغيرات قاعدة البيانات (القسم 4). وفي Node.js المتغيرNODE_ENV=production.
7. ما يجب ألا يوجد في الشيفرة
- عناوين
localhost: الشيفرة التي ترسل طلبات إلىhttp://localhost:...أوhttp://127.0.0.1:...تتجه بعد النشر إلى حاسوب الزائر نفسه ولا تعمل. اقرأ العنوان من متغير البيئة (مثلimport.meta.env.VITE_API_URL) أو استخدم مسارًا نسبيًا إذا كان على الخادم نفسه (fetch('/api/...')). - طلبات
/api/...في الموقع الثابت: لا يوجد خادم خلف الموقع الثابت. إذا كنت تحتاج إلى API فجهّز المشروع كتطبيق خادم واحد (مثل Express) يعمل مع API الخاص به. - المنفذ الثابت: يجب ألا يوجد
const PORT = 3000وحده؛ استخدمprocess.env.PORT || 3000. - وضع تصحيح الأخطاء: يجب ألا يكون
debug=TrueأوDEBUG = Trueمفعّلًا في الإنتاج. - الأسرار المدمجة في الشيفرة: المفتاح الذي يُعثر عليه يُعدّ مكشوفًا؛ جدّده.
8. قائمة التحقق للمساعد
- تم تحديد نوع المشروع (القسم 1).
- إذا كان موقعًا يحتاج إلى بناء فقد نُفّذ البناء ووُضع في zip محتوى مجلد
dist/build/outفقط؛ ويوجدindex.htmlفي الجذر. - إذا كان تطبيق خادم فإن سكربت
start(أو Procfile) يشغّل خادم الإنتاج. - يُقرأ المنفذ من متغير البيئة
PORT؛ ويرتبط الخادم بالعنوان0.0.0.0. - لم يبقَ في الشيفرة أي عنوان
localhost/127.0.0.1. - أُزيلت كلمات المرور والمفاتيح من الشيفرة؛ وتُقرأ من متغيرات البيئة.
- يُقرأ الاتصال بقاعدة البيانات من
DATABASE_URL/MONGODB_URI/REDIS_URL/DATABASE_PATH. - تُكتب الملفات الدائمة تحت
/data. - ملف القفل موجود (
package-lock.jsonوما شابهه). - لا يوجد في zip أي من
node_modulesو.gitو.venvو.nextوbinوobjو.envوملفات المفاتيح. - حجم zip أقل من 50 MB، وحجم الملف الواحد أقل من 25 MB؛ وعدد الملفات لا يتجاوز 2000.
9. في نهاية العمل أخبرني بما يلي
- المكان الدقيق لملف zip الذي جهّزته.
- نوع المشروع واللغة أو الإطار المستخدم (مثل "Node.js + Express").
- قائمة متغيرات البيئة التي يجب أن أدخلها في لوحة التحكم: اسم كل متغير وما وظيفته. لا تكتب القيم؛ سأدخلها أنا.
- ملخص قصير للتغييرات التي أجريتها.
إذا ظهرت مشكلة بعد رفع ملف zip يشرحها Ai to App بلغة بسيطة؛ الصق هذا النص لدى مساعدك.
