إنتقل إلى المحتوى الرئيسي

الاستضافة الذاتية

AISCouncil هو ملف HTML واحد مكتفي ذاتيًا. يمكنك استضافته على أي خادم ملفات ثابت، تشغيله من محرك أقراص USB، أو حتى فتحه مباشرة من نظام ملفاتك. لا خلفية، لا قاعدة بيانات، لا وقت تشغيل -- فقط ملف.

الطريقة الأبسط

نزّل index.html وافتحه في متصفح:

# هذا كل شيء. افتح الملف.
open index.html # macOS
xdg-open index.html # Linux
start index.html # Windows

يعمل التطبيق فورًا من بروتوكول file://. جميع الميزات التي لا تتطلب HTTPS (كل شيء ما عدا تثبيت PWA وواجهة برمجة الحافظة) تعمل بشكل طبيعي.

تلميح

للحصول على التجربة الكاملة بما في ذلك تثبيت PWA والوصول للحافظة، قدّم الملف عبر HTTPS باستخدام أي خادم ملفات ثابت.

خادم ملفات ثابت

ارفع لأي خادم ويب. لا تكوين من جانب الخادم مطلوب.

Python (اختبار محلي سريع)

python3 -m http.server 8000
# افتح http://localhost:8000

Caddy (HTTPS مع شهادات تلقائية)

caddy file-server --root /path/to/aiscouncil --listen :8080

Nginx

server {
listen 443 ssl;
server_name aiscouncil.example.com;

ssl_certificate /etc/ssl/certs/example.com.pem;
ssl_certificate_key /etc/ssl/private/example.com.key;

root /var/www/aiscouncil;
index index.html;

location / {
try_files $uri $uri/ /index.html;
}
}

الاستضافة السحابية

يعمل التطبيق على أي منصة استضافة ثابتة بدون تكوين:

المنصةطريقة النشر
Cloudflare Pagesاربط مستودع Git أو اسحب وأفلت
Netlifyاربط مستودع Git أو اسحب وأفلت
Vercelاربط مستودع Git أو vercel deploy
GitHub Pagesادفع لفرع gh-pages
AWS S3 + CloudFrontارفع الملفات لـ S3، قدّم عبر CloudFront
Firebase Hostingfirebase deploy

الملفات الموصى بها للنشر

بينما فقط index.html مطلوب صراحةً، نشر هذه الملفات الإضافية يفعل ميزات PWA:

your-server/
index.html # التطبيق الكامل (مطلوب)
sw.js # عامل الخدمة لدعم عدم الاتصال
manifest.webmanifest # بيان PWA (الاسم، الأيقونات، السمة)
icon.svg # أيقونة متجهة
icon-192.png # أيقونة شاشة أندرويد الرئيسية
icon-512.png # شاشة البداية / أيقونة قابلة للقناع
favicon.ico # أيقونة تبويب المتصفح

إضافات اختيارية:

  s/
index.html # محرر الويب (إذا أردت المحرر أيضًا)
registry/
models.json # سجل النماذج المحلي (إذا أردت بيانات النماذج دون اتصال)
ads.json # تكوين الإعلانات (فقط إذا كنت تستخدم نظام الإعلانات للمستوى المجاني)

نشر Docker

نشر Docker بسيط باستخدام Nginx:

FROM nginx:alpine
COPY index.html /usr/share/nginx/html/
COPY sw.js /usr/share/nginx/html/
COPY manifest.webmanifest /usr/share/nginx/html/
COPY icon.svg /usr/share/nginx/html/
COPY icon-192.png /usr/share/nginx/html/
COPY icon-512.png /usr/share/nginx/html/
COPY favicon.ico /usr/share/nginx/html/
EXPOSE 80

ابنِ وشغّل:

docker build -t aiscouncil .
docker run -d -p 8080:80 aiscouncil
# افتح http://localhost:8080

لـ HTTPS مع Docker، استخدم وكيل عكسي مثل Traefik أو Caddy أمام حاوية Nginx.

ما يعمل محليًا

كل شيء. ملف HTML يحتوي على جميع CSS و JavaScript وكود الوحدات مضمّن. عندما يفتح مستخدم الصفحة:

  • واجهة المستخدم تصيير بالكامل من جانب العميل
  • مفاتيح API مخزنة في متصفح المستخدم (localStorage)
  • سجل المحادثات وإعدادات البوت مخزنة في متصفح المستخدم (IndexedDB)
  • استدعاءات LLM API تذهب مباشرة من المتصفح للمزود (Anthropic، OpenAI، xAI، إلخ)
  • لا بيانات تمر عبر خادمك

خادمك يخدم ملفًا ثابتًا. هذه وظيفته الوحيدة.

وضع الضيف

عند الاستضافة على نطاق مخصص (ليس aiscouncil.net)، يعمل التطبيق في وضع الضيف:

  • لا تسجيل دخول Google مطلوب -- بوابة تسجيل الدخول تُتجاوز
  • جميع الميزات تعمل بدون مصادقة
  • يذهب المستخدمون مباشرة لواجهة المحادثة
  • الإعدادات والتخزين وجميع الميزات تعمل بالكامل
معلومات

وضع الضيف يُفعّل تلقائيًا عندما يكتشف التطبيق أنه يعمل على localhost أو نطاق .pages.dev أو أي نطاق غير aiscouncil.net. لا تكوين مطلوب.

قاعدة API المخصصة

افتراضيًا، يرسل التطبيق طلبات المصادقة والفوترة وتتبع الاستخدام لـ https://api.aiscouncil.net/v1. للنشرات المستضافة ذاتيًا، يمكنك تجاوز هذا:

localStorage.setItem("ais-api-base", "https://your-api.example.com/v1");

هذا اختياري. إذا كنت لا تستخدم ميزات الفوترة/المصادقة المُدارة، يعمل التطبيق بدون أي قاعدة API -- جميع استدعاءات LLM تذهب مباشرة من المتصفح للمزود.

الوكيل المحلي (aiscouncil-serve)

إذا كنت تريد تجنب كشف مفاتيح API في المتصفح (مثلًا، في بيئة مكتب مشتركة)، يمكنك تشغيل وكيل aiscouncil-serve المحلي:

ANTHROPIC_API_KEY=sk-ant-... \
OPENAI_API_KEY=sk-... \
XAI_API_KEY=xai-... \
./aiscouncil-serve --port 8741

يوجّه الوكيل الطلبات حسب بادئة النموذج للمزود الصحيح:

بادئة النموذجالمزودالمصادقة
claude-*Anthropicترويسة x-api-key
gpt-*, o1*, o3*OpenAIرمز Bearer
grok-*xAIرمز Bearer
meta-llama/, deepseek/, qwen/, mistralai/, google/OpenRouterرمز Bearer
كل شيء آخرOllama (localhost)لا شيء

الوكيل يدعم أيضًا ترويسة X-Provider لفرض مزود محدد بغض النظر عن بادئة النموذج.

ابنِ من المصدر:

cd serve
../tools/zig/zig build -Doptimize=ReleaseSmall
# Binary at: zig-out/bin/aiscouncil-serve (~2.3 MB)

النشر دون اتصال

للبيئات المعزولة عن الشبكة:

  1. انشر الملفات لخادم ويب داخلي
  2. عند أول زيارة، يخزن عامل الخدمة كل شيء مؤقتًا
  3. بعد التخزين المؤقت، يعمل التطبيق بدون أي وصول للشبكة
  4. يمكن للمستخدمين المحادثة مع Ollama أو أي LLM محلي يعمل على نفس الشبكة

حمّل مسبقًا سجل النماذج بوضع registry/models.json بجانب index.html. يتحقق التطبيق من نسخة محلية قبل محاولة الجلب من GitHub.

اعتبارات CORS

عند استخدام خوادم الاستدلال المحلية (Ollama، vLLM، إلخ)، يفرض المتصفح CORS (مشاركة الموارد عبر الأ origins). خادم الاستدلال الخاص بك يجب أن يسمح بالطلبات من أصل الاستضافة.

Ollama:

# اضبط قبل بدء Ollama
OLLAMA_ORIGINS=* ollama serve

vLLM:

vllm serve model-name --allowed-origins '*'

عام (أي خادم خلف Nginx):

add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization' always;
add_header 'Access-Control-Allow-Methods' 'POST, OPTIONS' always;
تحذير

استخدام * لـ Access-Control-Allow-Origin جيد للتطوير المحلي لكن يجب تقييده على أصل محدد في النشرات الإنتاجية.

البناء من المصدر

لتعديل التطبيق وإعادة بنائه:

# استنساخ المستودع
git clone https://github.com/nicholasgasior/aiscouncil.net.git
cd aiscouncil.net

# تحرير ملفات المصدر في src/ (ليس index.html مباشرة)
# التطبيق مقسم لـ ~35 ملف مصدر تُسلسل

# بناء مخرج الملف الواحد
./build.sh

# التحقق من مطابقة البناء
./build.sh --check

عملية البناء تسلسل جميع ملفات src/ بالترتيب في index.html واحد. لا bundler، لا محول، لا npm -- فقط تسلسل shell.

محرر الويب

لاستضافة محرر الويب أيضًا، ضمّن دليل s/:

your-server/
index.html # منصة البوت
s/
index.html # محرر الويب (aiscouncil.net/s/)

يستخدم المحرر نفس برنامج الترميز المضغوط لكن مع بادئة إصدار A بدلاً من B. هو ملف HTML مكتفي ذاتي منفصل مع مجموعة ميزاته الخاصة (تحرير WYSIWYG، دعم متعدد التنسيقات، خوارزميات الضغط).

نقل البيانات

يمكن للمستخدمين تصدير جميع بياناتهم عبر الإعدادات > الخصوصية > تصدير جميع البيانات. التصدير هو ملف JSON يحتوي على جميع ملفات البوت التعريفية وسجلات المحادثات والإعدادات. مفاتيح API مستثناة من الصادرات. يمكن استيراد التصدير لأي نسخة أخرى من AISCouncil.

هذا يعني أن المستخدمين لا يُحبسون أبدًا في نشر محدد. يمكنهم الانتقال بين النسخ المستضافة ذاتيًا أو الموقع الرسمي أو أي مضيف آخر في أي وقت.