[{"data":1,"prerenderedAt":146},["ShallowReactive",2],{"seo-verification":3,"blog-opentofu-إدارة-أسطول-vps-الخاص-بك-بالبنية-التحتية-كبيانات-ar":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"id":7,"slug":8,"slugs":9,"title":12,"excerpt":13,"readTime":14,"views":15,"isPinned":16,"publishedAt":17,"category":18,"categories":23,"featuredImage":25,"bgImage":26,"posterImage":27,"relatedSolution":25,"intro":28,"sections":29,"ctaTitle":94,"ctaBody":95,"ctaButton":96,"ctaUrl":97,"relatedPosts":98},297,"opentofu-إدارة-أسطول-vps-الخاص-بك-بالبنية-التحتية-كبيانات",{"fr":10,"en":11,"ar":8},"opentofu-terraform-vps-automatiser-infrastructure","opentofu-manage-your-vps-fleet-with-infrastructure-as-code","‏OpenTofu: إدارة أسطول VPS الخاص بك بالبنية التحتية كبيانات","‏OpenTofu، الفرع المفتوح المصدر لـ Terraform تحت CNCF، يتيح لك وصف أسطول VPS الخاص بك بصيغة HCL وتوفيره بأمر واحد. دليل عملي للوكالات والمطورين.",10,0,false,"2026-08-23T00:00:00+00:00",{"id":19,"name":20,"slug":21,"color":22,"icon":21},2,"الأتمتة","automatisation","bg-brand-action\u002F10 text-brand-action",[24],{"id":19,"name":20,"slug":21,"color":22,"icon":21},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fopentofu-terraform-vps-automatiser-infrastructure-poster.svg","‏تدير عشرة خوادم VPS ثم عشرين، وكل خادم جديد يتطلب نفس قائمة المهام اليدوية: الطلب، الشبكة، ‏Docker، الوكيل العكسي، الشهادة. خطوة واحدة مفقودة في الترتيب وتسقط عملية التسليم. ‏OpenTofu، الفرع المفتوح المصدر لـ Terraform المستضاف تحت CNCF، يعكس هذا المنطق: تصف الحالة المستهدفة للبنية التحتية بصيغة HCL، تشغّل `tofu apply`، ويحسب الأداة الفرق بين ما هو موجود وما يجب أن يوجد. يغطي هذا الدليل توفير خوادم VPS — الإنشاء والتحديث والحذف — كمكمل لإدارة التهيئة التي يتولاها ‏Ansible.",[30,34,45,48,73,77,80,83,91],{"type":31,"title":32,"body":33},"h2","‏لماذا OpenTofu بدلاً من الاستمرار في إدارة SSH يدوياً","‏حتى خمسة أو ستة عملاء، تصمد الإدارة اليدوية: تتذكر ما يعمل أين، وقائمة إعداد الخادم محفوظة. بعد ذلك، تصبح الذاكرة مخاطرة تشغيلية. خادم VPS المُوفَّر يدوياً لا تتوفر له حالة قابلة للقراءة: لا تعرف دون الاتصال به إن كان جدار الحماية مُهيَّأً، أو إن كان ‏Docker على الإصدار المتوقع، أو إن كان هذا الخادم لا يزال ضمن دوران التحميل.\n\n‏‏OpenTofu يحل مشكلة مختلفة عن Ansible. ‏Ansible يدير *تهيئة* خادم موجود بالفعل — ما يعمل عليه، أي ملفات موجودة، أي خدمات تعمل. ‏OpenTofu يدير *دورة حياة* الخادم نفسه: الإنشاء، تحديث الخصائص، الحذف. ويحتفظ بملف حالة (`terraform.tfstate`) يعرف بالضبط ما هو مُوفَّر وما ليس كذلك. الأداتان متكاملتان: ‏OpenTofu يُوفِّر، ‏Ansible يُهيِّئ.\n\n‏في أغسطس 2023، غيّرت HashiCorp رخصة Terraform من MPL-2.0 إلى BUSL-1.1، وهي رخصة غير حرة تُقيّد بعض الاستخدامات التجارية. ردّ المجتمع بإنشاء ‏OpenTofu، فرع متوافق مع HCL للإصدارات السابقة لـ Terraform 1.6، ومستضاف الآن تحت CNCF (مؤسسة الحوسبة السحابية الأصلية) والـ ‏Linux Foundation. الأمر هو `tofu` لا `terraform`، لكن ملفات `.tf` والمنطق متطابقان.",{"type":35,"title":36,"items":37},"ul","ما تكسبه مع حالة تصريحية",[38,39,40,41,42,43,44],"‏**جرد موثوق** — يخبرك ملف `terraform.tfstate` بالضبط بأي خوادم موجودة، مع أي عناوين IP وخصائص، دون الاتصال بكل واحد.","‏**قابلية إعادة الإنتاج** — عميل جديد أو مشروع جديد يحصل على نفس خادم VPS مُهيَّئاً بنفس الطريقة، من نفس ملف `.tf` الموجود في Git.","‏**حذف نظيف** — يزيل `tofu destroy` الموارد بالترتيب الصحيح، دون ترك خوادم يتيمة لا تزال تُدفَع فواتيرها.","‏**فرق قابل للقراءة** — يعرض `tofu plan` بالضبط ما سيُنشأ أو يُعدَّل أو يُحذَف قبل التنفيذ، مثل `git diff` للبنية التحتية.","‏**تكامل مع Ansible** — ينشئ ‏OpenTofu خادم VPS ويضع البيانات الوصفية (مفتاح SSH، الاسم، الشبكة)؛ ‏Ansible يتولى نشر Docker وNginx وتطبيقاتك.","‏**قابل للإصدار والتدقيق** — تصبح بنيتك التحتية مستودع Git بعمليات commit ومراجعات كود وسجل تغييرات.","‏**رخصة مفتوحة المصدر مستدامة** — ‏OpenTofu تحت MPL-2.0، دون قيود تجارية، مع حوكمة مجتمعية تحت CNCF.",{"type":31,"title":46,"body":47},"المتطلبات الأساسية قبل البدء","‏يفترض هذا الدليل أن لديك خادم VPS بصلاحية root وعنوان IPv4 مخصص لتشغيل أحمال العمل، ومحطة تطوير (macOS أو Linux أو Windows مع WSL2) تُشغّل منها `tofu`. ‏OpenTofu نفسه لا يعمل على خادم VPS الهدف: ينفذ محلياً ويتحدث إلى API المزود أو daemon Docker الخادم.\n\n‏لمتابعة الأمثلة، تحتاج إلى: ‏OpenTofu مثبت محلياً (انظر \u003Ca href=\"https:\u002F\u002Fopentofu.org\u002Fdocs\u002Fintro\u002Finstall\u002F\">opentofu.org\u002Fdocs\u002Fintro\u002Finstall\u003C\u002Fa>)، وصول API أو بيانات اعتماد SSH لخادم VPS الهدف، وGit لإصدار ملفات `.tf`. لا توجد تبعيات إضافية مطلوبة — ‏OpenTofu يُنزِّل المزودين بنفسه عند `tofu init`.\n\n‏للتحكم في Docker على خادم VPS بعيد عبر ‏OpenTofu، يجب أن يستمع daemon Docker الخادم على مقبس Unix الخاص به (افتراضياً) أو على منفذ TCP مؤمَّن. يتصل مزود `kreuzwerker\u002Fdocker` بهذا المقبس عبر SSH أو TCP.",{"type":49,"title":50,"steps":51},"steps","‏إعداد OpenTofu لأسطول خوادم VPS",[52,55,58,61,64,67,70],{"title":53,"body":54},"‏تثبيت OpenTofu محلياً","‏توجّه إلى \u003Ca href=\"https:\u002F\u002Fopentofu.org\u002Fdocs\u002Fintro\u002Finstall\u002F\">opentofu.org\u002Fdocs\u002Fintro\u002Finstall\u003C\u002Fa> للحصول على التعليمات حسب نظام تشغيلك. على macOS مع Homebrew: `brew install opentofu`. على Debian\u002FUbuntu: يوفر المستودع الرسمي لـ ‏OpenTofu حزمة `opentofu`. تحقق من التثبيت بـ `tofu version` — يجب أن يُعيد الأمر الإصدار المثبت.",{"title":56,"body":57},"هيكلة مشروع البنية التحتية كبيانات","‏أنشئ دليلاً مخصصاً وأربعة ملفات معيارية.\n\n```hcl\n# main.tf — الموارد الرئيسية\n# variables.tf — تصريحات المتغيرات\n# outputs.tf — القيم المُعرَّضة بعد apply\n# terraform.tfvars — القيم الفعلية (أضفها لـ gitignore إن كانت أسرار)\n```\n\n‏هذه البنية ليست إلزامية لـ ‏OpenTofu، لكنها الاصطلاح المعتمد على نطاق واسع: يحمل `main.tf` الموارد، يُصرِّح `variables.tf` بالأنواع والقيم الافتراضية، يكشف `outputs.tf` ما يحتاج ‏Ansible أو أداة أخرى لقراءته بعد التوفير (عنوان IP الخادم، اسم المضيف…)، ويحتوي `terraform.tfvars` على القيم الفعلية التي لا تريد كتابتها مباشرة في `main.tf`.",{"title":59,"body":60},"‏تصريح المزود وإنشاء مفتاح SSH","‏‏OpenTofu يثبّت المزودين المطلوبين عند `tofu init`. مزود `hashicorp\u002Ftls` ينشئ زوج مفاتيح SSH محلياً، مما يُزيل الحاجة لإدارة المفاتيح يدوياً.\n\n```hcl\nterraform {\n  required_providers {\n    tls = {\n      source  = \"hashicorp\u002Ftls\"\n      version = \"~> 4.0\"\n    }\n  }\n}\n\nresource \"tls_private_key\" \"vps_key\" {\n  algorithm = \"ED25519\"\n}\n\noutput \"private_key_pem\" {\n  value     = tls_private_key.vps_key.private_key_pem\n  sensitive = true\n}\n```\n\n‏شغّل `tofu init` لتنزيل المزود، ثم `tofu apply` لإنشاء المفتاح. استرجعه بـ `tofu output -raw private_key_pem > ~\u002F.ssh\u002Fvps_key && chmod 600 ~\u002F.ssh\u002Fvps_key`.",{"title":62,"body":63},"‏توفير خادم VPS باستخدام null وlocal-exec","‏إذا لم يكن لمزود خادم VPS الخاص بك مزود ‏OpenTofu رسمي، يُتيح لك مزود `hashicorp\u002Fnull` مع `local-exec` تنفيذ أمر محلي (استدعاء API بـ curl، سكريبت shell) ونمذجة المورد في الحالة.\n\n```hcl\nresource \"null_resource\" \"vps_provision\" {\n  triggers = {\n    server_name = var.server_name\n  }\n\n  provisioner \"local-exec\" {\n    command = \u003C\u003CEOT\n      curl -s -X POST https:\u002F\u002Fapi.your-provider.com\u002Fv1\u002Fservers \\\n        -H \"Authorization: Bearer ${var.api_token}\" \\\n        -d '{\"name\": \"${var.server_name}\", \"image\": \"ubuntu-22.04\"}'\n    EOT\n  }\n}\n```\n\n‏هذا النمط مناسب لمرحلة انتقالية. إذا كان مزودك يكشف REST API، يكفي سكريبت shell يُستدعى عبر `local-exec` لإنشاء الخادم وكتابة عنوان IP في ملف يكشفه `outputs.tf` لاحقاً.",{"title":65,"body":66},"‏التحكم في Docker على خادم VPS باستخدام مزود kreuzwerker","‏بمجرد توفير خادم VPS وتثبيت Docker (عبر ‏Ansible عادةً)، يُتيح لك مزود `kreuzwerker\u002Fdocker` تصريح الحاويات والشبكات والأحجام في ‏OpenTofu.\n\n```hcl\nterraform {\n  required_providers {\n    docker = {\n      source  = \"kreuzwerker\u002Fdocker\"\n      version = \"~> 3.0\"\n    }\n  }\n}\n\nprovider \"docker\" {\n  host = \"ssh:\u002F\u002Froot@${var.server_ip}:22\"\n}\n\nresource \"docker_container\" \"app\" {\n  name  = \"my-app\"\n  image = docker_image.app.image_id\n}\n\nresource \"docker_image\" \"app\" {\n  name = \"nginx:alpine\"\n}\n```\n\n‏يتصل المزود بـ daemon Docker الخاص بخادم VPS عبر SSH — لا يلزم فتح منفذ TCP إضافي. الإصدار المستقر للمزود متاح على \u003Ca href=\"https:\u002F\u002Fregistry.terraform.io\u002Fproviders\u002Fkreuzwerker\u002Fdocker\u002Flatest\u002Fdocs\">Terraform Registry\u003C\u002Fa>.",{"title":68,"body":69},"إصدار الحالة للعمل الجماعي","‏للتطوير الفردي، تكفي الحالة المحلية (`terraform.tfstate`). في بيئة الفريق أو CI\u002FCD، مطوران يُشغّلان `tofu apply` في آنٍ واحد يُفسدان الحالة. الحل هو backend بعيد مع قفل.\n\n‏‏OpenTofu يدعم S3 أصلاً (AWS، MinIO المستضاف ذاتياً) وGitLab Managed Terraform State. مع bucket MinIO على خادم VPS:\n\n```hcl\nterraform {\n  backend \"s3\" {\n    bucket                      = \"tofu-state\"\n    key                         = \"production\u002Fterraform.tfstate\"\n    region                      = \"eu-west-1\"\n    endpoint                    = \"https:\u002F\u002Fminio.your-domain.com\"\n    skip_credentials_validation = true\n    skip_metadata_api_check     = true\n    skip_region_validation      = true\n    force_path_style            = true\n  }\n}\n```\n\n‏القفل تلقائي: إذا كان `tofu apply` يعمل، يُرفض الثاني حتى ينتهي الأول.",{"title":71,"body":72},"‏دمج OpenTofu في pipeline CI\u002FCD","‏يُشغّل pipeline نموذجي لـ Woodpecker CI أو Forgejo Actions الأمر `tofu plan` على كل pull request (لمراجعة بشرية لفرق البنية التحتية) و`tofu apply` عند الدمج في الفرع الرئيسي.\n\n```yaml\nsteps:\n  - name: tofu-plan\n    image: ghcr.io\u002Fopentofu\u002Fopentofu:latest\n    commands:\n      - tofu init\n      - tofu plan -out=tfplan\n\n  - name: tofu-apply\n    image: ghcr.io\u002Fopentofu\u002Fopentofu:latest\n    commands:\n      - tofu apply tfplan\n    when:\n      branch: main\n      event: push\n```\n\n‏الحالة البعيدة (الخطوة السابقة) ضرورية هنا: runner CI ليس لديه وصول إلى الحالة المحلية على محطة العمل الخاصة بك.",{"type":74,"title":75,"body":76},"tip","افصل مساحات العمل حسب البيئة","‏يوفر ‏OpenTofu خاصية `workspaces` لعزل حالات متعددة في نفس backend: ينشئ `tofu workspace new staging` مساحة معزولة، ويُبدِّل `tofu workspace select production` إلى الإنتاج. هذا أخف من نسخ مجلدات `.tf`. عملياً، مساحة عمل واحدة لكل عميل أو بيئة (staging، prod) تمنع `tofu destroy` في staging من لمس الإنتاج. سمِّ مواردك بـ `${terraform.workspace}` لتبقى مميزة في الحالة.",{"type":31,"title":78,"body":79},"‏Ansible وOpenTofu: الحدود بين الأداتين","‏يتكرر السؤال: ‏Ansible يؤدي العمل بالفعل، لماذا إضافة أداة؟ الحد واضح متى رُسم صراحةً.\n\n‏‏OpenTofu يجيب على \"ما الموجود؟\": ينشئ الخادم، يُخصّص له عنوان IP، يضع مفتاح SSH، يسجّل حالته. إن حذفته من ملف `.tf` وشغّلت `tofu apply`، اختفى الخادم — ‏OpenTofu يمتلك دورة الحياة.\n\n‏‏Ansible يجيب على \"في أي حالة يوجد ما هو موجود؟\": يثبّت Docker، يُهيِّئ Nginx، يضع ملف `.env`، يُعيد تشغيل خدمة. إذا كان الخادم موجوداً بالفعل، ‏Ansible يجعله ما تطلبه — لكن إذا لم يكن موجوداً، ‏Ansible لا يستطيع إنشاءه.\n\n‏التدفق الطبيعي لوكالة: ‏OpenTofu يُوفِّر خادم VPS ويكشف عنوان IP الخاص به كـ `output`، playbook ‏Ansible يستهلك هذا الـ `output` عبر جرد ديناميكي، يُهيِّئ الخادم وينشر التطبيقات. المقالة \u003Ca href=\"\u002Fblog\u002Fansible-automatiser-serveurs-vps\">Ansible: أتمتة تهيئة خوادم VPS الخاصة بك\u003C\u002Fa> تغطي جانب التهيئة بالتفصيل.",{"type":31,"title":81,"body":82},"استكشاف الأخطاء: المشكلات الشائعة","ثلاثة مواقف تتكرر عند اعتماد ‏OpenTofu على أسطول موجود.",{"type":35,"title":84,"items":85},"الأخطاء الشائعة وطريقة إصلاحها",[86,87,88,89,90],"‏**`Error acquiring the state lock`** — عطل أثناء `apply` يترك ملف `.terraform.tfstate.lock.info` على backend. يرفض ‏OpenTofu المتابعة طالما القفل موجود. بعد التحقق من عدم وجود `apply` آخر يعمل، أزل القفل بـ `tofu force-unlock \u003CLOCK_ID>` (يظهر المعرّف في رسالة الخطأ). على backend S3\u002FMinIO، الملف مرئي في bucket.","‏**`tofu plan` يعرض `destroy + create` غير متوقع** — بعض خصائص المورد تفرض إعادة إنشاءه (`force new resource`) عند تغييرها: اسم الخادم، نوع صورة نظام التشغيل، المنطقة. إذا عدّلت أحد هذه الخصائص، لا يستطيع ‏OpenTofu إجراء تحديث في المكان — يحذف ويُعيد الإنشاء. اقرأ الخطة بعناية قبل التطبيق واستخدم `tofu plan -target=resource.name` لتضييق النطاق.","‏**حالة مفقودة أو غير متزامنة** — إذا فُقد ملف الحالة والخوادم لا تزال موجودة، يُدرج `tofu state list` ما يعتقد ‏OpenTofu أنه مُوفَّر، ويستورد `tofu import \u003Cresource.type.name> \u003Cexternal-id>` مورداً موجوداً في الحالة دون إعادة إنشائه. هذه أداة الاسترداد حين تباينت الواقع والحالة.","‏**المزود غير موجود بعد `tofu init`** — تحقق من أن `source` للمزود صحيح (مثل `kreuzwerker\u002Fdocker` لا `docker\u002Fdocker`) وأن لديك وصولاً للإنترنت من الجهاز الذي يُشغّل `tofu init`. في بيئة معزولة، نزّل المزودين مسبقاً واستخدم `plugin_cache_dir`.","‏**`Error: No valid credential sources found`** — لا يجد ‏OpenTofu بيانات اعتماد للمزود. تحقق من متغيرات البيئة المتوقعة من المزود (غالباً `TF_VAR_api_token` أو ملف بيانات اعتماد خاص بالمزود) ومن أن `terraform.tfvars` يُقرأ (يجب أن يكون في نفس مجلد `main.tf`).",{"type":31,"title":92,"body":93},"بنيتك التحتية تصبح بيانات ذات إصدارات","‏‏OpenTofu لا يحل محل SSH، بل يجعل SSH استثناءً. يصبح التدفق اليومي: تعديل ملف `.tf`، تشغيل `tofu plan` لمراجعة الفرق، التحقق، تشغيل `tofu apply`. الخوادم التي لم تعد بحاجة إلى إدارتها تُحذف بـ `tofu destroy` وتختفي من الفواتير.\n\n‏لوكالة تتجاوز العشرة عملاء، هذا هو الرافعة التي تحوّل إدارة البنية التحتية من عمل ذاكرة إلى عمل بيانات. خادم ServOrbit Cloud VPS بصلاحية root وعنوان IPv4 مخصص واختيار نظام التشغيل هو الوحدة الأساسية التي تُوفِّرها وتحذفها ملفات `.tf` الخاصة بك عند الطلب. بنيتك التحتية تصبح بيانات ذات إصدارات.","خادم VPS Cloud جاهز لـ OpenTofu","‏وصول root، عنوان IPv4 مخصص، واختيار نظام التشغيل: خادم ServOrbit Cloud VPS هو الوحدة الأساسية التي تُوفّرها وتحذفها ملفات `.tf` الخاصة بك عند الطلب.","ابدأ خادم VPS الخاص بي","\u002Fsolutions\u002Fdeveloppeurs",[99,114,132],{"id":100,"slug":101,"slugs":102,"title":105,"excerpt":106,"readTime":107,"views":108,"isPinned":16,"publishedAt":109,"category":110,"categories":111,"featuredImage":25,"bgImage":26,"posterImage":113,"relatedSolution":25},236,"أتمتة-إدارة-خوادم-vps-باستخدام-ansible",{"fr":103,"en":104,"ar":101},"ansible-automatiser-serveurs-vps","automating-vps-server-management-with-ansible","أتمتة إدارة خوادم VPS باستخدام Ansible","تعرّف على كيفية أتمتة إدارة أسطول خوادم VPS باستخدام ‎Ansible‎: الجرد والـ playbooks والأدوار والـ Vault لبنية تحتية قابلة للتكرار.",11,1,"2026-08-08T00:00:00+00:00",{"id":19,"name":20,"slug":21,"color":22,"icon":21},[112],{"id":19,"name":20,"slug":21,"color":22,"icon":21},"\u002Fblog\u002Fcovers\u002Fansible-automatiser-serveurs-vps-poster.svg",{"id":115,"slug":116,"slugs":117,"title":120,"excerpt":121,"readTime":122,"views":15,"isPinned":16,"publishedAt":123,"category":124,"categories":129,"featuredImage":25,"bgImage":26,"posterImage":131,"relatedSolution":25},229,"docker-compose-في-الإنتاج-قائمة-التحقق-من-10-نقاط",{"fr":118,"en":119,"ar":116},"docker-compose-production-checklist","docker-compose-in-production-10-point-checklist","Docker Compose في الإنتاج: قائمة التحقق من 10 نقاط","‎10 إعدادات Docker Compose يجب التحقق منها قبل أي نشر إنتاجي: إعادة التشغيل والفحوص الصحية والحدود والأسرار والسجلات.",14,"2026-08-06T00:00:00+00:00",{"id":125,"name":126,"slug":127,"color":128,"icon":127},3,"النشر","deploiement","bg-success\u002F10 text-success",[130],{"id":125,"name":126,"slug":127,"color":128,"icon":127},"\u002Fblog\u002Fcovers\u002Fdocker-compose-production-checklist-poster.svg",{"id":133,"slug":134,"slugs":135,"title":138,"excerpt":139,"readTime":140,"views":108,"isPinned":16,"publishedAt":141,"category":142,"categories":143,"featuredImage":25,"bgImage":26,"posterImage":145,"relatedSolution":25},212,"woodpecker-ci-وforgejo-خط-أنابيب-cicd-على-خادم-vps",{"fr":136,"en":137,"ar":134},"woodpecker-ci-pipeline-vps-forgejo","woodpecker-ci-and-forgejo-cicd-pipeline-on-a-vps","Woodpecker CI وForgejo: خط أنابيب CI\u002FCD على خادم VPS","انشر Woodpecker CI مع Forgejo على خادم VPS لخط أنابيب CI\u002FCD مفتوح المصدر، مستضاف ذاتيًا وخفيف وسيادي. دليل Docker خطوة بخطوة.",4,"2026-08-02T00:00:00+00:00",{"id":19,"name":20,"slug":21,"color":22,"icon":21},[144],{"id":19,"name":20,"slug":21,"color":22,"icon":21},"\u002Fblog\u002Fcovers\u002Fwoodpecker-ci-pipeline-vps-forgejo-poster.svg",1787581065677]