[{"data":1,"prerenderedAt":165},["ShallowReactive",2],{"seo-verification":3,"blog-installer-gitlab-ce-vps-ar":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"id":7,"slug":8,"title":9,"excerpt":10,"readTime":11,"views":12,"isPinned":13,"publishedAt":14,"category":15,"categories":20,"featuredImage":22,"bgImage":23,"posterImage":24,"relatedSolution":22,"intro":25,"sections":26,"ctaTitle":124,"ctaBody":125,"ctaButton":126,"ctaUrl":127,"relatedPosts":128},235,"installer-gitlab-ce-vps","تثبيت GitLab CE على VPS: دليل شامل","انشر GitLab CE على VPS باستخدام Docker Compose: منصة git كاملة، CI\u002FCD مدمجة، سجل Docker خاص وإدارة مشاريع — self-hosted.",8,0,false,"2026-08-07T00:00:00+00:00",{"id":16,"name":17,"slug":18,"color":19,"icon":18},3,"النشر","deploiement","bg-success\u002F10 text-success",[21],{"id":16,"name":17,"slug":18,"color":19,"icon":18},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Finstaller-gitlab-ce-vps-poster.svg","تستضيف GitHub وBitbucket مستودعاتك، لكنهما يفرضان قواعدهما: دقائق CI محدودة، ملكية غامضة للكود، وأسعار ترتفع مع نمو الفريق. يجمع GitLab CE (النسخة المجتمعية، رخصة MIT\u002FEE Core) على خادم واحد منصةً git كاملة، ومحرك CI\u002FCD بلا حصص دقائق مفروضة، وسجل Docker خاصاً، ووثائق wiki — دون اشتراك SaaS. يرشدك هذا الدليل إلى تثبيته في أقل من ثلاثين دقيقة على VPS باستخدام Docker Compose، وضبط SMTP، وتوصيل Runner، وتجنب الأخطاء الشائعة: إعداد GITLAB_OMNIBUS_CONFIG بشكل خاطئ، وانتهاء صلاحية SSL لغياب ACME، وRunner غير مسجّل.",[27,31,43,46,77,80,83,121],{"type":28,"title":29,"body":30},"h2","لماذا GitLab CE بدلًا من GitHub أو Bitbucket","GitHub وBitbucket خدمتان مُدارتان: عمليتان في البداية، لكن نموذج أسعارهما يتطور مع حجم الفريق، ودقائق CI محدودة في الخطط المجانية، وشفرتك مستضافة على بنية تحتية تابعة لجهة خارجية. يعكس GitLab CE هذه المعادلة: تنشر المنصة على VPS الخاص بك، وتحتفظ بالتحكم الكامل في الكود والبيانات، وCI\u002FCD مدمجة دون حصص دقائق مفروضة من طرف ثالث. للوكالات والفرق التي تتعامل مع بيانات حساسة أو تفوتر العملاء، هذا التحكم غير قابل للتفاوض في أغلب الأحيان. GitLab CE هو اليوم أحد أكثر منصات git self-hosted انتشارًا: قاعدة كوده مفتوحة المصدر، ونواته حرة، وعشر سنوات من الوجود جعلت مجتمعه المساهم نشطاً.",{"type":32,"title":33,"items":34},"ul","ما يتضمنه GitLab CE افتراضيًا",[35,36,37,38,39,40,41,42],"**منصة git كاملة**: مستودعات خاصة وعامة، طلبات دمج، مراجعة الكود، حماية الفروع وCODEOWNERS.","**CI\u002FCD مدمجة** بلا حد مفروض للدقائق: pipelines بصيغة YAML (`.gitlab-ci.yml`)، environments، deploy tokens والـartifacts.","**سجل Docker خاص** مستضاف على نطاقك: `docker pull git.yourdomain.com\u002Fgroup\u002Fimage:tag` دون حساب Docker Hub.","**Wiki وصفحات** لكل مشروع ومجموعة، مع عرض Markdown كامل.","**تتبع المشكلات والمراحل**: لوحة kanban، تسميات، تكرارات ومخطط burndown مضمّنة.","**Runners متوازية**: سجّل أي عدد من الـrunners على بنيتك التحتية أو عمال CI.","**Webhooks** لإشعار أداة خارجية (Slack، PagerDuty، خادم النشر) عند كل push أو merge.","**RBAC دقيق** بخمسة مستويات وصول (Guest، Reporter، Developer، Maintainer، Owner) ودعم اختياري لـLDAP\u002FSAML.",{"type":28,"title":44,"body":45},"المتطلبات الأساسية قبل البدء","GitLab CE كثيف الاستهلاك للذاكرة — وهذا من أبرز عيوبه مقارنةً بـForgejo أو Gitea. خطّط لـ**4 غيغابايت RAM كحد أدنى** للاستخدام الخفيف (أقل من عشرة مستخدمين نشطين)؛ **يُوصى بـ8 غيغابايت** بمجرد إضافة runners على الجهاز نفسه أو تفعيل سجل Docker. تحت 4 غيغابايت، يتنافس Puma وSidekiq على الذاكرة ويستجيب GitLab بـ502 تحت الحمل. للتخزين، خصص 20 غيغابايت على الأقل للتثبيت والمستودعات الأولية — خطط لـ50 غيغابايت إن كنت ستخزّن صور Docker في السجل. تحتاج أيضًا إلى: اسم نطاق يشير إلى IP الـVPS (مثلاً ‎`git.yourdomain.com`‎) لكي تُصدر Let's Encrypt شهادة TLS؛ وفتح المنافذ 80 و443 و22 في جدار الحماية (المنفذ 22 يستخدمه GitLab لدفع SSH — إن كان daemon SSH النظام يستمع على 22 أيضًا، انقله إلى منفذ آخر)؛ وتثبيت Docker Engine وإضافة Compose v2 (`docker compose version` يجب أن يعيد `v2.x`).",{"type":47,"title":48,"steps":49},"steps","من التثبيت إلى أول مشروع",[50,53,56,59,62,65,68,71,74],{"title":51,"body":52},"إنشاء هيكل المجلدات","أنشئ مجلدًا مخصصًا والمجلدات الثلاثة الدائمة التي يستخدمها GitLab: `mkdir -p \u002Fopt\u002Fgitlab\u002F{config,logs,data}`. ستُوصل هذه المجلدات داخل الحاوية؛ دونها تختفي الإعدادات والمستودعات عند كل `docker compose down`.",{"title":54,"body":55},"كتابة ملف docker-compose.yml","أنشئ `\u002Fopt\u002Fgitlab\u002Fdocker-compose.yml`. يُركّز مفتاح `GITLAB_OMNIBUS_CONFIG` كل الإعدادات الخاصة بنسختك — استبدل `git.yourdomain.com` بنطاقك الفعلي. عرّف خدمة gitlab بالصورة `gitlab\u002Fgitlab-ce:17.2.1-ce.0`، `restart: unless-stopped`، اسم المضيف، متغيرات البيئة (بما فيها `GITLAB_OMNIBUS_CONFIG`)، المنافذ 80 و443 و22، الـvolumes الثلاثة، `shm_size: 256m` و`env_file: ‎.env`. **ملاحظة مهمة**: تُحدد قيمة `external_url` ما إذا كان GitLab يولّد URLs بـ`http:\u002F\u002F` أو `https:\u002F\u002F`، وما إذا كانت Let's Encrypt تُحاوَل — يجب أن تتطابق تمامًا مع نطاق قابل للحل من الإنترنت.",{"title":57,"body":58},"ضبط GITLAB_OMNIBUS_CONFIG","داخل `GITLAB_OMNIBUS_CONFIG`، عرّف على الأقل: `external_url 'https:\u002F\u002Fgit.yourdomain.com'`؛ `letsencrypt['enable'] = true` مع `letsencrypt['contact_emails']`؛ معاملات SMTP — `gitlab_rails['smtp_enable'] = true`، العنوان، المنفذ 587، اسم المستخدم، `gitlab_rails['smtp_password'] = ENV['GITLAB_SMTP_PASSWORD']`، المصادقة `login`، `smtp_enable_starttls_auto = true`، `gitlab_email_from`؛ وإن فعّلت السجل: `registry_external_url 'https:\u002F\u002Fregistry.yourdomain.com'`. يجب أن تكون جميع هذه الأسطر **داخل** كتلة `GITLAB_OMNIBUS_CONFIG` وليست متغيرات بيئة منفصلة — مفتاح خارج الكتلة يُهمَل في صمت.",{"title":60,"body":61},"إنشاء ملف ‎.env للأسرار","أنشئ `\u002Fopt\u002Fgitlab\u002F‎.env` وقيّد صلاحياته: `touch \u002Fopt\u002Fgitlab\u002F‎.env && chmod 600 \u002Fopt\u002Fgitlab\u002F‎.env`. أضف متغيراتك الحساسة — كحد أدنى `GITLAB_SMTP_PASSWORD=كلمة_مرور_smtp`. لا تضع كلمة مرور بنص صريح في ملف Compose. أضف `‎.env` إلى `‎.gitignore` إن كنت تضع الإعدادات تحت التحكم بالإصدارات.",{"title":63,"body":64},"تشغيل GitLab والانتظار حتى اكتمال الإعداد","أطلق الـstack: `docker compose -f \u002Fopt\u002Fgitlab\u002Fdocker-compose.yml up -d`. أول تشغيل يستغرق وقتًا: يُهيئ GitLab قاعدة البيانات ويُعدّ Nginx وPuma. **انتظر نحو 5 دقائق** قبل الوصول إلى واجهة الويب. تابع التقدم بـ`docker compose -f \u002Fopt\u002Fgitlab\u002Fdocker-compose.yml logs -f gitlab` وانتظر رسالة `gitlab Reconfigured!`.",{"title":66,"body":67},"استرداد كلمة مرور root الأولية","عند أول تهيئة، يولّد GitLab كلمة مرور مؤقتة لحساب `root`. استرجعها بـ: `docker exec -it gitlab-gitlab-1 grep 'Password:' \u002Fetc\u002Fgitlab\u002Finitial_root_password`. يُحذف هذا الملف **تلقائيًا بعد 24 ساعة** — دوّن كلمة المرور فورًا.",{"title":69,"body":70},"تسجيل الدخول وتغيير كلمة المرور وتعطيل التسجيل المفتوح","افتح `https:\u002F\u002Fgit.yourdomain.com` في متصفحك. سجّل دخولك بـ`root` وكلمة المرور التي استرجعتها. انتقل إلى **User Settings → Password** وحدد كلمة مرور جديدة. أنشئ أول مستخدم لا يمتلك صلاحية root: **Admin Area → Users → New User**. للاستخدام الداخلي، عطّل التسجيل العام: **Admin Area → Settings → General → Sign-up restrictions → أزل تحديد 'Sign-up enabled'**.",{"title":72,"body":73},"تسجيل GitLab Runner","تتطلب pipelines CI\u002FCD runner واحدًا على الأقل. ثبّت `gitlab-runner` على الـVPS أو جهاز مخصص. استرجع رمز التسجيل من **Admin Area → Runners** (مشترك) أو **Settings → CI\u002FCD → Runners** في مشروعك. سجّل الـrunner: `gitlab-runner register --url https:\u002F\u002Fgit.yourdomain.com --registration-token YOUR_TOKEN --executor docker --docker-image alpine:latest`. بعد التسجيل يظهر الـrunner باللون الأخضر وتستطيع pipelines `‎.gitlab-ci.yml` التنفيذ.",{"title":75,"body":76},"التحقق من إرسال البريد الإلكتروني","اختبر SMTP من وحدة تحكم Rails: `docker exec -it gitlab-gitlab-1 gitlab-rails console` ثم اكتب `Notify.test_email('your@email.com', 'Test GitLab', 'Hello').deliver_now`. إن لم يصل البريد، تحقق من وجود مفاتيح `smtp_*` داخل `GITLAB_OMNIBUS_CONFIG` وراجع السجلات: `docker exec -it gitlab-gitlab-1 tail -f \u002Fvar\u002Flog\u002Fgitlab\u002Fgitlab-rails\u002Fproduction.log`.",{"type":78,"body":79},"tip","**النسخ الاحتياطي التلقائي.** يتضمن GitLab أمر نسخ احتياطي كامل: `docker exec -t gitlab-gitlab-1 gitlab-backup create`. جدوله في `crontab -e` بالسطر `0 3 * * * docker exec -t gitlab-gitlab-1 gitlab-backup create CRON=1`. تُنشأ الأرشيفات في `\u002Fvar\u002Fopt\u002Fgitlab\u002Fbackups` ومُختومة بالتوقيت. زامن هذا المجلد مع تخزين خارجي (S3، rclone) — النسخة المحلية وحدها ليست نسخةً احتياطية.",{"type":28,"title":81,"body":82},"استكشاف الأخطاء: أكثر ثلاث مشكلات شيوعًا","**502 Bad Gateway عند الإقلاع.** يستغرق GitLab نحو 5 دقائق ليصبح جاهزًا. إن استمر الـ502، تحقق من بدء Puma: `docker exec gitlab-gitlab-1 gitlab-ctl status puma`. نقص الذاكرة هو السبب الأكثر شيوعًا — تأكد من توفر 4 غيغابايت على الأقل. **SMTP لا يعمل.** تحقق أولًا: هل كتلة `gitlab_rails['smtp_*']` داخل `GITLAB_OMNIBUS_CONFIG` وليست متغير بيئة منفصل؟ مسافة بادئة خاطئة أو مفتاح خارج الكتلة يُهمَل في صمت — اختبر من وحدة تحكم Rails (الخطوة 9). **Runner غير متصل.** إن ظهر رماديًا أو offline، تحقق من وصوله إلى نسختك: `gitlab-runner verify --url https:\u002F\u002Fgit.yourdomain.com`. شهادة TLS موقّعة ذاتيًا أو نطاق غير قابل للحل من جهاز الـrunner هما السببان المعتادان. تحقق أيضًا من مستوى الرمز المستخدم في التسجيل (instance، group أو project).",{"type":84,"title":85,"headers":86,"rows":90},"comparison","GitLab CE أو Forgejo أو Gitea: كيف تختار",[87,88,89],"المعيار","GitLab CE","Forgejo \u002F Gitea",[91,95,99,103,107,109,113,117],[92,93,94],"الرخصة","MIT \u002F EE Core","MIT",[96,97,98],"ذاكرة الخمول","300–600 ميغابايت (Puma + Sidekiq)","30–50 ميغابايت",[100,101,102],"CI\u002FCD أصيلة","نعم (`.gitlab-ci.yml`، runners)","Forgejo: نعم عبر Woodpecker CI؛ Gitea: لا يوجد",[104,105,106],"سجل Docker مدمج","نعم","Forgejo: نعم؛ Gitea: غير أصيل",[108,105,105],"Wiki لكل مشروع",[110,111,112],"LDAP \u002F SAML","نعم (CE)","Forgejo: نعم؛ Gitea: LDAP نعم، SAML لا",[114,115,116],"منحنى التعلم","مرتفع (واجهة غنية)","منخفض إلى متوسط",[118,119,120],"الأنسب لـ","فرق 5+ تحتاج CI وسجل Docker وRBAC","فرق خفيفة، منصة بسيطة، بصمة RAM منخفضة",{"type":28,"title":122,"body":123},"متى تختار GitLab CE ومتى تختار Forgejo","GitLab CE هو الاختيار الصحيح إن احتاج فريقك إلى CI\u002FCD قوية مدمجة مباشرةً في المنصة، وسجل Docker خاص على نطاقك، وpipelines نشر مع environments، أو إدارة مشاريع بمشكلات ومراحل ولوحة kanban دون أداة خارجية. بصمته الذاكرية (4–8 غيغابايت) هي ثمن هذا الثراء الوظيفي. Forgejo أو Gitea هما الخيار حين تكون الذاكرة القيد الرئيسي، وحين المنصة هي الحاجة الوحيدة (دون CI مدمجة) وتشغّل CI بأداة خارجية. على VPS بـ2 غيغابايت، GitLab CE غير قابل للتطبيق؛ Forgejo يعمل بـ256 ميغابايت. على VPS بـ8 غيغابايت مخصص لفريق تطوير، يوفر GitLab CE بيئة كاملة تضعها GitHub على منصتها SaaS — تحت سيطرتك ودون اشتراك شهري بحسب عدد المستخدمين.","VPS جاهز لـGitLab CE","يحتاج GitLab CE إلى VPS بذاكرة 4 إلى 8 غيغابايت وقرص سخي وعنوان IP مخصص. تأتي VPS ServOrbit مزوّدة بـDebian 12 أو Ubuntu 24.04 وصلاحية root فورية — ما يكفي لإطلاق منصتك خلال ثلاثين دقيقة.","اطّلع على VPS ServOrbit","\u002Fsolutions\u002Fdeveloppeurs",[129,144,155],{"id":130,"slug":131,"title":132,"excerpt":133,"readTime":134,"views":12,"isPinned":13,"publishedAt":135,"category":136,"categories":141,"featuredImage":22,"bgImage":23,"posterImage":143,"relatedSolution":22},212,"woodpecker-ci-pipeline-vps-forgejo","Woodpecker CI وForgejo: خط أنابيب CI\u002FCD على خادم VPS","انشر Woodpecker CI مع Forgejo على خادم VPS لخط أنابيب CI\u002FCD مفتوح المصدر، مستضاف ذاتيًا وخفيف وسيادي. دليل Docker خطوة بخطوة.",4,"2026-08-02T00:00:00+00:00",{"id":137,"name":138,"slug":139,"color":140,"icon":139},2,"الأتمتة","automatisation","bg-brand-action\u002F10 text-brand-action",[142],{"id":137,"name":138,"slug":139,"color":140,"icon":139},"\u002Fblog\u002Fcovers\u002Fwoodpecker-ci-pipeline-vps-forgejo-poster.svg",{"id":145,"slug":146,"title":147,"excerpt":148,"readTime":149,"views":12,"isPinned":13,"publishedAt":150,"category":151,"categories":152,"featuredImage":22,"bgImage":23,"posterImage":154,"relatedSolution":22},229,"docker-compose-production-checklist","Docker Compose في الإنتاج: قائمة التحقق من 10 نقاط","‎10 إعدادات Docker Compose يجب التحقق منها قبل أي نشر إنتاجي: إعادة التشغيل والفحوص الصحية والحدود والأسرار والسجلات.",11,"2026-08-06T00:00:00+00:00",{"id":16,"name":17,"slug":18,"color":19,"icon":18},[153],{"id":16,"name":17,"slug":18,"color":19,"icon":18},"\u002Fblog\u002Fcovers\u002Fdocker-compose-production-checklist-poster.svg",{"id":156,"slug":157,"title":158,"excerpt":159,"readTime":134,"views":12,"isPinned":13,"publishedAt":160,"category":161,"categories":162,"featuredImage":22,"bgImage":23,"posterImage":164,"relatedSolution":22},207,"k3s-kubernetes-leger-vps","K3s: كوبيرنيتيس خفيف على VPS الخاص بك","شغّل كتلة كوبيرنيتيس معتمدة من CNCF على VPS متواضع باستخدام K3s، توزيعة Rancher\u002FSUSE التي لا تتجاوز 60 ميغابايت.","2026-08-01T00:00:00+00:00",{"id":16,"name":17,"slug":18,"color":19,"icon":18},[163],{"id":16,"name":17,"slug":18,"color":19,"icon":18},"\u002Fblog\u002Fcovers\u002Fk3s-kubernetes-leger-vps-poster.svg",1786136484627]