نسخ مستودع
هذه هي الميزة الجوهرية: نسخ بيئة إنتاجية كاملة (التطبيق وقاعدة البيانات وملفات الإعداد) في ثوانٍ. بأي حجم. دون قرص إضافي. انسخ كما تشاء.
الشعار: انسخ الإنتاج، دون أي خسارة.
شاهد الدرس التعليمي
جهّز شيئًا للمخاطرة به
أولًا، أضف ملفًا للتطبيق الجاري حتى تتمكن من إثبات عزل النسخة. افتح المستودع في VS Code:
rdc vscode connect -m my-server -r my-app
داخل المستودع، أنشئ ملف علامة:
time echo "Hello from production" > index.html
الآن انسخه.
النسخ
time rdc repo fork --parent my-app -m my-server --tag experiment --up
أمر واحد. نسخ كل شيء (التطبيق وقاعدة البيانات وملفات الإعداد) وحدث ذلك في ثوانٍ. شغّله مرة أخرى وتحصل على نسخة مستقلة أخرى.
لماذا هو سريع جدًا؟
تخيّل مشاركة رابط مجلد. الرابط هو نفسه سواء كان المجلد صغيرًا أو ضخمًا. المجلد ثقيل، الرابط خفيف.
النسخ يعمل بالطريقة نفسها. 1 جيجابايت، 100 جيجابايت، 1 تيرابايت. نفس الوقت، في كل مرة.
ما هو مشترك، وما هو لك
فكّر في المستودع الأصل كالشمس. لا يمكنك الإمساك بالشمس، لكن يمكنك الإمساك بمرآة تعكسها. تلك المرآة هي نسختك. ارسم على المرآة ورسوماتك ملكك. تبقى الشمس كما هي، مهما كان عدد المرايا التي تواجهها.
لا يمكنك الإمساك بالشمس، لكن يمكنك رؤيتها في مرآة.
ماذا لو تغيّر الأصل لاحقًا؟
الآن فكّر في نهر. الماء يتدفق باستمرار. كل لحظة مختلفة عن التي قبلها. عندما تنسخ، تلتقط صورة للنهر مجمّدة في تلك اللحظة. النهر يواصل تدفقه. صورتك لا تتغير.
إذا تغيّر المستودع الأصل لاحقًا، تبقى نسختك في مكانها.
لا يمكنك الإمساك بنهر، لكن يمكنك الإمساك به في صورة.
استخدام القرص يبقى ثابتًا
لهذا السبب لا ينفجر قرصك. خمس نسخ من مستودع 100 جيجابايت؟ لا تزال حوالي 100 جيجابايت إجمالًا. تدفع قرصًا فقط لما تغيّره في كل نسخة.
انسخ خمس مرات إذا أردت. قرصك لن يلاحظ حتى.
ما لا ترثه النسخ: الأسرار
هناك شيء واحد لا تتبعه النسخة عن قصد: الأسرار. تبدأ النسخة بدون مفاتيح API، دون كلمات مرور قواعد البيانات، دون رموز Stripe. لهذا السبب يعمل شعار “انسخ الإنتاج، دون أي خسارة” بالفعل. لا يمكن لصندوق الرمل الخاص بك محاسبة عملاء حقيقيين لأنه لا يستطيع التظاهر بأنه أنت. سنُعدّ ذلك بشكل صحيح في درس إدارة الأسرار.
التحقق من العزل
أدرج المستودعين جنبًا إلى جنب:
time rdc repo list -m my-server
ستجد my-app وmy-app:experiment يعملان بالتزامن.
في المستودع الأصلي، تحقق مما يعمل:
time docker ps
لاحظ وقت التشغيل. هذه هي الحاويات الأصلية. الآن انتقل إلى النسخة:
rdc vscode connect -m my-server -r my-app:experiment
time docker ps
نفس الصور، لكن وقت التشغيل جديد. بدأت هذه عندما بدأت النسخة.
اجعل الفرق أكثر وضوحًا. أضف حاوية فقط إلى النسخة:
time docker run --rm -it -d nginx
time docker ps
Nginx يعمل، لكن فقط داخل هذه النسخة.
جرّب شيئًا تدميريًا:
time rm index.html
اختفى هنا. الآن ارجع إلى الأصلي:
rdc vscode connect -m my-server -r my-app
time docker ps
لا nginx. بقيت حاويات النسخة في النسخة. وindex.html لا يزال هنا سليمًا. لم يعلم الأصلي بأي شيء حدث. نفس الصور، محركات Docker منفصلة، أنظمة ملفات منفصلة.
التنظيف
عند الانتهاء، احذف النسخة فقط:
time rdc repo delete --name my-app:experiment -m my-server
يبقى الأصل كما كان تمامًا. انسخ، وجرّب، وكسّر الأشياء، واحذف. دون أي خطر.
التالي: إدارة الأسرار.