[{"data":1,"prerenderedAt":188},["ShallowReactive",2],{"seo-verification":3,"blog-تثبيت-glitchtip-على-vps-تتبع-الأخطاء-بشكل-مستقل-ma-ar":6,"promo-bar-likely":162},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-تثبيت-glitchtip-على-vps-تتبع-الأخطاء-بشكل-مستقل-ma-ar",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":33,"intro":35,"sections":36,"ctaTitle":127,"ctaBody":128,"ctaButton":129,"ctaUrl":130,"relatedPosts":131},250,"تثبيت-glitchtip-على-vps-تتبع-الأخطاء-بشكل-مستقل",{"fr":12,"en":13,"ar":10,"es":14},"self-host-glitchtip-vps","self-host-glitchtip-on-a-vps-a-sovereign-error-tracker","instalar-glitchtip-en-un-vps","تثبيت GlitchTip على VPS: تتبع الأخطاء بشكل مستقل","نشر GlitchTip v6 على VPS بنظام Linux باستخدام Docker Compose. متوافق مع SDK Sentry، يعمل بـ 2 جيجابايت RAM، مع تنبيهات Slack\u002Fntfy وأمثلة sentry-python و@sentry\u002Freact.",9,2,false,"2026-08-13T00:00:00+00:00","2026-10-20T23:18:05+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},4,"التطوير","developpement","bg-warning\u002F10 text-warning","dev",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fself-host-glitchtip-vps-poster.svg",{"categorySlug":24,"appSlug":34},"glitchtip","‏يعاني Sentry self-hosted 26.4.x منذ أغسطس 2026 من خمسة انحدارات متزامنة: ‏consumers لـ Snuba في حلقة لا نهائية (‏issue #4301)، وتوقف monitor_consumer (‏issue #4306)، وفشل مصادقة relay عبر HTTP\u002F2 (‏issue #4321). يوثّق المجتمع بنشاط حالات الترحيل إلى GlitchTip. إذا كنت قد أضفت بالفعل أدوات قياس تطبيقاتك باستخدام SDK Sentry، فلن يتطلب الترحيل تغيير سطر واحد من الكود — بل استبدال متغير بيئة واحد فقط، وتعمل نسختك في 2 جيجابايت من الذاكرة.",[37,41,52,55,83,114,117,121,124],{"type":38,"title":39,"body":40},"h2","لماذا الترحيل إلى GlitchTip الآن","‏يعاني Sentry self-hosted 26.4.x من خمسة انحدارات موثّقة من المجتمع منذ أغسطس 2026. تصف issues رقم ‏#4301 و‏#4306 ‏consumers لـ Snuba تعيد التشغيل في حلقة لا نهائية دون معالجة أي أحداث، وتوقف في monitor_consumer يمنع تسجيل المراقبة الدورية. تُشير issue رقم ‏#4321 إلى فشل مصادقة relay على اتصالات HTTP\u002F2، مما يوقف استيعاب الأحداث. دفعت هذه الانحدارات عدة فرق إلى توثيق ترحيلها إلى GlitchTip.\n\nالاعتراض الأكثر شيوعاً هو التوافق: لقد أضفت SDK Sentry (‏sentry-python أو ‎@sentry\u002Fnode أو sentry-rails…) إلى تطبيقاتك ولا تريد إعادة كتابة هذه الأدوات. ‏يُطبّق GlitchTip واجهة برمجية متوافقة مع Sentry ويقبل الأحداث المُرسَلة من هذه SDKs ذاتها. يتلخص التبديل في استبدال قيمة متغير البيئة `SENTRY_DSN` بـ ‏DSN الذي يُنشئه GlitchTip عند إنشاء المشروع. لا تغيير في كود التطبيق.",{"type":42,"title":43,"items":44},"ul","ما تحصل عليه مع GlitchTip v6 المُستضاف ذاتياً",[45,46,47,48,49,50,51],"‏**بصمة صغيرة** — أربعة حاويات فقط (‏Django و‏Celery و‏PostgreSQL و‏Redis)، مقارنةً بعشرين خدمة في Sentry self-hosted.","‏**توافق SDK Sentry** — جميع SDKs Sentry الرسمية تعمل بدون تعديل؛ المتغير الوحيد المُستبدل هو DSN.","**سيادة البيانات** — تبقى آثار الأخطاء وبيانات المستخدمين على بنيتك التحتية وفق سياسة الاحتفاظ التي تختارها.","‏**رخصة GPL-3.0** — الكود قابل للمراجعة، بدون مكوّن مغلق أو ميزة مقيّدة بخطة مدفوعة.","‏**مراقبة الإتاحة** — يشمل GlitchTip مراقبة الاتصال HTTP بدون أي تبعية خارجية.","‏**واجهة إدارة الأداء** — تتبع المعاملات وآثار N+1 والاستعلامات البطيئة عبر واجهة برمجية متوافقة مع Sentry.","‏**استهلاك ذاكرة منخفض** — تكفي 2 جيجابايت من RAM للاستخدام الفردي أو الفريق الصغير بدون أي ضبط للإعدادات.",{"type":38,"title":53,"body":54},"المتطلبات قبل البدء","‏يعتمد GlitchTip v6 على أربع حاويات: Django (خادم الويب والواجهة)، و‏Celery (معالجة الأحداث بشكل غير متزامن)، و‏PostgreSQL (قاعدة البيانات الرئيسية)، و‏Redis (قائمة انتظار المهام). تحتاج إلى:\n\n‏- خادم VPS يعمل بنظام Linux مع **ذاكرة 2 جيجابايت كحد أدنى** (4 جيجابايت مريحة لفريق من عشرة مطورين).\n‏- تثبيت **Docker** و**Docker Compose** — متاحان على جميع التوزيعات الحديثة.\n- **اسم نطاق** أو نطاق فرعي يُشير إلى عنوان IP الخادم، لتفعيل HTTPS عبر Let's Encrypt.\n‏- فتح **المنفذين 80 و443** في جدار الحماية.\n\n‏على خادم VPS من ServOrbit، يكون Docker مُثبَّتاً مسبقاً. ويغطّي VPS Solo (2 vCPU وذاكرة 4 GB)، أصغر عروضنا، هذا النمط من الحمل بهامش مريح.",{"type":56,"title":57,"steps":58},"steps","نشر GlitchTip باستخدام Docker Compose",[59,62,65,68,71,74,77,80],{"title":60,"body":61},"إنشاء مجلد العمل","‏اتصل بخادم VPS عبر SSH، ثم أنشئ مجلداً مخصصاً:\n\n`mkdir -p \u002Fopt\u002Fglitchtip && cd \u002Fopt\u002Fglitchtip`",{"title":63,"body":64},"إنشاء ملف متغيرات البيئة","‏أنشئ ملف `.env` بقيم الإعدادات:\n\n`SECRET_KEY=\u003Cسلسلة-عشوائية-طويلة>` — أنشئها بالأمر `openssl rand -hex 32`.\n`DATABASE_URL=postgresql:\u002F\u002Fglitchtip:كلمةالمرور@db:5432\u002Fglitchtip`\n`REDIS_URL=redis:\u002F\u002Fredis:6379\u002F0`\n`GLITCHTIP_DOMAIN=https:\u002F\u002Fglitchtip.نطاقك.com`\n`DEFAULT_FROM_EMAIL=no-reply@نطاقك.com`\n`EMAIL_URL=smtp:\u002F\u002Fمستخدم:كلمةالمرور@smtp.نطاقك.com:587`\n\n‏يجب أن يتطابق حقل `GLITCHTIP_DOMAIN` تماماً مع النطاق الذي ستؤمّنه بـ HTTPS.",{"title":66,"body":67},"إنشاء ملف docker-compose.yml","‏أنشئ ملف `docker-compose.yml` مع الخدمات: `db` (‏postgres:16)، و`redis` (‏redis:7)، و`web` و`worker` (صورة `glitchtip\u002Fglitchtip:latest`)، مع ربط المنفذ على `127.0.0.1:8000:8080` فقط. المنفذ 8000 مرتبط بـ `127.0.0.1` فحسب، ولا يُعرَّض مباشرةً بل عبر وسيط عكسي.",{"title":69,"body":70},"تهيئة قاعدة البيانات","‏شغّل عمليات هجرة Django لإنشاء المخطط:\n\n`docker compose run --rm web .\u002Fmanage.py migrate`\n\n‏شغّل هذا الأمر مرةً واحدة عند التثبيت، ثم عند كل تحديث إلى إصدار جديد من GlitchTip.",{"title":72,"body":73},"إنشاء أول مستخدم مشرف","‏أنشئ حساب المسؤول:\n\n`docker compose run --rm web .\u002Fmanage.py createsuperuser`\n\nأدخل عنوان البريد الإلكتروني وكلمة المرور عند طلبهما.",{"title":75,"body":76},"تشغيل المجموعة","‏ابدأ تشغيل جميع الحاويات في الخلفية:\n\n`docker compose up -d`\n\n‏تحقق من تشغيل الحاويات الأربع بالأمر `docker compose ps`. يستجيب خادم الويب على `http:\u002F\u002F127.0.0.1:8000`.",{"title":78,"body":79},"إعداد وسيط nginx العكسي مع HTTPS","‏ثبّت nginx وCertbot إن لم يكونا مُثبَّتَين:\n\n`apt install -y nginx certbot python3-certbot-nginx`\n\n‏أنشئ vhost في `\u002Fetc\u002Fnginx\u002Fsites-available\u002Fglitchtip` يستمع على المنفذ 80 ويُحوّل الطلبات إلى `http:\u002F\u002F127.0.0.1:8000`، ثم احصل على الشهادة:\n\n`certbot --nginx -d glitchtip.نطاقك.com`\n\n‏يُحدّث Certbot الإعداد تلقائياً لإعادة التوجيه من HTTP إلى HTTPS.",{"title":81,"body":82},"توصيل SDK Sentry من تطبيقاتك","‏في واجهة GlitchTip، أنشئ منظمة ثم مشروعاً. يُنشئ GlitchTip DSN بالصيغة `https:\u002F\u002F\u003Cمفتاح>@glitchtip.نطاقك.com\u002F\u003Cمعرف-المشروع>`.\n\nفي كل تطبيق، استبدل قيمة `SENTRY_DSN` (أو المعامل `dsn` في `Sentry.init()`) بهذا DSN الجديد. أعد تشغيل العمليات؛ ستظهر الأحداث في GlitchTip دون أي تعديل آخر.",{"type":84,"title":85,"headers":86,"rows":92,"caption":113},"comparison","GlitchTip v6 مقابل البدائل — ما يهم فعلاً",[87,88,89,90,91],"المعيار","GlitchTip v6","Sentry self-hosted 26.4.x","Rollbar (SaaS)","Bugsnag (SaaS)",[93,98,103,108],[94,95,96,97,97],"البصمة في الذاكرة (إنتاج)","‏~500 ميجابايت نشط (4 حاويات)","‏~6-8 جيجابايت (20+ خدمة)","لا شيء (SaaS)",[99,100,101,102,102],"الرخصة","‏GPL-3.0 — كود قابل للمراجعة 100%","‏BSL 1.1 — قيود تجارية","مغلق المصدر",[104,105,106,107,107],"مراقبة الإتاحة المدمجة","نعم — ping HTTP، تنبيهات مشمولة","‏ليس أصلياً (امتداد Crons فقط)","لا",[109,110,111,112,112],"‏توافق SDK Sentry","‏كامل — استبدال DSN مباشر","أصلي","‏SDK خاص","‏لا تتوفر لدى Rollbar وBugsnag نسخة self-hosted؛ يجب أن تمر البيانات عبر خوادمهما. ‏GlitchTip وSentry self-hosted هما الخياران السياديّان الوحيدان، لكن الفارق في البصمة الذاكرية عامل حاسم على VPS بـ 2 جيجابايت.",{"type":38,"title":115,"body":116},"الإعداد بعد التثبيت","بعد أول تشغيل، اضبط هذه النقاط في واجهة الإدارة:\n\n‏**متغيرات بيئة إضافية.** فعّل إرسال التنبيهات بالبريد الإلكتروني بتعريف `EMAIL_URL` في ملف `.env`. أضف `GLITCHTIP_MAX_EVENT_LIFE_DAYS=90` للتحكم في مدة الاحتفاظ بالأحداث وضبط حجم قاعدة البيانات.\n\n‏**الوصول متعدد الفرق.** ‏يدير GlitchTip منظمات وأعضاء بمستويات صلاحيات مختلفة. أنشئ فرقك من الإعدادات ← الأعضاء وادعُ المطورين بالبريد الإلكتروني.\n\n‏**مراقبو الإتاحة.** في قسم Monitors لمشروعك، أنشئ مراقب ping لكل خدمة تُعرضها: ‏يُرسل GlitchTip طلب HTTP على فترات منتظمة ويُنشئ issue إذا لم يستجب الخادم في الوقت المحدد.\n\n‏**تنبيهات Webhook إلى Slack أو ntfy.** من الإعدادات ← التنبيهات، أضف وجهة من نوع \"Webhook\". ‏لـ Slack، الصق رابط Incoming Webhook الخاص بك (`https:\u002F\u002Fhooks.slack.com\u002Fservices\u002F…`)؛ ‏لـ ntfy، استخدم `https:\u002F\u002Fntfy.sh\u002F\u003Cموضوعك>` بالطريقة POST. ‏يُرسل GlitchTip JSON منظماً عند كل issue جديدة أو تجاوز عتبة.\n\n‏**دمج SDK — Python.** استبدل قيمة DSN فقط؛ يبقى الكود الباقي كما هو:\n\n`import sentry_sdk` ثم `sentry_sdk.init(dsn=\"https:\u002F\u002F\u003Cمفتاح>@glitchtip.نطاقك.com\u002F\u003Cمعرف>\", traces_sample_rate=1.0)`\n\n‏**دمج SDK — React.** ذات المنطق على واجهة المستخدم:\n\n`import * as Sentry from \"@sentry\u002Freact\"` ثم `Sentry.init({ dsn: \"https:\u002F\u002F\u003Cمفتاح>@glitchtip.نطاقك.com\u002F\u003Cمعرف>\", tracesSampleRate: 1.0 })`\n\n‏يستقبل GlitchTip استثناءات Python\u002FNode وأخطاء JavaScript في المتصفح، مجمّعة في واجهة واحدة.\n\n‏**الاحتفاظ بالبيانات.** ‏يتحكم المتغير `GLITCHTIP_MAX_EVENT_LIFE_DAYS` (الافتراضي: غير محدود) في العمر الأقصى للأحداث المحتفظ بها. على SSD بـ 60 جيجابايت، نادراً ما تتجاوز رتنشن 90 يوماً لبضع مئات من الأخطاء يومياً حاجز 5 جيجابايت — راقب بـ `docker system df`.",{"type":118,"title":119,"body":120},"tip","تصليب المجموعة","‏قيّد الوصول إلى المنفذ 8000 باستخدام ufw: `ufw allow 80\u002Ftcp && ufw allow 443\u002Ftcp && ufw deny 8000\u002Ftcp`. أضف `SECURE_SSL_REDIRECT=True` و`SESSION_COOKIE_SECURE=True` في ملف `.env` لفرض HTTPS على مستوى Django. جدوِل نسخة احتياطية يومية بـ `pg_dump` إلى موقع بعيد — يحتوي volume الـ `pg_data` على جميع بيانات الأخطاء والإعدادات. راجع أيضاً دليل التصليب الأولي لخادم Linux قبل تعريض النسخة للإنتاج.",{"type":38,"title":122,"body":123},"الأخطاء الشائعة وحلولها","‏**`Error: relation \"glitchtip_*\" does not exist`** — لم تُشغَّل عمليات الترحيل. شغّل `docker compose run --rm web .\u002Fmanage.py migrate` وتحقق من سلامة الحاوية `db` بالأمر `docker compose ps`.\n\n‏**`CSRF verification failed. Request aborted.`** — متغير `GLITCHTIP_DOMAIN` لا يتطابق مع النطاق الذي تصل منه إلى الواجهة. تحقق من أنه بدون شرطة مائلة نهائية وأعد تشغيل الحاويات بالأمر `docker compose restart`.\n\n‏**`Connection refused` عبر DSN من تطبيقك** — المنفذ 8000 غير متاح من الخارج (وهذا مقصود). تحقق أن nginx يُحوّل حركة HTTPS إلى `127.0.0.1:8000` بشكل صحيح.\n\nتظهر الأحداث في سجلات Celery لكن ليس في الواجهة — بدأ worker Celery قبل اكتمال الهجرات. أعد تشغيله بالأمر `docker compose restart worker`.\n\n‏**`No such file or directory: '\u002Fetc\u002Fnginx\u002Fsites-enabled\u002Fglitchtip'`** — نسيت إنشاء الرابط الرمزي. شغّل `ln -s \u002Fetc\u002Fnginx\u002Fsites-available\u002Fglitchtip \u002Fetc\u002Fnginx\u002Fsites-enabled\u002F` ثم `nginx -t && systemctl reload nginx`.\n\n‏**`celery.exceptions.WorkerLostError: Worker exited prematurely: signal 9 (SIGKILL)`** — أنهى kernel OOM killer حاوية worker. خادمك يعاني من نقص في الذاكرة: قلّل `CELERY_WORKER_CONCURRENCY` إلى `2` في `.env`، أو انتقل إلى 4 جيجابايت RAM. تحقق بـ `docker compose logs worker --tail 50` و`dmesg | grep -i oom`.\n\n‏**`django.db.utils.OperationalError: FATAL: remaining connection slots are reserved for non-replication superuser connections`** — ‏بلغ PostgreSQL حد `max_connections` (الافتراضي: 100). أضف `CONN_MAX_AGE=60` في `.env` لتفعيل مجمع اتصالات Django، أو استخدم PgBouncer كوسيط. تحدث هذه الخطأ عادةً عند تشغيل عدة Celery workers بالتوازي بدون مجمع اتصالات.",{"type":38,"title":125,"body":126},"GlitchTip في الإنتاج على VPS","‏صدر GlitchTip v6 في فبراير 2026 برخصة GPL-3.0 ويعتمد على أربع حاويات. توافقه مع SDK Sentry يجعله مسار خروج سليم من Sentry self-hosted حين يتراكم الأخير بانحدارات يصعب تجاوزها.\n\nللمزيد، راجع دليلنا حول قائمة تدقيق Docker Compose للإنتاج لتأمين نشرك أكثر، ودليل روتين تصحيح تطبيقات self-hosted للحفاظ على تحديث GlitchTip دون انقطاع الخدمة.\n\n‏نسخة GlitchTip تعمل ضمن 2 جيجابايت من RAM: خادم VPS Solo (2 vCPU وذاكرة 4 GB) يغطي هذا النمط بهامش مريح، مع وصول root واختيار نظام التشغيل.","متتبع الأخطاء الخاص بك على بنيتك التحتية","‏يعمل GlitchTip بذاكرة 2 جيجابايت فقط: انشره على VPS مع وصول root واختيار نظام التشغيل — بدون وسيط وبدون إعداد مفروض.","اكتشف حلول المطورين","\u002Fsolutions\u002Fdeveloppeurs",[132,153,174],{"id":133,"slug":134,"slugs":135,"title":139,"excerpt":140,"readTime":141,"views":142,"isPinned":19,"noindex":19,"publishedAt":143,"updatedAt":144,"category":145,"categories":150,"featuredImage":30,"bgImage":31,"posterImage":152,"relatedSolution":30},229,"docker-compose-في-الإنتاج-قائمة-التحقق-من-10-نقاط",{"fr":136,"en":137,"ar":134,"es":138},"docker-compose-production-checklist","docker-compose-in-production-10-point-checklist","checklist-docker-compose-en-produccion","Docker Compose في الإنتاج: قائمة التحقق من 10 نقاط","‏قائمة تحقق ‎Docker Compose‎ للإنتاج: 10 إعدادات، فحوصات صحية، أسرار، تراجع، استكشاف الأخطاء، والانتقال من ‎docker-compose v1‎ إلى ‎docker compose‎ على ‎Ubuntu 26.04‎.",12,1,"2026-08-06T00:00:00+00:00","2026-10-23T13:27:09+00:00",{"id":146,"name":147,"slug":148,"color":149,"icon":148},3,"النشر","deploiement","bg-success\u002F10 text-success",[151],{"id":146,"name":147,"slug":148,"color":149,"icon":148},"\u002Fblog\u002Fcovers\u002Fdocker-compose-production-checklist-poster.svg",{"id":154,"slug":155,"slugs":156,"title":160,"excerpt":161,"readTime":23,"views":142,"isPinned":19,"noindex":162,"publishedAt":163,"updatedAt":164,"category":165,"categories":171,"featuredImage":30,"bgImage":31,"posterImage":173,"relatedSolution":30},224,"التطبيقات-المستضافة-ذاتيا-روتين-التصحيحات",{"fr":157,"en":158,"ar":155,"es":159},"routine-correctifs-apps-self-hosted","self-hosted-apps-the-patching-routine","apps-self-hosted-rutina-de-parches","التطبيقات المستضافة ذاتيًا: روتين التصحيحات","الجرد ونشرات الأمان ونافذة التصحيح والنسخ الاحتياطي والتحقق: الروتين الذي تفتقده معظم المنظومات المستضافة ذاتيًا.",true,"2026-08-05T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":166,"name":167,"slug":168,"color":169,"icon":170},8,"الأمان والمراقبة","securite-monitoring","bg-rose-500\u002F10 text-rose-400","security",[172],{"id":166,"name":167,"slug":168,"color":169,"icon":170},"\u002Fblog\u002Fcovers\u002Froutine-correctifs-apps-self-hosted-poster.svg",{"id":175,"slug":176,"slugs":177,"title":181,"excerpt":182,"readTime":166,"views":142,"isPinned":19,"noindex":19,"publishedAt":143,"updatedAt":183,"category":184,"categories":185,"featuredImage":30,"bgImage":31,"posterImage":187,"relatedSolution":30},228,"تصليب-الخادم-linux-الأولي",{"fr":178,"en":179,"ar":176,"es":180},"durcissement-serveur-linux-initial","initial-linux-server-hardening","hardening-inicial-servidor-linux","تصليب الخادم ‎Linux‎ الأولي","أنشئ مستخدم ‎sudo‎، وكوّن ‎SSH‎ بالمفاتيح، وفعّل ‎UFW‎ و‎fail2ban‎ على ‎Ubuntu‎ أو ‎Debian‎ في أقل من ساعة.","2026-10-20T23:18:07+00:00",{"id":166,"name":167,"slug":168,"color":169,"icon":170},[186],{"id":166,"name":167,"slug":168,"color":169,"icon":170},"\u002Fblog\u002Fcovers\u002Fdurcissement-serveur-linux-initial-poster.svg",1794270267045]