الاستضافة الذاتية
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 Hosting | firebase 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)
النشر دون اتصال
للبيئات المعزولة عن الشبكة:
- انشر الملفات لخادم ويب داخلي
- عند أول زيارة، يخزن عامل الخدمة كل شيء مؤقتًا
- بعد التخزين المؤقت، يعمل التطبيق بدون أي وصول للشبكة
- يمكن للمستخدمين المحادثة مع 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.
هذا يعني أن المستخدمين لا يُحبسون أبدًا في نشر محدد. يمكنهم الانتقال بين النسخ المستضافة ذاتيًا أو الموقع الرسمي أو أي مضيف آخر في أي وقت.