[{"data":1,"prerenderedAt":56},["ShallowReactive",2],{"seo-verification":3,"blog-heberger-garage-s3-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":21,"featuredImage":23,"bgImage":24,"posterImage":25,"relatedSolution":26,"intro":29,"sections":30,"ctaTitle":51,"ctaBody":52,"ctaButton":53,"ctaUrl":54,"relatedPosts":55},245,"heberger-garage-s3-vps","استضافة Garage على خادم VPS: تخزين كائنات S3 يملكه أنت","Garage مخزن كائنات متوافق مع S3 مكتوب بلغة Rust، خفيف بما يكفي ليعمل على خادم صغير. إليك كيفية نشره، وما يجيده، وما لا يفعله.",6,0,false,"2026-08-10T00:00:00+00:00",{"id":16,"name":17,"slug":18,"color":19,"icon":20},7,"الاستضافة الذاتية","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[22],{"id":16,"name":17,"slug":18,"color":19,"icon":20},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fheberger-garage-s3-vps-poster.svg",{"categorySlug":27,"appSlug":28},"bases-de-donnees","garage","تريد نقطة وصول S3 خاصة بك — لنسخ restic الاحتياطية، أو ملفات تطبيقك، أو مصدر موقع ساكن — دون فتح حساب لدى مزوّد سحابي. يفعل Garage، الذي طوّره تجمّع Deuxfleurs، هذا بالضبط: ملف تنفيذي واحد بلغة Rust يعرض واجهة S3، ومقتصد بما يكفي ليتعايش مع بقية خادمك. يبدأ هذا الدليل من الصفر وينتهي عند أول ملف تودعه.",[31,35,38,42,45,48],{"type":32,"title":33,"body":34},"text","ما هو Garage، وما ليس هو","Garage مخزن كائنات متوافق مع S3 صُمّم للنشرات الصغيرة الذاتية الاستضافة، وربما الموزّعة على مواقع متعدّدة. يتّسع في حاوية واحدة، ولا يحتاج خادم قواعد بيانات إلى جانبه، وفي النشر أحادي العقدة يستهلك بضعة ميغابايتات من الذاكرة في وضع السكون.\n\nوما ليس هو ينبغي قوله فوراً: **لا يملك Garage لوحة تحكّم عبر المتصفح**. تمرّ الإدارة عبر أداة سطر الأوامر garage وعبر واجهة إدارة HTTP. هذا خيار تصميمي لا ميزة منسية — تبقى الخدمة صغيرة وسطح تشغيلها ضيّقاً. وتوفّر مشاريع مجتمعية واجهة في المتصفح فوق واجهة الإدارة إن أردت.\n\nوإن كنت تقرأ هذا لأن MinIO أزالت لوحتها من الإصدار المجتمعي سنة 2025، ثم توقّفت عن نشر صور Docker المجتمعية أصلاً، فالجواب الصادق أن Garage لن يعيد إليك تلك اللوحة. ما يمنحك إياه بدلاً منها مشروع لا تحجز رخصته AGPLv3 أي ميزة لإصدار مدفوع.",{"type":32,"title":36,"body":37},"تهيئة الخادم","يعمل Garage في حاوية. على خادم Debian أو Ubuntu محدَّث، كل ما تحتاجه هو Docker وإضافة Compose:\n\n```bash\ncurl -fsSL https:\u002F\u002Fget.docker.com | sh\n```\n\nأما الحجم، فـ Garage نفسه مقتصد: ما يحدّد الحاجة هو **حجم البيانات** التي تخزّنها لا الخدمة ذاتها. يكفي خادم من الفئة الأولى لتشغيل الخدمة؛ احسب القرص بحسب ما تنوي إيداعه، وتذكّر أن العقدة الواحدة تحفظ **نسخة واحدة** من كائناتك.",{"type":39,"title":40,"body":41},"code","الإعداد الأدنى","يقرأ Garage ملف garage.toml. للعقدة الواحدة يتّسع الجوهري في أسطر قليلة — لاحظ replication_factor = 1، الذي يقول صراحةً إنه لا يوجد نسخ متماثل:\n\n```toml\nmetadata_dir = \"\u002Fvar\u002Flib\u002Fgarage\u002Fmeta\"\ndata_dir = \"\u002Fvar\u002Flib\u002Fgarage\u002Fdata\"\ndb_engine = \"sqlite\"\nreplication_factor = 1\n\nrpc_bind_addr = \"[::]:3901\"\nrpc_public_addr = \"127.0.0.1:3901\"\nrpc_secret = \"\u003C64 حرفاً ست عشرياً>\"\n\n[s3_api]\ns3_region = \"garage\"\napi_bind_addr = \"[::]:3900\"\nroot_domain = \".s3.garage.localhost\"\n\n[admin]\napi_bind_addr = \"[::]:3903\"\nadmin_token = \"\u003Cرمز الإدارة>\"\n```\n\nيجب أن يكون rpc_secret بطول 32 بايت، أي 64 حرفاً ست عشرياً: openssl rand -hex 32.",{"type":39,"title":43,"body":44},"التشغيل والحصول على بيانات اعتماد S3","منذ الإصدار 2.3، يستطيع Garage إنشاء عنقود من عقدة واحدة وإنشاء أول حاوية تخزين بنفسه، انطلاقاً من متغيّرات البيئة. وهذا ما يلغي التسلسل اليدوي layout assign ثم layout apply ثم bucket create ثم key create:\n\n```yaml\nservices:\n  garage:\n    image: dxflrs\u002Fgarage:v2.3.0\n    restart: unless-stopped\n    command: [\"\u002Fgarage\", \"-c\", \"\u002Fetc\u002Fgarage\u002Fgarage.toml\", \"server\", \"--single-node\", \"--default-bucket\"]\n    environment:\n      GARAGE_DEFAULT_BUCKET: my-bucket\n      GARAGE_DEFAULT_ACCESS_KEY: GK...\n      GARAGE_DEFAULT_SECRET_KEY: ...\n    ports:\n      - \"127.0.0.1:3900:3900\"\n    volumes:\n      - .\u002Fconfig:\u002Fetc\u002Fgarage\n      - garage-meta:\u002Fvar\u002Flib\u002Fgarage\u002Fmeta\n      - garage-data:\u002Fvar\u002Flib\u002Fgarage\u002Fdata\n```\n\nيستحق فخّان أن يُسمّيا، لأن كلّاً منهما يكلّف نصف ساعة. الصورة **distroless**: لا تملك صدفة، ونقطة دخولها فارغة — لذا يجب أن تسمّي الأوامرُ الملفَّ التنفيذي بمساره المطلق (\u002Fgarage) وملفَّ الإعداد (-c)، وإلا دار الحاوية في حلقة على رسالة No such file or directory. كما يجب أن يأخذ مفتاح وصول S3 الشكل الذي يتوقّعه Garage: البادئة GK متبوعةً بـ 30 حرفاً ست عشرياً.",{"type":32,"title":46,"body":47},"التحقّق من أنه يعمل","يجب أن يردّ الاستدعاء المجهول على واجهة S3 برمز **403** ورسالة Garage does not support anonymous access yet. وهذه علامة جيدة: الخدمة حيّة وترفض طلباً غير موقّع.\n\n```bash\ncurl -s -o \u002Fdev\u002Fnull -w '%{http_code}\\n' http:\u002F\u002F127.0.0.1:3900\u002F\n# 403 ← الواجهة تستجيب\n```\n\nأما واجهة الإدارة فتردّ برمز 200 مع الرمز:\n\n```bash\ncurl -H \"Authorization: Bearer $ADMIN_TOKEN\" http:\u002F\u002F127.0.0.1:3903\u002Fv2\u002FListBuckets\n```\n\nمن هنا يعمل أي عميل S3: aws --endpoint-url أو mc أو rclone، أو restic مباشرةً لنسخك الاحتياطية.",{"type":32,"title":49,"body":50},"ما ينبغي تذكّره","**العقدة الواحدة ليست تكراراً للبيانات.** يستطيع Garage النسخ المتماثل بين أجهزة عدّة، وربما بين مواقع مختلفة — وهذا سبب وجوده أصلاً. لكن ما دمت تملك عقدة واحدة، فكائناتك موجودة بنسخة واحدة على قرص واحد. حافظ على انضباط النسخ الاحتياطي الذي كنت ستعتمده على أي حال.\n\n**اعرض الواجهة خلف نطاق وتشفير TLS** لا على عنوان IP عارٍ: انشر المنفذ على الواجهة المحلية ودع nginx يتولّى الوساطة والشهادة. وهذا ما يفعله التنصيب بنقرة واحدة من المتجر.\n\n**تشمل توافقية S3 السطح الشائع** لا كل امتداد خاص بـ AWS. تعمل العملاء وحزم التطوير وأدوات النسخ الاحتياطي القياسية دون تعديل؛ وإن كنت تعتمد على استدعاء غير معتاد، فتحقّق منه في وثائق المشروع قبل الترحيل.","Garage بنقرة واحدة على خادمك","يثبّت متجر ServOrbit تطبيق Garage، وينشئ حاوية التخزين وبيانات اعتماد S3 عند أول إقلاع. لا يبقى إلا أن توجّه عميلك إليه.","نشر Garage","\u002Fmarketplace\u002Fbases-de-donnees\u002Fgarage",[],1786455117278]