[{"data":1,"prerenderedAt":183},["ShallowReactive",2],{"seo-verification":3,"blog-استضافة-jenkins-على-vps-خادم-ci-cd-ar":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-استضافة-jenkins-على-vps-خادم-ci-cd-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":120,"ctaBody":121,"ctaButton":122,"ctaUrl":123,"relatedPosts":124},515,"استضافة-jenkins-على-vps-خادم-ci-cd",{"fr":12,"en":13,"ar":10,"es":14},"self-host-jenkins-vps","self-host-jenkins-ci-cd-server-vps","autoalojar-jenkins-servidor-ci-cd-vps","Jenkins على VPS: خادم CI\u002FCD مفتوح المصدر مع Docker","ثبّت Jenkins LTS على VPS باستخدام Docker Compose: مسارات Jenkinsfile وwebhooks من Git وHTTPS خلف nginx ووكلاء بناء معزولون عن وحدة التحكم.",7,0,false,"2026-10-28T00:00:00+00:00","2026-10-28T05:34:10+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-jenkins-vps-poster.svg",{"categorySlug":33,"appSlug":34},"التطوير","jenkins","تتراكم دقائق البناء التي تفوترها خدمات CI المستضافة مع الوقت، وتبقى أسرار النشر لدى طرف ثالث. يقوم Jenkins، خادم الأتمتة مفتوح المصدر برخصة MIT، بالعمل نفسه على خادمك: يجلب الشيفرة عند كل push، ويشغّل البناء والاختبارات، ثم ينشر. يثبّت هذا الدليل Jenkins LTS باستخدام Docker Compose على VPS، وينشره عبر HTTPS خلف nginx، ويكتب أول مسار، ويضع قواعد الأمان المهمة.",[37,41,51,82,85,101,105,108,111,114,117],{"type":38,"title":39,"body":40},"h2","لماذا تستضيف CI\u002FCD الخاص بك مع Jenkins","خدمة CI المستضافة عملية إلى أن تتكاثر عمليات البناء: كل دقيقة بعد الحصة تُفوتر، والمشاريع الكبيرة تنتظر دورها، ومفاتيح نشر خوادمك مخزّنة لدى المزوّد. يقلب Jenkins هذا النموذج: يعمل على VPS الخاص بك، وينفّذ من عمليات البناء بقدر ما تسمح به أجهزتك، ويحفظ بيانات اعتمادك مشفّرة لديك.\n\nوهو أيضًا الأداة التي تعرفها معظم الفرق: يُقرأ ملف Jenkinsfile دون تدريب، والتوثيق وفير، ولكل أداة تقريبًا في السوق إضافة لـ Jenkins.",{"type":42,"title":43,"items":44},"ul","ما يقدّمه Jenkins",[45,46,47,48,49,50],"**المسارات كشيفرة** — ملف Jenkinsfile محفوظ مع المشروع يصف كل مرحلة، ويُراجع في مراجعة الشيفرة كبقية الملفات.","**webhooks من Git** — تطلق GitHub وGitLab وGitea وForgejo عملية البناء عند كل push أو pull request.","**Multibranch** — يحصل كل فرع وكل pull request على مسار خاص يُنشأ تلقائيًا.","**وكلاء البناء** — تُنفَّذ عمليات البناء على أجهزة مخصّصة متصلة عبر SSH.","**أكثر من 2000 إضافة** — Docker وKubernetes وSonarQube وSlack وتقارير اختبارات JUnit.","**بيانات اعتماد مشفّرة** — مفاتيح SSH والرموز تُحقن في المسار وتُخفى في السجلات.",{"type":52,"title":53,"headers":54,"rows":58},"comparison","Jenkins مقارنةً بأدوات CI أخرى مستضافة ذاتيًا",[5,55,56,57],"Jenkins","Woodpecker CI","OneDev",[59,63,68,72,77],[60,61,62,61],"الرخصة","MIT","Apache-2.0",[64,65,66,67],"تعريف المسار","Jenkinsfile (Groovy)","YAML","YAML أو محرر مرئي",[69,70,70,71],"منصة Git مدمجة","لا، يرتبط بمنصتك","نعم",[73,74,75,76],"منظومة الإضافات","أكثر من 2000 إضافة","إضافات على شكل صور Docker","وظائف مدمجة",[78,79,80,81],"الأنسب لـ","مسارات معقدة وفرق قائمة","مسارات بسيطة داخل الحاويات","فريق صغير يريد حلًا متكاملًا",{"type":38,"title":83,"body":84},"المتطلبات","يكفي VPS بنظام Ubuntu 24.04 وذاكرة 2 غيغابايت ومعالجين افتراضيين لوحدة التحكم؛ احسب 4 غيغابايت إذا كانت عمليات البناء تعمل على الجهاز نفسه. تحتاج إلى Docker وإضافة Compose، واسم نطاق (أو نطاق فرعي) يشير إلى الخادم، وnginx مع شهادة TLS لنشره عبر HTTPS. يجب أن يستجيب Jenkins على عنوان HTTPS ثابت، فهو العنوان الذي تستدعيه مستودعاتك لإرسال webhooks.",{"type":86,"title":87,"steps":88},"steps","تثبيت Jenkins باستخدام Docker Compose",[89,92,95,98],{"title":90,"body":91},"إنشاء ملف Compose","يشغّل ملف `docker-compose.yml` هذا Jenkins LTS على Java 21. لا يُنشر المنفذ إلا على الواجهة المحلية، فلا يصل إليه سوى nginx. كل البيانات (المهام والإضافات وبيانات الاعتماد والسجل) موجودة في وحدة التخزين `jenkins-home`. لا يُنشر المنفذ 50000 الخاص بالوكلاء الواردين، إذ يتصل الوكلاء عبر SSH.\n```yaml\nservices:\n  jenkins:\n    image: jenkins\u002Fjenkins:2.580.1-lts-jdk21\n    restart: unless-stopped\n    ports:\n      - \"127.0.0.1:8104:8080\"\n    environment:\n      JAVA_OPTS: -Djava.awt.headless=true\n    volumes:\n      - jenkins-home:\u002Fvar\u002Fjenkins_home\n    healthcheck:\n      test: [\"CMD-SHELL\", \"curl -fsS -o \u002Fdev\u002Fnull http:\u002F\u002Flocalhost:8080\u002Flogin || exit 1\"]\n      interval: 15s\n      retries: 10\n      start_period: 60s\nvolumes:\n  jenkins-home: {}\n```",{"title":93,"body":94},"تشغيل الحاوية","ضع الملف في `\u002Fopt\u002Fjenkins` ثم شغّل الحزمة. يستغرق التشغيل الأول نحو ثلاثين ثانية، ويجب أن يعرض الأمر `docker compose ps` الحالة `healthy`.\n```bash\nmkdir -p \u002Fopt\u002Fjenkins && cd \u002Fopt\u002Fjenkins\ndocker compose up -d\ndocker compose ps\n```",{"title":96,"body":97},"نشر Jenkins عبر HTTPS خلف nginx","في كتلة `server` الخاصة بنطاقك، مرّر الترويسات `X-Forwarded-*`: بدونها يولّد Jenkins روابط HTTP ويشير إلى وكيل عكسي غير مضبوط.\n```nginx\nlocation \u002F {\n    proxy_pass http:\u002F\u002F127.0.0.1:8104;\n    proxy_set_header Host $host;\n    proxy_set_header X-Real-IP $remote_addr;\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n    proxy_set_header X-Forwarded-Proto $scheme;\n    proxy_set_header X-Forwarded-Port 443;\n}\n```",{"title":99,"body":100},"فتح Jenkins","افتح `https:\u002F\u002Fyour-domain`. يطلب Jenkins كلمة المرور الأولية المكتوبة في وحدة تخزين بياناته:\n```bash\ndocker compose exec jenkins cat \u002Fvar\u002Fjenkins_home\u002Fsecrets\u002FinitialAdminPassword\n```\nثم ثبّت الإضافات المقترحة وأنشئ حساب المدير وأكّد عنوان HTTPS للخادم.",{"type":102,"title":103,"body":104},"tip","لا تشغّل عمليات البناء على وحدة التحكم","تحتفظ وحدة التحكم في Jenkins بكل بيانات اعتمادك، وأي عملية بناء تعمل عليها يمكنها قراءتها. في «Manage Jenkins» اجعل عدد المنفّذين في العقدة المدمجة 0 واربط وكيلًا واحدًا على الأقل عبر SSH. وللسبب نفسه، لا تربط مقبس Docker الخاص بالخادم داخل حاوية Jenkins: فذلك يمنح أي عملية بناء صلاحيات root على الخادم.",{"type":38,"title":106,"body":107},"كتابة أول مسار","أنشئ «Multibranch Pipeline» يشير إلى مستودعك، ثم أضف ملف `Jenkinsfile` في الجذر. يبني هذا المثال كل فرع ويختبره، ولا ينشر إلا الفرع `main`، على وكيل يحمل الوسم `linux`:\n```groovy\npipeline {\n    agent { label 'linux' }\n    stages {\n        stage('Build') { steps { sh 'make build' } }\n        stage('Test')  { steps { sh 'make test' } }\n        stage('Deploy') {\n            when { branch 'main' }\n            steps { sh '.\u002Fdeploy.sh' }\n        }\n    }\n}\n```\nأخيرًا، أضف webhook في مستودعك نحو `https:\u002F\u002Fyour-domain\u002Fgithub-webhook\u002F` بالنسبة إلى GitHub، أو نحو العنوان الذي تعطيه إضافة منصتك. عندها يطلق كل push عملية بناء.",{"type":38,"title":109,"body":110},"بيانات الاعتماد ووكلاء البناء","تُحفظ مفاتيح SSH ورموز API وكلمات مرور النشر في «Manage Jenkins» ثم «Credentials». يخزّنها Jenkins مشفّرة في وحدة التخزين الخاصة به، ولا يحقنها في عملية البناء إلا عندما تطلبها مرحلة ما، عبر `withCredentials` أو التوجيه `environment` في ملف Jenkinsfile، وتُخفى قيمتها في السجلات. امنح كل بيان اعتماد أضيق نطاق ممكن: مفتاح نشر لكل خادم هدف، ورمز للقراءة فقط لاستنساخ المستودعات.\n\nبالنسبة إلى الوكلاء، أبسط حل هو VPS ثانٍ مثبّت عليه Java وDocker. في «Manage Jenkins» ثم «Nodes»، أضف عقدة دائمة بطريقة التشغيل «via SSH» وعنوان الخادم ومفتاح SSH محفوظ كبيان اعتماد. امنحها وسمًا، مثل `linux`، واستهدفها في مساراتك. عندها تكتفي وحدة التحكم بالتنسيق، ولا تصل أي عملية بناء مخترقة إلى أسرارك الأخرى.",{"type":38,"title":112,"body":113},"النسخ الاحتياطي لـ Jenkins وتحديثه","كل حالة Jenkins موجودة في وحدة التخزين `jenkins-home`: المهام والإعدادات والإضافات وبيانات الاعتماد المشفّرة وسجل عمليات البناء. يكفي أرشيف لهذه الوحدة لاستعادة كل شيء. أوقف Jenkins أثناء النسخ للحصول على أرشيف متّسق:\n```bash\ncd \u002Fopt\u002Fjenkins\ndocker compose stop jenkins\ndocker run --rm -v jenkins_jenkins-home:\u002Fdata -v \\\"$PWD\\\":\u002Fbackup alpine tar czf \u002Fbackup\u002Fjenkins-home.tar.gz -C \u002Fdata .\ndocker compose start jenkins\n```\nللتحديث، اتبع خط LTS الذي يصدر تقريبًا كل اثني عشر أسبوعًا مع تصحيحات بينية: استبدل وسم الصورة في `docker-compose.yml` ثم شغّل `docker compose pull` و`docker compose up -d`. بعد ذلك حدّث الإضافات من «Manage Jenkins» ثم «Plugins»، واقرأ نشرات الأمان التي يصدرها المشروع: معظم الثغرات المصحّحة تخص الإضافات لا النواة.",{"type":38,"title":115,"body":116},"استكشاف الأخطاء","**«It appears that your reverse proxy set up is broken»**: لا يمرّر nginx الترويسة `X-Forwarded-Proto` أو أن عنوان Jenkins ليس HTTPS. صحّح كتلة `location` ثم العنوان في «Manage Jenkins» ثم «System».\n\n**الحاوية تعيد التشغيل باستمرار**: اقرأ السجلات. السبب الأكثر شيوعًا هو نقص الذاكرة؛ امنح الخادم 2 غيغابايت على الأقل.\n```bash\ndocker compose logs --tail=100 jenkins\n```\n**لا تصل إشعارات webhook**: تحقق من سجل التسليم في إعدادات المستودع، ثم من أن العنوان المستدعى هو عنوان HTTPS العام لـ Jenkins.",{"type":38,"title":118,"body":119},"التثبيت بنقرة واحدة من متجر ServOrbit","على VPS من ServOrbit، يُثبَّت Jenkins من المتجر: اختر العنوان وانقر «تثبيت»، فينشر السكربت Jenkins LTS داخل Docker مع وحدة تخزين البيانات والوكيل العكسي nginx عبر HTTPS. تظهر كلمة مرور الإدارة الأولية في مساحة العميل. ليس لديك نطاق؟ يكفي النطاق الفرعي المجاني للخادم مع HTTPS.","خادم Jenkins للتكامل والتسليم المستمرين على VPS الخاص بك","يكفي VPS من ServOrbit بنظام Ubuntu 24.04 وذاكرة 2 غيغابايت لتشغيل Jenkins. تثبيت بنقرة واحدة من المتجر، وHTTPS على نطاقك أو على النطاق الفرعي المجاني للخادم، دون حصة لدقائق البناء.","تثبيت Jenkins","\u002Fmarketplace\u002Fالتطوير\u002Fjenkins",[125,143,164],{"id":126,"slug":127,"slugs":128,"title":132,"excerpt":133,"readTime":134,"views":18,"isPinned":19,"publishedAt":135,"updatedAt":136,"category":137,"categories":138,"featuredImage":29,"bgImage":30,"posterImage":140,"relatedSolution":141},74,"استضافة-gitea-على-خادم-vps-الخاص-بك",{"fr":129,"en":130,"ar":127,"es":131},"heberger-gitea","host-gitea-on-your-own-vps","alojar-gitea-en-un-vps","استضافة Gitea على خادم VPS الخاص بك في 2026","انشُر ‏Gitea 1.25‏ على خادم VPS مع Docker وSSL. دليل شامل: CI\u002FCD مع ‏Gitea Actions‏، مقارنة ‏Gitea‏ مقابل ‏Forgejo v16‏، إدارة يومية، استكشاف أخطاء SSH وHTTPS.",13,"2026-04-07T00:00:00+00:00","2026-10-21T15:21:37+00:00",{"id":17,"name":23,"slug":24,"color":25,"icon":26},[139],{"id":17,"name":23,"slug":24,"color":25,"icon":26},"\u002Fblog\u002Fcovers\u002Fheberger-gitea-poster.svg",{"categorySlug":33,"appSlug":142},"gitea",{"id":144,"slug":145,"slugs":146,"title":150,"excerpt":151,"readTime":152,"views":153,"isPinned":19,"publishedAt":154,"updatedAt":155,"category":156,"categories":161,"featuredImage":29,"bgImage":30,"posterImage":163,"relatedSolution":29},338,"استبدال-github-actions-بـwoodpecker-ci-على-vps",{"fr":147,"en":148,"ar":145,"es":149},"remplacer-github-actions-woodpecker-ci-self-hosted-vps","replace-github-actions-with-woodpecker-ci-on-a-vps","reemplazar-github-actions-con-woodpecker-ci-en-vps","استبدال ‎GitHub Actions‎ بـ‎Woodpecker CI‎ على ‎VPS","أعلن ‎GitHub‎ ثم علّق تحصيل تكاليف ‎self-hosted runners‎ على المستودعات الخاصة. انتقل إلى ‎Woodpecker CI‎ ذاتي الاستضافة: صيغة واضحة وأقل من ‎50 Mo‎ ذاكرة عشوائية.",8,1,"2026-09-07T00:00:00+00:00","2026-10-20T23:18:05+00:00",{"id":157,"name":158,"slug":159,"color":160,"icon":159},2,"الأتمتة","automatisation","bg-brand-action\u002F10 text-brand-action",[162],{"id":157,"name":158,"slug":159,"color":160,"icon":159},"\u002Fblog\u002Fcovers\u002Fremplacer-github-actions-woodpecker-ci-self-hosted-vps-poster.svg",{"id":165,"slug":166,"slugs":167,"title":171,"excerpt":172,"readTime":173,"views":174,"isPinned":19,"publishedAt":175,"updatedAt":176,"category":177,"categories":178,"featuredImage":29,"bgImage":30,"posterImage":180,"relatedSolution":181},311,"onedev-على-vps-git-وcicd-وkanban-في-حاوية-واحدة",{"fr":168,"en":169,"ar":166,"es":170},"heberger-onedev-vps","self-host-onedev-git-cicd-and-kanban-in-one-container","onedev-en-vps-git-cicd-y-kanban-autoalojados","OneDev على VPS: Git وCI\u002FCD وKanban في حاوية واحدة","استضف OneDev على VPS الخاص بك: مستودع Git خاص، ومسارات CI\u002FCD مرئية، ولوحات Kanban. حاوية واحدة، بدون رسوم لكل مطور.",6,3,"2026-08-28T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":17,"name":23,"slug":24,"color":25,"icon":26},[179],{"id":17,"name":23,"slug":24,"color":25,"icon":26},"\u002Fblog\u002Fcovers\u002Fheberger-onedev-vps-poster.svg",{"categorySlug":33,"appSlug":182},"onedev",1793165898140]