لماذا التحوّل إلى LimeSurvey ذاتي الاستضافة
تفرض منصات الاستطلاعات SaaS رسوماً لكل استجابة أو لكل مقعد أو لكل ميزة. هذا النموذج مناسب حين يكون الحجم صغيراً والفريق محدوداً، لكنه يصبح مُكلفاً حين تدير وكالة عدة عملاء في آن واحد، أو تبني نماذج بمنطق شرطي متقدم، أو تتعامل مع بيانات حساسة (موارد بشرية، صحة، أبحاث السوق). يعكس LimeSurvey Community Edition هذه المعادلة: الترخيص GPL-2، والكود على GitHub، وتعمل نسخة منه على أي خادم VPS يعمل بـ Linux. أنت تدفع مقابل البنية التحتية لا مقابل الاستخدام. في المقابل، تتولّى التحديثات والنسخ الاحتياطية والأمان — وهو ما يغطّيه هذا الدليل خطوة بخطوة.
ما الذي تغيّره الاستضافة الذاتية فعلياً
- تكلفة ثابتة يمكن التنبؤ بها — سعر شهري واحد للخادم يغطّي جميع المشاريع دون مفاجآت في نهاية الشهر مرتبطة بحجم الاستجابات.
- البيانات تحت سيطرتك — لا تمرّ استجابات المستطلَعين عبر خوادم مزوّد SaaS، مما يُبسّط الامتثال للائحة RGPD تجاه عملائك.
- لا حصص للاستجابات — لا يفرض LimeSurvey Community Edition أي حصص: تجمع بقدر ما تستوعبه قاعدة بياناتك.
- منطق شرطي كامل — التفرّع والتعبيرات النظامية والمعادلات متاحة في الإصدار المجتمعي دون الحاجة إلى ترقية.
- تعدد العملاء على نسخة واحدة — تتيح نسخة واحدة إنشاء مجموعات مستخدمين مستقلة لكل عميل، يصل كلٌّ منهم فقط إلى استطلاعاته.
- تكاملات مفتوحة — تتصل REST API الخاصة بـ LimeSurvey والإضافات المجتمعية بأدوات CRM أو ERP أو التقارير لديك دون رسوم موصّل.
- تحديثات بجدولك الزمني — تختار متى تُطبّق إصداراً جديداً دون إجبارك على ترحيل في منتصف مشروع عميل.
المتطلبات: ما تحتاجه قبل البدء
LimeSurvey Community Edition هو تطبيق PHP-MariaDB تقليدي. من حيث الموارد، خصّص على الأقل 1 vCPU و2 غيغابايت RAM للاختبار أو الأحمال الخفيفة (بضعة استطلاعات وبضع مئات من الاستجابات يومياً). لوكالة بها 5 إلى 10 عملاء نشطين، يكون خادم بـ 2 vCPU و4 غيغابايت RAM أكثر ملاءمة — يتوسّع MariaDB في ذاكرته التخزينية المؤقتة مع الوقت. خطّط لـ 20 غيغابايت من القرص: يخزّن LimeSurvey وسائط الاستطلاعات (صور وملفات يرفعها المستطلَعون) في وحدة تخزين البيانات.
من ناحية البرمجيات، تحتاج إلى Docker وDocker Compose مثبَّتَين، واسم نطاق أو نطاق فرعي يشير إلى عنوان IP الخادم (مثلاً surveys.your-domain.com)، وفتح المنافذ 80 و443 في جدارك الناري. وصول SSH بصلاحيات root أو sudo إلى الجهاز ضروري للتثبيت.
تثبيت LimeSurvey باستخدام Docker Compose وNginx وHTTPS
الاتصال بالخادم وتحديث النظام
افتح طرفية واتصل عبر SSH:
ssh root@<ip-الخادم>. حدّث الحزم:apt update && apt upgrade -y. ثبّت Docker إن لم يكن مثبَّتاً:curl -fsSL https://get.docker.com | sh. تحقّق من توفّر Docker Compose:docker compose version.إنشاء هيكل مجلدات المشروع
أنشئ مجلداً مخصّصاً:
mkdir -p /opt/limesurvey && cd /opt/limesurvey. سيضمّ هذا المجلد ملفdocker-compose.ymlوملف البيئة.envوإعدادات Nginx لاحقاً.كتابة ملف docker-compose.yml
عرّف ثلاثة خدمات في
docker-compose.yml: MariaDB (صورةmariadb:10.11مع وحدة تخزين مسمّاةdb_dataللاستمرارية)، وLimeSurvey (الصورة الرسميةmartialblog/limesurvey:latest، المنفذ الداخلي8080، متغيرات البيئةDB_HOSTوDB_USERNAMEوDB_PASSWORDوDB_NAMEوADMIN_USERوADMIN_PASSWORD)، وNginx (صورةnginx:alpine، المنافذ80:80و443:443، وحدات تخزين لـ/etc/nginx/conf.dو/etc/letsencrypt). أعلن عن شبكة داخليةlimesurvey-netتشترك فيها الخدمات الثلاث.ضبط متغيرات البيئة
أنشئ ملف
.envفي/opt/limesurveyوأدخل القيم الحساسة:DB_ROOT_PASSWORDوDB_USERNAMEوDB_PASSWORDوDB_NAME=limesurveyوADMIN_USERوADMIN_PASSWORDوADMIN_EMAIL. تقرأ صورة LimeSurvey هذه المتغيرات عند أول تشغيل لتهيئة قاعدة البيانات. لا تُدرج هذا الملف أبداً في مستودع Git.الحصول على شهادة TLS باستخدام Certbot
قبل تشغيل Nginx بوضع HTTPS، احصل على شهادة Let's Encrypt:
apt install certbot -yثمcertbot certonly --standalone -d surveys.your-domain.com. تُودَع الشهادة في/etc/letsencrypt/live/surveys.your-domain.com/. شغّل هذا المسار كوحدة تخزين في حاوية Nginx.كتابة إعدادات Nginx
في
/opt/limesurvey/nginx/conf.d/limesurvey.conf، أنشئ مضيفاً افتراضياً يعيد توجيه المنفذ 80 إلى 443، ثم يمرّر حركة HTTPS إلى حاوية LimeSurvey علىhttp://limesurvey:8080. أضف الترويساتX-Frame-Options SAMEORIGINوX-Content-Type-Options nosniffوStrict-Transport-Securityلتصليب الإعداد من البداية. يُحلَّل اسم المضيف الداخليlimesurveyبواسطة شبكة Docker.تشغيل الحاويات
من
/opt/limesurvey، أطلق الحاويات:docker compose up -d. تحقّق من أن الخدمات الثلاث تعمل:docker compose ps. إن احتاج LimeSurvey بضع ثوان ريثما يُنهي MariaDB تهيئة مخطّطه، انتظر حتى يُظهرdocker compose logs limesurveyالرسالةApplication is ready.فتح واجهة الإدارة وإنشاء أول استطلاع
انتقل إلى
https://surveys.your-domain.com/admin. سجّل الدخول باستخدام بياناتADMIN_USERوADMIN_PASSWORDالمحدَّدة في ملف.env. عند أول وصول، يرشدك LimeSurvey لضبط اللغة الافتراضية والإعدادات العامة. أنشئ استطلاعاً تجريبياً للتحقق من تسجيل الاستجابات في قاعدة البيانات.
LimeSurvey ذاتي الاستضافة مقابل Typeform مقابل LimeSurvey Cloud
مرّر الجدول أفقيًا
| المعيار | LimeSurvey ذاتي الاستضافة | Typeform Basic+ | LimeSurvey Cloud Business |
|---|---|---|---|
| الترخيص | GPL-2، مجاني | SaaS مملوك | SaaS مملوك |
| التكلفة السنوية (وكالة، 5 مشاريع) | تكلفة VPS فقط (299 درهم/شهر/شهرياً) | نحو 900 €/سنة | نحو 65 $/شهريًا |
| حصة الاستجابات | غير محدودة (تخزين محلي) | محدودة حسب الخطة | محدودة حسب الخطة |
| التحكم في البيانات | كامل — البيانات على خادمك | عند Typeform | عند LimeSurvey GmbH |
| المنطق الشرطي | كامل في الإصدار المجتمعي | محدود في Basic+ | كامل |
| التحديثات | بجدولك الزمني | تلقائية (مفروضة) | تلقائية (مفروضة) |
تصليب الأمان بعد التثبيت
بعد تشغيل LimeSurvey، طبّق إعدادات الأمان هذه فوراً. في واجهة الإدارة، عطّل التسجيل العام (الإعدادات العامة ← الأمان ← لا تسجيل عام) ما لم تحتج طرفاً ثالثاً لإنشاء حسابات. غيّر بادئة جداول MariaDB الافتراضية (lime_) إلى شيء خاص بنشرك — يُقلّص ذلك أثر محاولات حقن SQL العامة. من ناحية Docker، اعزل حاوية MariaDB على الشبكة الداخلية limesurvey-net دون كشف المنفذ 3306 خارجياً: يجب ألّا يُظهر docker inspect limesurvey-db أي منفذ مربوط بـ 0.0.0.0. أخيراً، جدوِل نسخاً احتياطية يومية لوحدة تخزين db_data بالأمر docker run --rm -v limesurvey_db_data:/data -v /opt/backups:/backup alpine tar czf /backup/limesurvey-db-$(date +%F).tar.gz /data.
الإعداد بعد التثبيت: الإعدادات الأساسية
بعد أول تشغيل، تجعل بعض الإعدادات LimeSurvey جاهزاً للاستخدام المهني. ابدأ بإدارة المستخدمين: أنشئ حساباً لكل عميل (أو لكل مدير مشروع)، وخصّص له فقط مجموعات الاستطلاعات المتعلقة به. الصلاحيات دقيقة التفصيل: يمكن للمستخدم إنشاء استطلاعاته وتعديلها دون الوصول إلى إحصاءات عميل آخر.
بعد ذلك اضبط إرسال البريد الإلكتروني (الإعدادات العامة ← البريد الإلكتروني) للدعوات والتذكيرات. يمكن لـ LimeSurvey الإرسال عبر خادم SMTP خارجي — استخدم مُرحِّلاً تعاملياً (Postmark أو Mailgun أو Amazon SES) بدلاً من خادم البريد المحلي للجهاز، لضمان إيصال الدعوات.
أخيراً، فعّل تدوير سجلات وصول Nginx واضبط logrotate لمنع ملفات السجل من ملء القرص مع مرور الأشهر. قد يولّد استطلاع موزَّع على نطاق واسع عدة غيغابايتات من السجلات خلال أسابيع قليلة.
استكشاف الأخطاء: أخطاء شائعة عند أول تثبيت
تظهر بعض رسائل الخطأ بانتظام عند أول تثبيت لـ LimeSurvey تحت Docker.
SQLSTATE[HY000] [2002] Connection refused — يحاول LimeSurvey الوصول إلى MariaDB قبل أن ينتهي من تهيئته. أضف depends_on مع condition: service_healthy في docker-compose.yml مقروناً بـ healthcheck على حاوية MariaDB (mysqladmin ping -h localhost). بدون هذا الضامن، يبدأ LimeSurvey مبكراً ويعرض صفحة بيضاء.
403 Forbidden على واجهة الإدارة — المضيف الافتراضي في Nginx لا يمرّر الطلبات إلى LimeSurvey. تحقّق من أن اسم المضيف في proxy_pass يطابق تماماً اسم الخدمة المعرَّف في docker-compose.yml. قد يتسبّب أيضاً وجود نهاية سطر بنمط Windows في ملف إعداد Nginx في هذا الخطأ على Linux.
Error: Could not connect to the database server — اسم قاعدة البيانات أو بيانات الاعتماد في ملف .env لا تطابق ما مُرِّر إلى حاوية MariaDB. احذف وحدة تخزين db_data وأصلح .env ثم أعد التشغيل: docker compose down -v && docker compose up -d. تحذير: يمحو ذلك جميع البيانات — لا تفعله إلا قبل أول استطلاع حقيقي.
413 Request Entity Too Large — يحاول أحد المستطلَعين رفع ملف أكبر من الحد الافتراضي لـ Nginx (1 ميغابايت). أضف client_max_body_size 20m; في كتلة server في Nginx وأعد تشغيل الحاوية: docker compose restart nginx.
الخطوات التالية والمقالات ذات الصلة
يندمج LimeSurvey ذاتي الاستضافة بشكل جيد في منظومة أدوات ذاتية الاستضافة. إن كنت تدير عدة عملاء على خادم VPS واحد، يغطّي مقال WordPress متعدد المواقع للوكالات أنماط فصل البيانات والوصول في إعداد مشابه متعدد العملاء. للإشعارات وقوائم البريد المرتبطة بحملات الاستطلاعات، يكمّل Listmonk ذاتي الاستضافة LimeSurvey بإدارة الإرسال الجماعي من البنية التحتية نفسها. أخيراً، إن كانت وكالتك تدير الفوترة ومتابعة المشاريع المرتبطة بأبحاثها، يمكن تثبيت Odoo 17 Community ذاتي الاستضافة على الخادم نفسه أو على جهاز مخصّص بحسب الحجم.