[{"data":1,"prerenderedAt":188},["ShallowReactive",2],{"seo-verification":3,"blog-استضافة-kutt-على-vps-اختصار-الروابط-ar":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-استضافة-kutt-على-vps-اختصار-الروابط-ar",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":27,"featuredImage":29,"bgImage":30,"posterImage":31,"relatedSolution":32,"intro":35,"sections":36,"ctaTitle":128,"ctaBody":129,"ctaButton":130,"ctaUrl":131,"relatedPosts":132},561,"استضافة-kutt-على-vps-اختصار-الروابط",{"fr":12,"en":13,"ar":10,"es":14},"self-host-kutt-vps","self-host-kutt-vps-url-shortener","autoalojar-kutt-vps-acortador-de-url","Kutt على VPS: أداة لاختصار الروابط على نطاقك","ثبّت Kutt على خادم VPS: روابط قصيرة على نطاقك، وواجهة REST، وعناوين مخصّصة، وتاريخ انتهاء، وكلمة مرور، وإحصاءات خاصة.",7,0,false,"2026-11-02T00:00:00+00:00","2026-11-02T13:48:09+00:00",{"id":17,"name":23,"slug":24,"color":25,"icon":26},"الاستضافة الذاتية","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[28],{"id":17,"name":23,"slug":24,"color":25,"icon":26},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fself-host-kutt-vps-poster.svg",{"categorySlug":33,"appSlug":34},"الأتمتة-وسير-العمل","kutt","رابط bit.ly في حملة رسائل قصيرة هو نقرة تمرّ عبر خدمة لا تتحكم فيها، وإحصاء لا تملكه، ونطاق ليس نطاقك. أما Kutt، وهو أداة مفتوحة المصدر لاختصار الروابط برخصة MIT، فيعيد كل ذلك إليك: كل رابط قصير يحمل نطاقك، وكل نقرة تبقى في قاعدتك، وتتيح واجهة REST لأدواتك اختصار روابطها تلقائيًا. يثبّت هذا الدليل Kutt باستخدام Docker Compose على خادم VPS، وينشره عبر HTTPS خلف nginx، ويغلق التسجيل العام، ثم يشرح إنشاء الروابط عبر الواجهة البرمجية.",[37,41,51,87,90,106,110,113,116,119,122,125],{"type":38,"title":39,"body":40},"h2","لماذا تستضيف أداة اختصار الروابط بنفسك","أداة الاختصار العامة تقرر نيابة عنك: قد تغيّر شروطها، أو تحدّ عدد الروابط، أو تضيف صفحة وسيطة، أو تتوقف، فتتعطل روابطك المطبوعة. إحصاءاتها ملك لها، ونطاقها المشترك يُحجب بانتظام من مرشحات مكافحة التصيّد لأن آخرين يسيئون استخدامه.\n\nمع Kutt على خادمك يبقى الرابط go.your-domain.ma\u002Foffre ملكك دائمًا: يمكنك تغيير وجهته دون إعادة طباعة الملصق، ومعرفة من نقر ومن أين، ولا يرى أي طرف ثالث حملاتك. وبالنسبة إلى الوكالة فهي أيضًا خدمة تقدّمها لكل عميل على نطاقه الخاص.",{"type":42,"title":43,"items":44},"ul","ما يقدّمه Kutt",[45,46,47,48,49,50],"**روابط على نطاقك** — كل رابط قصير يحمل علامتك ويبقى صالحًا حتى لو غيّرت الأداة لاحقًا.","**عناوين مخصّصة** — `\u002Frentree` أو `\u002Fwebinar`، أو رمز من ستة أحرف يُولَّد دون أحرف ملتبسة.","**كلمة مرور وتاريخ انتهاء** — رابط محمي لمستند عميل، ورابط يتوقف عن التحويل بانتهاء العرض.","**إحصاءات خاصة** — الزيارات عبر الزمن، والمتصفحات، والأنظمة، والبلدان، والمواقع المُحيلة، ولا يراها إلا المالك.","**واجهة REST** — مفتاح لكل مستخدم لإنشاء الروابط وتعديلها وحذفها من سكربتاتك وأدواتك.","**الإدارة** — إنشاء حسابات الفريق، ومراجعة كل الروابط، وحظر رابط أو نطاق مسيء.",{"type":52,"title":53,"headers":54,"rows":58},"comparison","Kutt وShlink وخدمة عامة",[5,55,56,57],"Kutt","Shlink","خدمة عامة (bit.ly…)",[59,64,69,73,77,82],[60,61,62,63],"واجهة الويب","مدمجة","عميل ويب منفصل","نعم",[65,66,67,68],"واجهة REST","نعم، مفتاح لكل مستخدم","نعم، مفاتيح تُدار من سطر الأوامر","نعم، غالبًا مدفوعة",[70,71,71,72],"نطاقك الخاص","نعم، مضمَّن","خيار مدفوع",[74,75,75,76],"الإحصاءات","في قاعدتك","لدى المزوّد",[78,79,80,81],"حسابات الفريق","نعم، ينشئها المسؤول","لا، الدخول بمفتاح API","حسب الباقة",[83,84,85,86],"التخزين","SQLite أو PostgreSQL أو MySQL","SQLite أو PostgreSQL أو MySQL أو SQL Server","يديره المزوّد",{"type":38,"title":88,"body":89},"المتطلبات","يكفي خادم VPS بنظام Ubuntu 24.04 وذاكرة 512 ميغابايت وقرص 5 غيغابايت: يعمل Kutt في حاوية Node.js واحدة ويستهلك نحو 200 ميغابايت من الذاكرة. تحتاج إلى Docker مع إضافة Compose، وإلى nginx وcertbot من أجل HTTPS، وإلى اسم DNS يشير إلى الخادم.\n\nاختر هذا الاسم بعناية لأنه يكوّن كل رابط: كلما كان أقصر قصرت روابطك. يصلح جيدًا نطاق فرعي مثل `go.your-domain.ma` أو نطاق صغير مخصّص. يكتب Kutt الاسم في كل رابط ينشئه، لذا فإن تغييره لاحقًا لا يعيد كتابة الروابط التي شاركتها.",{"type":91,"title":92,"steps":93},"steps","تثبيت Kutt باستخدام Docker Compose",[94,97,100,103],{"title":95,"body":96},"تحضير المجلد والأسرار","أنشئ مجلد التطبيق وملف `.env` يحمل المفتاح السري (الذي يوقّع الجلسات) ونطاق الروابط القصيرة. استبدل `go.example.com` باسمك.\n```bash\nmkdir -p \u002Fopt\u002Fkutt && cd \u002Fopt\u002Fkutt\nprintf 'SECRET_KEY=%s\\nDOMAIN=go.example.com\\n' \"$(openssl rand -hex 32)\" > .env\nchmod 600 .env\n```",{"title":98,"body":99},"كتابة ملف compose","أنشئ `compose.yaml`. لا يُنشر المنفذ إلا على الواجهة المحلية: لا يصل إليه إلا nginx. يبقى التسجيل العام والروابط المجهولة مغلقين، وتعيش قاعدة SQLite في وحدة تخزين مسمّاة.\n```yaml\nservices:\n  kutt:\n    image: kutt\u002Fkutt:v3.2.6\n    restart: unless-stopped\n    ports:\n      - \"127.0.0.1:8107:3000\"\n    environment:\n      JWT_SECRET: ${SECRET_KEY:?SECRET_KEY requis}\n      DEFAULT_DOMAIN: ${DOMAIN:?DOMAIN requis}\n      DB_CLIENT: better-sqlite3\n      DB_FILENAME: \u002Fvar\u002Flib\u002Fkutt\u002Fdata.sqlite\n      TRUST_PROXY: \"true\"\n      DISALLOW_REGISTRATION: \"true\"\n      DISALLOW_ANONYMOUS_LINKS: \"true\"\n    volumes:\n      - kutt-data:\u002Fvar\u002Flib\u002Fkutt\n      - kutt-custom:\u002Fkutt\u002Fcustom\nvolumes:\n  kutt-data: {}\n  kutt-custom: {}\n```",{"title":101,"body":102},"التشغيل والتحقق","شغّل الحزمة. يطبّق Kutt عمليات الترحيل عند الإقلاع، ثم يجب أن يجيب فحص الصحة بالرمز 200.\n```bash\ndocker compose up -d\ndocker compose ps\ncurl -s -o \u002Fdev\u002Fnull -w '%{http_code}\\n' http:\u002F\u002F127.0.0.1:8107\u002Fapi\u002Fv2\u002Fhealth\n```",{"title":104,"body":105},"نشر Kutt عبر HTTPS","عرّف مضيفًا افتراضيًا في nginx يمرّر الطلبات إلى المنفذ المحلي، ثم اطلب الشهادة باستخدام certbot. تتيح الترويسة `X-Forwarded-For` لـ Kutt تسجيل العنوان الحقيقي للزائر (`TRUST_PROXY`).\n```nginx\nserver {\n    server_name go.example.com;\n    location \u002F {\n        proxy_pass http:\u002F\u002F127.0.0.1:8107;\n        proxy_set_header Host $host;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n}\n```\n```bash\ncertbot --nginx -d go.example.com\n```",{"type":107,"title":108,"body":109},"tip","أنشئ حساب المسؤول دون تأخير","لا ينشئ Kutt أي حساب مسبقًا: ما دام لا يوجد مستخدم، تحوّل الصفحة الرئيسية إلى نموذج **create admin**، ويصبح أول زائر هو المسؤول. افتح نطاقك فور عمل HTTPS وأنشئ حسابك بكلمة مرور قوية. بعد ذلك يرفض النموذج أي إنشاء جديد.",{"type":38,"title":111,"body":112},"إنشاء الروابط عبر الواجهة البرمجية","من إعدادات حسابك ولّد مفتاح API، ثم أرسله في الترويسة `X-API-KEY`. يقبل جسم JSON الحقل `target` (العنوان الطويل) واختياريًا `customurl` و`password` و`description` و`expire_in` (مدة مثل `7 days`).\n```bash\ncurl -s -X POST https:\u002F\u002Fgo.example.com\u002Fapi\u002Fv2\u002Flinks \\\n  -H \"X-API-KEY: $KUTT_API_KEY\" \\\n  -H 'Content-Type: application\u002Fjson' \\\n  -d '{\"target\": \"https:\u002F\u002Fexample.com\u002Fune\u002Fadresse\u002Ftres\u002Flongue\", \"customurl\": \"promo\", \"expire_in\": \"7 days\"}'\n```\n\nيحتوي الرد على الحقل `link`، أي الرابط القصير كاملًا. ونقطة الوصول نفسها بطلب `GET` تعرض روابطك مع عدد زياراتها، ويعيد `\u002Fapi\u002Fv2\u002Flinks\u002F\u003Cid>\u002Fstats` الإحصاءات المفصّلة لرابط واحد. وبهذا تربط Kutt بنظام إدارة العملاء أو بسكربت الفوترة أو بحملة بريدية: يُختصر كل رابط صادر ويُقاس دون تدخل.",{"type":38,"title":114,"body":115},"العمل ضمن فريق","التسجيل مغلق: المسؤول هو من ينشئ الحسابات من صفحة الإدارة. لكل عضو روابطه وإحصاءاته الخاصة ومفتاحه، ويُلغى المفتاح بتوليد مفتاح جديد. يرى المسؤول كل روابط الخادم ويمكنه حظر رابط مسيء؛ وهذا مهم لأن أداة اختصار تحمل نطاقك تضع سمعته على المحك.\n\nيقبل Kutt أيضًا نطاقات إضافية تُضاف من الإعدادات. يجب أن يشير كل منها إلى الخادم وأن يملك شهادته الخاصة: ابدأ بنطاق واحد ثم أضف الباقي واحدًا تلو الآخر.",{"type":38,"title":117,"body":118},"تفعيل البريد الإلكتروني","يُثبَّت Kutt والبريد معطّل: لا إعادة تعيين لكلمة المرور بالبريد ولا تحقق من العناوين. لتفعيلها أضف إلى بيئة الحاوية `MAIL_ENABLED: \"true\"` والمتغيرات `MAIL_HOST` و`MAIL_PORT` و`MAIL_USER` و`MAIL_PASSWORD` و`MAIL_FROM` الخاصة بخادم SMTP، ثم أعد التشغيل بالأمر `docker compose up -d`. واحتفظ بكلمة مرور المسؤول في مكان آمن حتى ذلك الحين: بدون بريد يُعالَج فقدانها في قاعدة البيانات.",{"type":38,"title":120,"body":121},"تحديد حجم الخادم","لفريق وبضعة آلاف من الروابط تكفي ذاكرة 512 ميغابايت ومعالج vCPU واحد: التحويل مجرد قراءة من القاعدة. تكبر قاعدة SQLite مع الزيارات المسجلة، بمعدل بضع مئات من البايتات لكل نقرة. وبعد مئات الآلاف من النقرات يوميًا انتقل إلى PostgreSQL (`DB_CLIENT: pg`) وفعّل Redis (`REDIS_ENABLED`) للتخزين المؤقت.",{"type":38,"title":123,"body":124},"النسخ الاحتياطي والتحديث","كل البيانات في وحدة التخزين `kutt-data`: تحتوي قاعدة SQLite على الحسابات والروابط والإحصاءات. أوقف الحاوية لحظة للحصول على نسخة متسقة، ثم أرشف وحدة التخزين.\n```bash\ndocker compose stop kutt\ndocker run --rm -v kutt_kutt-data:\u002Fdata -v \"$PWD\":\u002Fbackup alpine \\\n  tar czf \u002Fbackup\u002Fkutt-$(date +%F).tar.gz -C \u002Fdata .\ndocker compose start kutt\n```\n\nللتحديث اقرأ ملاحظات الإصدار في المشروع، وغيّر وسم الصورة، ثم اسحب الصورة الجديدة: تُطبَّق عمليات الترحيل عند الإقلاع. خذ دائمًا نسخة احتياطية قبل ذلك مباشرة.\n```bash\n# changer l'étiquette de l'image dans compose.yaml, puis :\ndocker compose pull && docker compose up -d\n```",{"type":38,"title":126,"body":127},"التثبيت بنقرة واحدة من متجر ServOrbit","على خادم VPS من ServOrbit يُثبَّت Kutt من المتجر في مساحة العميل: اختر العنوان — نطاقًا فرعيًا قصيرًا من أحد نطاقاتك أو النطاق الفرعي المجاني للخادم مع HTTPS — ثم انقر «تثبيت». ينشر السكربت الحاوية، ويولّد المفتاح السري، ويضبط نطاق الروابط، ويهيّئ nginx. لا يبقى عليك إلا فتح نطاقك لإنشاء حساب المسؤول، ثم أول مفتاح API.","روابطك القصيرة على نطاقك","يكفي Kutt خادم VPS من ServOrbit بنظام Ubuntu 24.04 وذاكرة 512 ميغابايت. تثبيت بنقرة واحدة من المتجر، ومفتاح سري يُولَّد لك، وHTTPS على نطاقك أو على النطاق الفرعي المجاني للخادم.","اكتشف Kutt","\u002Fmarketplace\u002Fالأتمتة-وسير-العمل\u002Fkutt",[133,150,169],{"id":134,"slug":135,"slugs":136,"title":140,"excerpt":141,"readTime":17,"views":18,"isPinned":19,"publishedAt":142,"updatedAt":143,"category":144,"categories":145,"featuredImage":29,"bgImage":30,"posterImage":147,"relatedSolution":148},87,"استضافة-listmonk-على-خادمك-الافتراضي-الخاص-vps",{"fr":137,"en":138,"ar":135,"es":139},"heberger-listmonk","host-listmonk-on-your-own-vps","alojar-listmonk-en-un-vps","استضافة Listmonk على خادمك الافتراضي الخاص (VPS)","انشر Listmonk على خادم VPS: تثبيت Docker، إعداد SMTP المتقدم، إدارة الارتداد، التحديثات، استكشاف الأخطاء الشائعة والنسخ الاحتياطي لقاعدة PostgreSQL.","2026-03-25T00:00:00+00:00","2026-09-20T21:13:53+00:00",{"id":17,"name":23,"slug":24,"color":25,"icon":26},[146],{"id":17,"name":23,"slug":24,"color":25,"icon":26},"\u002Fblog\u002Fcovers\u002Fheberger-listmonk-poster.svg",{"categorySlug":24,"appSlug":149},"listmonk",{"id":151,"slug":152,"slugs":153,"title":157,"excerpt":158,"readTime":159,"views":160,"isPinned":19,"publishedAt":161,"updatedAt":162,"category":163,"categories":164,"featuredImage":29,"bgImage":30,"posterImage":166,"relatedSolution":167},249,"استضافة-mautic-على-vps-أتمتة-التسويق-مفتوحة-المصدر",{"fr":154,"en":155,"ar":152,"es":156},"self-host-mautic-vps","self-host-mautic-on-a-vps-open-source-marketing-automation","alojar-mautic-en-un-vps-automatizacion-marketing","استضافة Mautic على VPS: أتمتة التسويق مفتوحة المصدر","استضف ‎Mautic على ‎VPS الخاص بك وتخلص من رسوم الاشتراك الشهرية: حملات بريد إلكتروني، تسجيل نقاط، تجزئة جمهور — بدون حد للاتصالات.",11,1,"2026-01-17T00:00:00+00:00","2026-10-13T14:10:29+00:00",{"id":17,"name":23,"slug":24,"color":25,"icon":26},[165],{"id":17,"name":23,"slug":24,"color":25,"icon":26},"\u002Fblog\u002Fcovers\u002Fself-host-mautic-vps-poster.svg",{"categorySlug":33,"appSlug":168},"mautic",{"id":170,"slug":171,"slugs":172,"title":176,"excerpt":177,"readTime":178,"views":18,"isPinned":19,"publishedAt":179,"updatedAt":180,"category":181,"categories":182,"featuredImage":29,"bgImage":30,"posterImage":184,"relatedSolution":185},251,"استضافة-linkwarden-على-vps-إدارة-الإشارات-المرجعية-للفريق",{"fr":173,"en":174,"ar":171,"es":175},"heberger-linkwarden-vps","self-host-linkwarden-on-a-vps-team-bookmark-management","alojar-linkwarden-en-un-vps","استضافة Linkwarden على VPS: إدارة الإشارات المرجعية للفريق","انشر Linkwarden على خادمك الافتراضي لمركزة أبحاث وكالتك: مجموعات مشتركة وصلاحيات لكل عضو وتعليقات مشتركة وإضافة متصفح متعددة المستخدمين.",8,"2026-08-13T00:00:00+00:00","2026-09-21T15:22:04+00:00",{"id":17,"name":23,"slug":24,"color":25,"icon":26},[183],{"id":17,"name":23,"slug":24,"color":25,"icon":26},"\u002Fblog\u002Fcovers\u002Fheberger-linkwarden-vps-poster.svg",{"categorySlug":186,"appSlug":187},"التعاون-والإنتاجية","linkwarden",1793627565958]