تضم هذه الصفحة كل القواعد التي يحتاجها مساعد الذكاء الاصطناعي لتجهيز مشروعك لـ Ai to App. لا تحتاج إلى قراءتها؛ يكفي أن تعطي مساعدك الرسالة أدناه.

اقرأ الدليل على العنوان https://aitoapp.com/ar/upload-guide. جهّز مشروعي لـ Ai to App وفق هذا الدليل، وطبّق قائمة التحقق بندًا بندًا، وأنشئ ملف zip.

يفحص Ai to App المواقع والتطبيقات التي تُرفع على شكل ملف zip وينشرها. لا تُشغَّل الملفات المرفوعة أثناء الفحص. وتعمل تطبيقات الخادم بعد النشر في بيئة مغلقة خاصة بها، منفصلة عن المشاريع الأخرى. يتضمن هذا الدليل جميع القواعد اللازمة لكي يمرّ المشروع في الرفع الأول دون مشاكل.

1. حدّد نوع المشروع

يتعرّف Ai to App بنفسه على نوع المشروع من الملفات الموجودة داخل ملف zip. إذا انطبقت عدة أنواع فيُتَّبع الترتيب التالي؛ والنوع الأعلى هو الذي يُعتمد.

الترتيبالنوعكيف يُعرَفما يوضع في zip
1Dockerfileوجود Dockerfile في الجذرالشيفرة المصدرية + Dockerfile
2Next.js (خادم)وجود next في اعتماديات package.jsonالشيفرة المصدرية
2Next.js (تصدير ثابت)وجود output: 'export' في next.config.*محتويات مجلد out بعد البناء (من الداخل)
3خادم Node.jsexpress، 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)
5Node.js (عام)سكربت start أو الحقل main في package.jsonالشيفرة المصدرية
6Pythonrequirements.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.jsapp.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 قاعدة البيانات بنفسها ويعطي بيانات الاتصال عبر متغير بيئة. لا تكتب عنوان الاتصال في الشيفرة؛ بل اقرأه من المتغير المذكور أدناه.

قاعدة البياناتمتغير البيئةملاحظة
PostgreSQLDATABASE_URLتُخصَّص لك قاعدة بيانات ومستخدم منفصلان
MySQLDATABASE_URLتُخصَّص لك قاعدة بيانات منفصلة
MongoDBMONGODB_URIتُخصَّص لك قاعدة بيانات منفصلة
RedisREDIS_URL
SQLiteDATABASE_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. في نهاية العمل أخبرني بما يلي

  1. المكان الدقيق لملف zip الذي جهّزته.
  2. نوع المشروع واللغة أو الإطار المستخدم (مثل "Node.js + Express").
  3. قائمة متغيرات البيئة التي يجب أن أدخلها في لوحة التحكم: اسم كل متغير وما وظيفته. لا تكتب القيم؛ سأدخلها أنا.
  4. ملخص قصير للتغييرات التي أجريتها.

إذا ظهرت مشكلة بعد رفع ملف zip يشرحها Ai to App بلغة بسيطة؛ الصق هذا النص لدى مساعدك.