الأدلة
النشر باستخدام Docker Compose
نشر إنتاجي على مضيف واحد باستخدام docker-compose.prod.yml و install.sh المرفقين.
لديك خادم قوي وتريد تشغيل AskAIs Customer Service في غضون 10 دقائق؟ هذا هو المسار المناسب. مناسب لأقل من ~500 زائر متزامن؛ وللنطاق الأكبر انتقل إلى دليل Kubernetes.
المتطلبات الأساسية
- مضيف Linux مزوّد بـ Docker 24+ و `docker compose` v2
- ≥ 2 vCPU، و4 GB من ذاكرة RAM (يُوصى بـ 8 GB)
- نطاق يشير إلى المضيف (لتفعيل TLS عبر Caddy / Cloudflare / nginx)
التثبيت بسطر واحد
git clone https://github.com/singlink/singlink
cd singlink
APP_DOMAIN=chat.acme.com bash scripts/install.shيقوم السكربت بما يلي:
- يتحقق من وجود docker + openssl
- يُنشئ
.env.prodبأسرار عشوائية قوية (الوضع 600) - يبني الصور الثلاث (web / ws / worker)
- يشغّل المنظومة بالكامل عبر
docker compose -f docker-compose.prod.yml up -d - يشغّل
prisma migrate deployداخل حاوية web
ما الذي يعمل
- postgres — pgvector PG16
- redis — النشر/الاشتراك + قائمة الانتظار (محمي بكلمة مرور)
- minio — تخزين متوافق مع S3 للمرفقات
- web / ws / worker — عمليات التطبيق الثلاث
- nginx — وكيل عكسي على المنفذ 8080 مع ترقية WS
إضافة TLS
يُنهي nginx المرفق اتصال HTTP/1.1 على المنفذ 8080. ضع أمامه وكيلًا يُنهي TLS:
Caddy (الأسهل)
# /etc/caddy/Caddyfile
chat.acme.com {
reverse_proxy localhost:8080
}Cloudflare Tunnel (دون أي منفذ وارد على الإطلاق)
cloudflared tunnel create singlink
cloudflared tunnel route dns singlink chat.acme.com
cloudflared tunnel run --url http://localhost:8080 singlinkعمليات Day-2
# Logs
docker compose -f docker-compose.prod.yml logs -f
# Restart everything
docker compose -f docker-compose.prod.yml restart
# Stop (data persists in named volumes)
docker compose -f docker-compose.prod.yml down
# Upgrade
git pull
docker compose -f docker-compose.prod.yml pull
docker compose -f docker-compose.prod.yml up -d --build
docker compose -f docker-compose.prod.yml exec web pnpm db:deploy
# Backups (run from cron daily)
docker compose -f docker-compose.prod.yml exec -T postgres \
pg_dump -U singlink singlink | gzip > /backups/singlink-$(date +%F).sql.gzتوسيع نطاق الـ workers
شغّل المزيد من نسخ worker الخاص بالذكاء الاصطناعي (يتولى Redis BullMQ التوزيع):
docker compose -f docker-compose.prod.yml up -d --scale worker=4متى تنتقل إلى Kubernetes
- تحتاج إلى postgres / redis بتوافر عالٍ (RDS / ElastiCache المُدارة)
- تحتاج إلى التوسع التلقائي أثناء طفرات حركة المرور
- تشغّله عبر مناطق متعددة
- توقّف المضيف الواحد غير مقبول بالنسبة لاتفاقية مستوى الخدمة (SLA) لديك
عندئذٍ انتقل إلى Kubernetes / Helm.