لماذا تستضيف Appwrite ذاتيًا على خادم VPS
يجمع Appwrite في منصّة واحدة كل ما يحتاجه التطبيق من جانب الخادم: مصادقة بأكثر من 30 طريقة OAuth، وقاعدة بيانات وثائقية بصلاحيات دقيقة، وتخزين ملفات مع تحويل الصور، ووظائف serverless بعدة لغات، ومراسلة. تفرض نسخته السحابية الفوترة حسب الاستخدام والموارد؛ وباستضافته ذاتيًا على خادم VPS، تنشر المنظومة بأكملها عبر Docker وتديرها من وحدة تحكم ويب أنيقة، دون حد أقصى. وهو مناسب بشكل خاص لمطوّري Flutter أو React Native أو الويب الذين يريدون خلفية جاهزة للاستخدام مع حزم SDK رسمية، مع الاحتفاظ بالبيانات والمنطق على بنيتهم التحتية الخاصة. تتحكم في الوظائف ومفاتيح API والصلاحيات، وتتوسّع وفق وتيرتك.
الفوائد الملموسة لـ Appwrite مُستضاف ذاتيًا
- خلفية شاملة: Auth وDatabases وStorage وFunctions وMessaging في وحدة تحكم واحدة.
- حزم SDK رسمية لـ Flutter وReact Native وWeb وAndroid وiOS وNode وPython والمزيد.
- أكثر من 30 مزوّد OAuth مدمج (Google وGitHub وApple...) دون كتابة أي كود.
- وظائف serverless مُستضافة ذاتيًا: نفّذ منطق أعمالك دون خدمة خارجية.
- صلاحيات دقيقة على مستوى المستند والمجموعة، تُدار من وحدة التحكم.
- لا فوترة لكل تنفيذ ولا حصة للمستخدمين: اشتراك VPS ثابت.
المتطلبات المادية والبرمجية
ينسّق Appwrite عدة خدمات (API، ووحدة التحكم، وMariaDB، وRedis، وworkers، وبيئة تشغيل الوظائف عبر Docker-in-Docker). لنسخة تطوير، يكفي معالجان افتراضيان (2 vCPU) و4 غيغابايت من RAM مع 40 غيغابايت من SSD. أما للإنتاج مع وظائف serverless نشطة وعدة تطبيقات، فاستهدف 4 vCPU و8 غيغابايت من RAM و80 غيغابايت من SSD، لأن كل وظيفة تعمل في حاويتها المؤقتة الخاصة. على الصعيد البرمجي: Ubuntu 22.04/24.04 LTS، وDocker وDocker Compose v2 (يدير Appwrite Traefik المدمج الخاص به للتوجيه وSSL)، واسم نطاق يشير إلى خادم VPS (مثل: api.myapp.com). يجب أن يكون المنفذان 80 و443 متاحين ليحصل Traefik على شهادات Let's Encrypt.
نشر Appwrite مُستضاف ذاتيًا باستخدام Docker
تهيئة خادم VPS والنطاق
ثبّت Docker، ووجّه نطاقك إلى عنوان IP الخاص بخادم VPS، وتأكد من أن المنفذين 80 و443 مفتوحان في ufw: يحتاجهما Traefik المدمج في Appwrite لتحدّي ACME الخاص بـ Let's Encrypt.
تشغيل المُثبّت الرسمي
نفّذ أمر التثبيت docker run ... appwrite/appwrite install: يسألك مُساعد تفاعلي عن النطاق ومنفذ HTTP/HTTPS ويولّد ملف docker-compose.yml وكذلك ملف .env مع الأسرار. وهذه هي الطريقة الموصى بها بدلاً من كتابة compose يدويًا.
تهيئة النطاق وSSL
املأ _APP_DOMAIN و_APP_DOMAIN_TARGET باسم نطاقك. عندئذٍ يولّد Traefik شهادة HTTPS تلقائيًا. تحقق من الوصول إلى وحدة التحكم على https://api.myapp.com وأنشئ حساب المسؤول الجذر الخاص بك.
إنشاء مشروع وتطبيقه الأول
من وحدة التحكم، أنشئ مشروعًا، وأضف منصّة (Web أو Flutter أو Apple...) بالإعلان عن اسم المضيف المسموح به، واحصل على معرّف المشروع (ID). تُغذّي هذه المعلومات تهيئة SDK من جانب العميل.
تعزيز أمان تهيئة الإنتاج
في .env، اضبط _APP_OPTIONS_ABUSE و_APP_OPTIONS_FORCE_HTTPS على enabled، وهيّئ SMTP (_APP_SMTP_*) لرسائل البريد الإلكتروني للتحقق، وقيّد _APP_CONSOLE_WHITELIST_* إذا أردت تقييد الوصول إلى وحدة التحكم.
النسخ الاحتياطي لـ MariaDB والتخزين
جدوِل نسخة يومية (dump) لقاعدة بيانات MariaDB الخاصة بـ Appwrite وأرشف وحدة التخزين Storage (الملفات المرفوعة). وبما أن Appwrite يشفّر بعض البيانات بـ _APP_OPENSSL_KEY_V1، انسخ هذا السر احتياطيًا أيضًا: فبدونه تصبح الملفات المشفّرة غير قابلة للاستعادة.
Appwrite مقابل Supabase: أيهما تستضيف ذاتيًا؟
| المعيار | Appwrite | Supabase |
|---|---|---|
| قاعدة البيانات | MariaDB، نموذج وثائقي | PostgreSQL أصلي، SQL كامل |
| المنهج | موجّه نحو SDK وتطبيقات الجوال | موجّه نحو SQL والتطبيقات العلائقية |
| وظائف serverless | أصلية، متعددة اللغات ومدمجة | Edge Functions (Deno) |
| التثبيت | مُثبّت تفاعلي رسمي | Compose يُهيّأ يدويًا |
| SSL / التوجيه | Traefik مدمج، تلقائي | وكيل عكسي خارجي يجب إضافته |
| البحث الشعاعي / الذكاء الاصطناعي | غير أصلي | أصلي عبر pgvector |
| مثالي لـ | Flutter وReact Native، الجوال أولاً | SQL المتقدم، وRAG، والعلائقي |
| وحدة تحكم الإدارة | وحدة تحكم غنية وموجّهة | Studio يتمحور حول جداول SQL |
احرص حتمًا على نسخ المتغيّر _APP_OPENSSL_KEY_V1 من ملف .env احتياطيًا في خزنة منفصلة: يستخدمه Appwrite لتشفير الملفات وبعض البيانات الحساسة، والاستعادة دون هذا المفتاح تجعل المحتوى المشفّر غير قابل للقراءة. أما لوظائف serverless في الإنتاج، فراقب استهلاك القرص المرتبط بحاويات بيئة التشغيل المؤقتة، وجدوِل docker system prune بانتظام لتجنّب امتلاء SSD بالصور الوسيطة.