[{"data":1,"prerenderedAt":246},["ShallowReactive",2],{"seo-verification":3,"blog-ترحيل-minio-إلى-garage-أو-rustfs-على-vps-ar":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-ترحيل-minio-إلى-garage-أو-rustfs-على-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":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":30,"intro":33,"sections":34,"ctaTitle":184,"ctaBody":185,"ctaButton":186,"ctaUrl":187,"relatedPosts":188},499,"ترحيل-minio-إلى-garage-أو-rustfs-على-vps",{"fr":12,"en":13,"ar":10,"es":14},"migrer-minio-vers-garage-ou-rustfs-vps","migrate-minio-to-garage-or-rustfs-vps","migrar-minio-a-garage-o-rustfs-vps","ترحيل MinIO إلى Garage أو RustFS دون فقدان كائن حالي","أُرشف MinIO: انسخ حاوياتك إلى Garage أو RustFS بأداة rclone، وأثبت أنه لم يُفقد شيء، وحوّل تطبيقك دون كسر روابطك.",13,0,false,"2026-10-23T00:00:00+00:00","2026-10-23T23:43:01+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},7,"الاستضافة الذاتية","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fmigrer-minio-vers-garage-ou-rustfs-vps-poster.svg","أُرشف مستودع MinIO منذ 25 أبريل 2026، فصار تخزين S3 لديك يعمل دون تصحيحات أمنية من المصدر. يتكرر ذكر Garage وRustFS هدفين قابلين للاستضافة الذاتية، لكن نسخ الكائنات نصف العمل فقط، فسياسات IAM وسجل الإصدارات والروابط الموقّعة مسبقًا لا تنتقل معها. يجرد هذا الدليل المصدر وينسخ بأداة rclone ويثبت النتيجة بالأعداد والفحوص، ثم يحوّل التطبيق على ثلاث مراحل مع انقطاع كتابة أدنى ورجوع جاهز.",[35,39,49,52,71,111,114,132,150,153,156,174,178,181],{"type":36,"title":37,"body":38},"h2","لماذا لا تترك MinIO حيث هو","أُرشف مستودع `minio\u002Fminio` من قِبل مالكه في 25 أبريل 2026: أصبح للقراءة فقط، ويذكر ملف README أن المشروع لم يعد مُصانًا وأن الملفات التنفيذية المنشورة لن تتلقى تحديثات. عمليًا، لن يصلح أحد في المصدر الثغرة التالية التي تُكتشف في خادم S3 لديك. أما العميل `mc`، وهو أيضًا تحت رخصة AGPLv3، فقد أُرشف في 14 يوليو 2026.\n\nيواصل MinIO لديك العمل، وهذا ما يجعل الأمر خادعًا: لا ينكسر شيء يوم الأرشفة. لكن مخزن الكائنات معرَّض للشبكة، ويحتوي وسائطك أو نسخك الاحتياطية أو صادراتك، وهو يعمل الآن دون تصحيحات أمنية. هدفان قابلان للاستضافة الذاتية يتكرران في النقاشات: Garage المنشور برخصة AGPLv3، وRustFS المنشور برخصة Apache 2.0.\n\nلا يعيد هذا المقال تثبيت أيٍّ منهما، فلكل منهما دليله: \u003Ca href=\"\u002Far\u002Fالمدونة\u002Fاستضافة-garage-على-خادم-vps-تخزين-كائنات-s3-يملكه-أنت\">Garage على خادم VPS\u003C\u002Fa> و\u003Ca href=\"\u002Far\u002Fالمدونة\u002Fاستضافة-rustfs-على-vps-تخزين-كائنات-s3\">RustFS على VPS\u003C\u002Fa>. هنا ننطلق من MinIO قيد الإنتاج ونجيب عن سؤال واحد: كيف تنقل البيانات، وتثبت أنه لم يُفقد شيء، وتحوّل التطبيق دون روابط مكسورة.",{"type":40,"title":41,"items":42},"ul","ما لا ينقله نسخ الحاوية وحده",[43,44,45,46,47,48],"**الكائنات الحالية** — هذا هو الجزء السهل: ينسخها `rclone` أو `mc mirror`، مع فحص يُجرى بعد ذلك.","**الإصدارات القديمة** — توضح وثائق `mc mirror` أنه لا يزامن إلا الكائن الحالي، دون أي معلومة عن الإصدارات.","**مستخدمو IAM وسياساته** — تعيش في MinIO لا في الحاويات. الأسرار لا تُصدَّر: تُنشئ مفاتيح جديدة في الهدف.","**الروابط الموقّعة مسبقًا التي وُزّعت** — يعتمد التوقيع على المضيف والمنطقة والمفاتيح. تغيير نقطة الوصول يبطلها.","**فروق التوافق مع S3** — قوائم ACL وسياسات الحاويات والوصول المجهول وتعدد الإصدارات: لكل هدف ثغراته، تُقرأ في وثائقه بدل افتراضها.","**إعدادات العملاء** — نقطة الوصول والمنطقة ونمط العنونة path-style: كل ما يثبّته تطبيقك ونسخك `restic` وشبكة CDN لديك.",{"type":36,"title":50,"body":51},"المتطلبات وخطة السعة","تحتاج إلى صلاحية مسؤول على MinIO، وجهازًا أو خادم VPS عليه `mc` و`rclone`، وهدفًا مثبّتًا مسبقًا ويمكن بلوغه عبر HTTPS (راجع الدليلين أعلاه للوكيل العكسي والشهادة). قاعدة السعة بسيطة: ما لم تتحقق من الترحيل تُبقي المصدر سليمًا، فتدفع ثمن القرص مرتين.\n\nتوصيتنا التحريرية: خصّص في الهدف الحجم الكلي لبيانات المصدر، مضافًا إليه هامش يقارب 30% للبيانات الوصفية وفروق التوزيع. على الخادم نفسه يعني ذلك توفر ضعف الحجم الحالي على الأقل مع الهامش؛ وعلى خادمين يتحمل كل منهما نصيبه. عقدة Garage واحدة مع `replication_factor = 1` تحتفظ بنسخة واحدة فقط من كل كائن: هذه ليست نسخة احتياطية، والمصدر القائم هو شبكة الأمان الوحيدة أثناء الترحيل.",{"type":53,"title":54,"steps":55},"steps","الخطوة 1: جرد المصدر قبل النسخ",[56,59,62,65,68],{"title":57,"body":58},"عرّف MinIO باسم مستعار","أنشئ اسمًا مستعارًا `src` ببيانات اعتماد تقرأ كل الحاويات:\n`mc alias set src https:\u002F\u002Fs3.your-domain.com ACCESS_KEY SECRET_KEY`",{"title":60,"body":61},"عُدّ الكائنات والحجم","لكل حاوية دوّن عدد الكائنات والحجم:\n`mc du --recursive src\u002Fmedias`\n`mc ls --recursive src\u002Fmedias | wc -l`\nضع هذه الأرقام في جدول «قبل \u002F بعد»: هو دليلك على اكتمال الترحيل.",{"title":63,"body":64},"عُدّ الإصدارات","إن كان تعدد الإصدارات مفعّلًا فقائمة الإصدارات أطول من قائمة الكائنات:\n`mc ls --recursive --versions src\u002Fmedias | wc -l`\nتوضح وثائق `mc ls` أن `--versions` يتطلب خدمة تدعم تعدد الإصدارات. الفرق الكبير بين العددين يدل على حجم السجل المعرَّض للخطر.",{"title":66,"body":67},"صدّر قائمة السياسات والمستخدمين","احتفظ بسجل لما ستعيد إنشاءه:\n`mc admin policy list src`\n`mc admin user list src`\nالأسرار ليست في هذا الخرج ولا يمكن أن تكون: ستعيد توليدها.",{"title":69,"body":70},"دوّن إعدادات العملاء","في كل تطبيق يتحدث مع MinIO دوّن نقطة الوصول والمنطقة ونمط العنونة واسم متغير البيئة الذي يحملها. التحويل النهائي لن يغيّر إلا هذه القيم.",{"type":72,"title":73,"headers":74,"rows":78},"comparison","Garage وRustFS: الفروق التي يجب معرفتها قبل الاختيار",[75,76,77],"الموضوع","Garage","RustFS",[79,83,87,91,95,99,103,107],[80,81,82],"الرخصة","AGPLv3 (ملف README للمستودع)","Apache 2.0 (ملف README للمستودع)",[84,85,86],"تعدد الإصدارات","غير مدعوم: `PutBucketVersioning` و`ListObjectVersions` مدرجتان ضمن المفقود","مذكور على أنه متاح في README",[88,89,90],"سياسات الحاويات وقوائم ACL","لا هذه ولا تلك: نظام خاص حسب المفتاح والحاوية","IAM وسياسات الحاويات؛ قوائم ACL غير مدعومة عن قصد",[92,93,94],"الوصول المجهول","مرفوض باستجابة 403","يُقيَّم وفق سياسة الحاوية",[96,97,98],"منطقة العميل","`s3_region` من `garage.toml`، تُنسخ إلى العميل","`RUSTFS_REGION`، والقيمة الافتراضية `us-east-1`، تُنسخ إلى العميل",[100,101,102],"العنونة","path-style وvhost-style مدعومان","path-style افتراضيًا ودون إعداد DNS",[104,105,106],"الروابط الموقّعة مسبقًا","مدعومة","مدعومة؛ يجب أن يطابق التوقيعَ المضيفُ والمخطط والمنفذ والمنطقة والمسار",[108,109,110],"واجهة إدارة MinIO","لا ينطبق: تُدار بالأمر `garage`","سطح منفصل: يعمل S3 دون أن يكون `mc admin` مضمونًا",{"type":36,"title":112,"body":113},"تعدد الإصدارات: ما يضيع في النسخ وما العمل","هذه النقطة هي التي تحسم اختيار الهدف. لا يدعم Garage تعدد الإصدارات، وتقول صفحة توافقه مع S3 ذلك بوضوح. إن كانت حاوياتك تحتفظ بسجل يقرؤه التطبيق أو يجب حفظه لأسباب مهنية فليس Garage وجهتك. يذكر RustFS تعدد الإصدارات على أنه متاح، لكن النسخ بـ `rclone sync` أو `mc mirror` لن يعيد إنشاء سجلك هناك.\n\nثلاث طرق، تُختار حاوية بحاوية. قبول الفقد: لا تنتقل إلا النسخة الحالية، وهذا يناسب الحالات التي كان فيها تعدد الإصدارات مجرد شبكة أمان ضد الخطأ البشري. النسخ إصدارًا إصدارًا: تسرد المعرّفات بالأمر `mc ls --versions` ثم تعيد تشغيل الإصدارات من الأقدم إلى الأحدث نحو هدف يدعم تعدد الإصدارات بعد تفعيله على الحاوية؛ وستكون تواريخ الإصدارات تواريخ النسخ لا الأصلية. أو أرشفة السجل على حدة في حاوية أرشيف وترحيل الحالي فقط. في كل الحالات جرّب كائنًا ذا عدة إصدارات قبل إطلاق النسخ العام.",{"type":53,"title":115,"steps":116},"الخطوة 2: تجهيز الهدف، Garage أو RustFS",[117,120,123,126,129],{"title":118,"body":119},"Garage: عيّن التخطيط ثم طبّقه","لا تصلح أي حاوية قبل تطبيق التخطيط (layout). اقرأ معرّف العقدة ثم أسند إليها منطقة وسعة:\n`garage status`\n`garage layout assign -z dc1 -c 1G \u003Cnode_id>`\n`garage layout apply --version 1`\nاضبط `-c` على مساحة القرص المخصصة فعلًا.",{"title":121,"body":122},"Garage: أنشئ المفتاح والحاوية والصلاحيات","تُمنح الصلاحيات حسب المفتاح والحاوية:\n`garage key create app-key`\n`garage bucket create medias`\n`garage bucket allow --read --write --owner medias --key app-key`\nيظهر السر عند إنشاء المفتاح: انسخه فورًا إلى مدير الأسرار لديك.",{"title":124,"body":125},"Garage: انسخ المنطقة إلى العميل","يحدد القسم `[s3_api]` في `garage.toml` القيمة `s3_region`. ضع هذه القيمة نفسها في إعدادات عملائك وأبقِ على العنونة path-style. اختلاف المنطقة يعني توقيعات مرفوضة.",{"title":127,"body":128},"RustFS: الاسم المستعار والحاوية","مع ضبط `mc` على الهدف:\n`mc alias set dst http:\u002F\u002F127.0.0.1:9000 ACCESS_KEY SECRET_KEY`\n`mc mb dst\u002Fmedias`\nتوصي وثائق RustFS بمستخدمي IAM أو حسابات الخدمة بدل المفاتيح الجذرية للتطبيقات.",{"title":130,"body":131},"RustFS: أعد إنشاء المستخدمين والسياسات","خذ القائمة المصدَّرة في الخطوة 1 وأعد إنشاء كل مستخدم وكل سياسة في RustFS، بمفتاح جديد لكل تطبيق. ثم وحّد المنطقة: القيمة الافتراضية لـ `RUSTFS_REGION` هي `us-east-1` ويجب أن يستخدم العميل القيمة نفسها.",{"type":53,"title":133,"steps":134},"الخطوة 3: النسخ بـ rclone وإثبات النتيجة",[135,138,141,144,147],{"title":136,"body":137},"عرّف الوجهتين","استخدم المزوّد `Minio` للمصدر و`Other` للهدف:\n`rclone config create src s3 provider=Minio access_key_id=ACCESS_KEY secret_access_key=SECRET_KEY endpoint=https:\u002F\u002Fs3.your-domain.com`\n`rclone config create dst s3 provider=Other access_key_id=ACCESS_KEY secret_access_key=SECRET_KEY endpoint=http:\u002F\u002F127.0.0.1:3900 region=garage`\n`region=garage` يفترض أن `s3_region = \"garage\"`، وهي قيمة مثال Garage: ضع قيمتك إن اختلفت. مع RustFS استبدل نقطة الوصول بنقطة الهدف والمنطقة بقيمة `RUSTFS_REGION`.",{"title":139,"body":140},"أجرِ تجربة جافة","يعدّل `rclone sync` الوجهة لتعكس المصدر، بما في ذلك الحذف. لا تعكسه أبدًا، وابدأ بالتجربة الجافة:\n`rclone sync src:medias dst:medias --checksum --metadata --transfers 16 --dry-run`",{"title":142,"body":143},"شغّل النسخ الفعلي والخدمة قائمة","يبقى MinIO في الخدمة خلال هذه الجولة الأولى:\n`rclone sync src:medias dst:medias --checksum --metadata --transfers 16 --progress`\nيطلب `--metadata` من rclone الحفاظ على البيانات الوصفية: تحقق على كائن تجريبي من وصول نوع المحتوى سليمًا.",{"title":145,"body":146},"تحقق من النسخ","تأكد أن كل ما في المصدر موجود في الهدف:\n`rclone check src:medias dst:medias --one-way --combined \u002Ftmp\u002Fcheck-medias.txt`\nيسرد الملف كل مسار برمز: `=` مطابق، `+` غائب عن الوجهة، `*` مختلف، `!` خطأ. الهدف صفر سطر من `+` أو `*` أو `!`.",{"title":148,"body":149},"أعد العدّ بعد النسخ","أعد تشغيل `mc du --recursive` وعدّ الكائنات على الهدف بالاسم المستعار `dst`، واملأ عمود «بعد» في جدولك. يجب أن يتطابق الرقمان إلا في الفروق التي تفسرها الإصدارات.",{"type":36,"title":151,"body":152},"ETag متعدد الأجزاء وmc mirror: قراءة الفروق دون خطأ","ETag لكائن صغير أُرسل في طلب واحد هو MD5 الخاص به، ويستخدمه `rclone` مجموعًا اختباريًا. أما في كائن متعدد الأجزاء فتنبّه وثائق rclone إلى أن ETag لم يعد MD5 البيانات: إنه MD5 لتسلسل قيم MD5 لكل جزء، يليه عدد الأجزاء. فهو يتوقف إذن على حجم الأجزاء الذي اختاره العميل عند الرفع.\n\nاستقبل MinIO لديك الكائن بتقطيع معيّن، ويرسله `rclone` إلى الهدف بتقطيع آخر: المحتوى متطابق بايتًا ببايت، أما ETag فلا. وأمر `rclone check` الذي يبلغ عن هذه الكائنات على أنها مختلفة ليس مصيبًا بالضرورة. أعد تشغيله عليها بالخيار `--download` الذي ينزّل الطرفين ويقارن البيانات نفسها: أبطأ لكنه بلا لبس.\n\nإن فضّلت البقاء ضمن منظومة `mc` فالنسخ يُكتب `mc mirror --preserve src\u002Fmedias dst\u002Fmedias`. يحتفظ `--preserve` بخصائص المصدر وقواعد سياسة الحاوية؛ والأخيرة لا معنى لها إلا إن كان الهدف يقرؤها، وهذا يستبعد Garage. بدون `--overwrite` لا يُنسخ من جديد كائن موجود في الهدف: يُسجَّل الخطأ ويستمر النسخ. ومع `--remove` تُحذف كائنات الهدف الغائبة عن المصدر. و`mc mirror` لا يزامن إلا الكائن الحالي بلا إصدارات. وتقارن مقارنته الاسم والحجم والتاريخ والمجموع الاختباري دون قراءة المحتوى، وقد تختلف المجاميع المركبة لمجرد تغيّر توزيع الأجزاء، فتظهر فروق وهمية خصوصًا في الكائنات الكبيرة التي رُفعت بأحجام أجزاء مختلفة. وتذكّر أن مستودع `mc` مؤرشف أيضًا: الأداة تعمل لكنها لن تتطور، فلا تبنِ عليها أتمتة طويلة الأمد.",{"type":36,"title":154,"body":155},"الروابط الموقّعة مسبقًا: لماذا تتعطل عند التحويل","يحتوي الرابط الموقّع مسبقًا على توقيع محسوب من المفتاح السري والمضيف والمنطقة والمسار. تقول وثائق RustFS ذلك: يجب أن يطابق المضيف والمخطط والمنفذ والمنطقة ومسار الطلب ما استُخدم في التوقيع. فتغيير نقطة الوصول أو المفتاح يبطل كل رابط صدر، بلا استثناء، ولا شيء يعيد توجيهه.\n\nالنتيجة مسألة ترتيب. الروابط التي يولّدها تطبيقك لحظيًا تتجدد من تلقاء نفسها فور ربطه بالهدف الجديد. أما التي أرسلتها بالبريد أو خزّنتها في قاعدة البيانات فستموت عند التحويل. لذا قصّر مدة صلاحية الروابط قبل ذلك بأيام قليلة كي يقل عدد الروابط الطويلة المتداولة، ونبّه الفرق التي توزعها يدويًا.",{"type":53,"title":157,"steps":158},"الخطوة 4: التحويل على ثلاث مراحل دون قطع حاد",[159,162,165,168,171],{"title":160,"body":161},"مزامنة أولى والخدمة قائمة","هي نسخ الخطوة 3 يجري ومازال MinIO يخدم الحركة. تستغرق ما تستغرقه ولا تزعج أحدًا. دوّن وقت انتهائها.",{"title":163,"body":164},"جمّد الكتابة","حوّل التطبيق إلى وضع القراءة فقط أو إلى صيانة قصيرة، أو فعّل الكتابة المزدوجة إن سمح بها شيفرتك. يمكن أن تستمر القراءة على MinIO أثناء المزامنة الأخيرة.",{"title":166,"body":167},"المزامنة الأخيرة بالخيار --update","انقل فقط ما تغيّر منذ ذلك الحين:\n`rclone sync src:medias dst:medias --update --metadata --transfers 16 --progress`\n`rclone check src:medias dst:medias --one-way`\nأعد عدّ الكائنات والحجم وقارنها بجدول الخطوة 1.",{"title":169,"body":170},"غيّر نقطة الوصول عبر متغير بيئة","يجب أن يقرأ تطبيقك نقطة الوصول والمنطقة والمفاتيح من بيئته لا من الشيفرة. عدّل هذه المتغيرات وأعد تشغيل الخدمة ثم اختبر رفعًا وقراءة وحذفًا على كائن تجريبي. ولّد من جديد الروابط الموقّعة التي تهمك.",{"title":172,"body":173},"راقب ثم فكّك لاحقًا فقط","أبقِ MinIO في مكانه متوقفًا أو للقراءة فقط مدة كافية لمرور دورة كاملة من نسخك الاحتياطية ومهامك المجدولة. وجّه نسخك `restic` إلى الهدف من جديد، راجع دليل \u003Ca href=\"\u002Far\u002Fالمدونة\u002Fأتمتة-نسخ-خادمك-vps-الاحتياطية-باستخدام-restic\">النسخ الاحتياطية بـ restic\u003C\u002Fa>.",{"type":175,"title":176,"body":177},"tip","الرجوع إلى الوراء يقتصر على متغير واحد","ما دام MinIO لم يُحذف وكانت المزامنة الأخيرة قد جرت في وضع القراءة فقط، فالرجوع يعني إعادة نقطة الوصول القديمة إلى البيئة وإعادة التشغيل. وإن جرت كتابات على الهدف منذ التحويل فأعدها أولًا إلى المصدر بأمر `rclone copy` في الاتجاه المعاكس (لا `sync` أبدًا لأنه سيحذف) ثم ارجع. لا تمحُ MinIO إلا بعد فترة مراقبة تحددها مسبقًا.",{"type":36,"title":179,"body":180},"استكشاف الأخطاء: الأعراض التي تتكرر","يردّ Garage على نداء غير موقّع برمز 403 مع الرسالة `Garage does not support anonymous access yet`. هذا هو السلوك المتوقع من Garage، وطلب الوصول المجهول لا يزال في متتبع المشروع على أنه ميزة لم تُعطَ أولوية قط. إن كان تطبيقك يقدّم ملفات عامة بلا توقيع فسيلزمك استخدام روابط موقّعة مسبقًا أو وكيل أمام الحاوية.\n\nإن رُفضت الكتابات بأخطاء توقيع بعد التحويل مباشرة فقارن منطقة العميل بمنطقة الهدف (`s3_region` في Garage و`RUSTFS_REGION` في RustFS) وتأكد أن العميل يستخدم العنونة path-style. وإن أبلغ `rclone check` عن كائنات متعددة الأجزاء على أنها مختلفة مع تساوي أحجامها فأعد تشغيله بالخيار `--download`. وإن لم تنسخ إعادةُ تشغيل `mc mirror` كائنًا معدَّلًا فالسبب غياب `--overwrite`. أخيرًا، إن كانت حاوية فارغة في الهدف رغم نجاح المزامنة فتحقق أن المفتاح مُنح `--read --write` على تلك الحاوية في Garage، أو السياسة المناسبة في RustFS.",{"type":36,"title":182,"body":183},"الوثائق الرسمية","أعد قراءة هذه المصادر قبل التنفيذ فالمشاريع تتغير: مستودع github.com\u002Fminio\u002Fminio وملف README فيه لحالة MinIO ورخصته؛ ومستودع github.com\u002Frustfs\u002Frustfs وdocs.rustfs.com (صفحة بروتوكول S3) لـ RustFS؛ وgaragehq.deuxfleurs.fr لصفحة توافق Garage مع S3 ودليل البدء السريع؛ وrclone.org لأمري `sync` و`check` وصفحة واجهة S3؛ ووثائق MinIO عن `mc mirror` و`mc ls` للخيارات المذكورة. لتثبيت الهدف راجع دليلينا عن Garage وRustFS، ولنسخ هذا التخزين احتياطيًا راجع الاستراتيجية الموصوفة في \u003Ca href=\"\u002Far\u002Fالمدونة\u002Frestic-s3-3-2-1-backup-strategy-vps-ar\">مقال 3-2-1 مع restic وS3\u003C\u002Fa>.","خادم VPS ثانٍ لاختبار الهدف قبل إيقاف MinIO","يستضيف خادم VPS ثانٍ بصلاحية root وقرص NVMe الهدفَ أثناء الترحيل: تختبر بجانب الإنتاج ولا توقف MinIO إلا بعد اعتماد أعداد الكائنات. يتم التحويل دون المساس بالجهاز الأصلي.","عرض خوادم VPS السحابية","\u002Fvps-cloud",[189,208,228],{"id":190,"slug":191,"slugs":192,"title":196,"excerpt":197,"readTime":23,"views":18,"isPinned":19,"publishedAt":198,"updatedAt":21,"category":199,"categories":205,"featuredImage":30,"bgImage":31,"posterImage":207,"relatedSolution":30},70,"استضافة-minio-على-خادم-vps",{"fr":193,"en":194,"ar":191,"es":195},"heberger-minio-vps","hosting-minio-on-a-vps","alojar-minio-en-un-vps","استضافة MinIO على خادم VPS","MinIO على خادم VPS: الحاويات والواجهة وTLS والنسخ الاحتياطية. نسخة Community مؤرشفة، فكيف تقرر بين البقاء والانتقال.","2026-04-11T00:00:00+00:00",{"id":200,"name":201,"slug":202,"color":203,"icon":204},6,"قواعد البيانات","bases-de-donnees","bg-teal-500\u002F10 text-teal-400","database",[206],{"id":200,"name":201,"slug":202,"color":203,"icon":204},"\u002Fblog\u002Fcovers\u002Fheberger-minio-vps-poster.svg",{"id":209,"slug":210,"slugs":211,"title":215,"excerpt":216,"readTime":217,"views":218,"isPinned":19,"publishedAt":219,"updatedAt":220,"category":221,"categories":222,"featuredImage":30,"bgImage":31,"posterImage":224,"relatedSolution":225},245,"استضافة-garage-على-خادم-vps-تخزين-كائنات-s3-يملكه-أنت",{"fr":212,"en":213,"ar":210,"es":214},"heberger-garage-s3-vps","host-garage-on-a-vps-s3-object-storage-that-belongs-to-you","alojar-garage-s3-en-un-vps","استضافة ‎Garage على خادم ‎VPS: مساحة تخزين ‎S3 خاصة بك","نشر ‎Garage على ‎VPS للحصول على ‎storage bucket متوافق مع ‎S3 — نسخ احتياطية وملفات تطبيقات ومواقع ثابتة — دون الاعتماد على سحابة خارجية.",8,2,"2026-08-10T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[223],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-garage-s3-vps-poster.svg",{"categorySlug":226,"appSlug":227},"قواعد-البيانات","garage",{"id":229,"slug":230,"slugs":231,"title":235,"excerpt":236,"readTime":237,"views":18,"isPinned":19,"publishedAt":238,"updatedAt":239,"category":240,"categories":241,"featuredImage":30,"bgImage":31,"posterImage":243,"relatedSolution":244},407,"استضافة-rustfs-على-vps-تخزين-كائنات-s3",{"fr":232,"en":233,"ar":230,"es":234},"self-host-rustfs-vps","self-host-rustfs-s3-object-storage-vps","autoalojar-rustfs-en-vps-almacenamiento-objetos-s3","استضافة RustFS على VPS: تخزين كائنات S3 ذاتي الاستضافة","دليل لاستضافة RustFS على VPS: لوحة ويب S3، بيانات اعتماد مُولَّدة، وحدات تخزين دائمة — بديل لـ MinIO وGarage.",5,"2026-10-01T00:00:00+00:00","2026-10-02T21:10:18+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[242],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fself-host-rustfs-vps-poster.svg",{"categorySlug":226,"appSlug":245},"rustfs",1792799242314]