ما الذي تستبدله فعلياً، وما الذي لا تستبدله
إن Nextcloud، بمعزل عن التسويق، تطبيق PHP يحتفظ بقاعدة بيانات لبيانات الملفات الوصفية ودليل لمحتويات الملفات، ويتحدث من البروتوكولات ما يكفي لتعامل الأجهزة العادية معه كحساب سحابي عادي. هذا الوصف يقلل من شأن مقدار ما يغطيه بهدوء من حياتك الرقمية. مزامنة الملفات هي الجزء الظاهر، وهي الجزء الذي يثبِّت الناس التطبيق من أجله. أما الأجزاء التي يتضح أنها مهمة بعد ستة أشهر فهي التي لا يعرضها أحد: التقويمات وجهات الاتصال عبر CalDAV وCardDAV، بحيث تتوقف تطبيقات هاتفك المدمجة عن التواصل مع مزوِّد بريد؛ ومكتبة صور برفع تلقائي من الكاميرا، وهي ما يُخرج الأسرة فعلياً من Google Photos؛ والملاحظات والمهام والإشارات المرجعية التي لم تعد مبعثرة على أربعة حسابات لا تتحكم بها.
يستحق الأمر توخي الدقة في هذه المقارنة، لأن التأطير المعتاد لها خاطئ. لا أحد يستضيف بنفسه توفيراً للمال على الغيغابايتات — فخطة استهلاكية بسعة تيرابايتين تكلف تقريباً ما تكلفه VPS من الفئة المتوسطة، وتأتي دون أي عمل على الإطلاق. أنت تستضيف بنفسك لأن البديل هو علاقة يحتفظ فيها الطرف الآخر بالبيانات، ويضع الشروط، ويفحص المحتويات للتحقق من الامتثال للسياسات، ويعالج المطالب القانونية بشأنك دون أي التزام بإخبارك أولاً. إزالة ذلك الطرف الآخر هي المنتج بأكمله. كل شيء آخر أثر جانبي، بعضه ممتع وبعضه مسؤوليتك الجديدة.
ما لا تحصل عليه، وما لا ينبغي أن تتوقعه، هو الأرضية التشغيلية غير المرئية التي يوفرها مزوِّد سحابي عملاق مجاناً. لا يوجد تكرار متعدد المناطق ما لم تبنه بنفسك. لا توجد شبكة حافة تجعل تنزيلاً كبيراً سريعاً من الجهة الأخرى من الكوكب. لا يوجد طابور دعم يجد ملفك عندما تحذفه وتُفرغ سلة المهملات في العصر نفسه. حين يمتلئ القرص في الثالثة فجراً، ستبدأ عملاء المزامنة على خمسة أجهزة بإظهار أيقونات حمراء، والشخص الذي يُصلح ذلك هو أنت. هذا ليس حجة ضد القيام بذلك — إنه توصيف للمهمة التي تقبلها.
آخر ما ينبغي أن تكون واضحاً بشأنه هو وتيرة التحديثات. تصدر Nextcloud إصدارات رئيسية عدة مرات في السنة، ويجب تطبيق الترقيات إصداراً رئيسياً واحداً في كل مرة، وتتأخر أحياناً تطبيقات الطرف الثالث التي اعتمدت عليها إصداراً كاملاً عن الركب. هذا ليس عملاً صعباً، ويجعله برنامج التحديث المدمج مع لقطة مسبقة مهمة تستغرق خمس عشرة دقيقة، لكنه عمل متكرر مرتبط بموعد نهائي: نسخة متأخرة بثلاثة إصدارات رئيسية هي نسخة لا يمكنك ترقيتها في خطوة واحدة، ولا يمكن كشفها بأمان أمام الإنترنت كذلك.
الجهاز: تحديد الحجم لخادم ملفات، لا لموقع ويب
تحدد معظم أدلة الاستضافة الذاتية حجم الخادم بحسب التطبيق. أما في هذه الحالة، فالتطبيق شبه غير ذي صلة، والمكتبة هي كل شيء. تتسع عملية PHP، وخادم الويب، وقاعدة البيانات، والذاكرة المخبأة معاً براحة في غيغابايت أو اثنين من ذاكرة RAM تحت حِمل منزلي؛ وما يحدد خطتك هو عدد البايتات التي تضعها على القرص وعدد الملفات المنفردة التي تنقسم إليها تلك البايتات، وهما قيدان منفصلان يفشلان بطريقتين مختلفتين.
ابدأ بالجرد الصادق بدلاً من الجرد الطموح. المستندات وجداول البيانات ضجيج — فعقد كامل منها نادراً ما يتجاوز عشرة غيغابايتات. أما ألبوم صور الكاميرا فليس ضجيجاً: ينتج الهاتف الحديث ما بين خمسة عشر وأربعين غيغابايت سنوياً لكل شخص عند احتساب الفيديو، وتفعيل الرفع التلقائي لأسرة من أربعة أفراد التزام بنحو مئة غيغابايت سنوياً تصل سواء فكرت بها أم لا. ثم أضف نفقات إضافية فوق المكتبة الخام: معاينات مولَّدة للصور والفيديو، وإصدارات ملفات محفوظة للمستندات المُحرَّرة، وسلة مهملات تحتفظ افتراضياً بالملفات المحذوفة حتى ثلاثين يوماً وتُحتسب على القرص نفسه. رقم عملي يساوي المكتبة زائد عشرين بالمئة واقعي، وهذه العشرون بالمئة هي الجزء الذي ينساه الناس حتى يبلغ القرص خمسة وتسعين بالمئة.
الذاكرة هي القيد الثاني وإرضاؤها أرخص بكثير. أربعة غيغابايتات تُشغِّل نسخة بمستخدم واحد دون أي مشاكل. وثمانية هي الرقم المريح لأسرة أو فريق صغير، لأنها تتيح لك منح PHP-FPM عمالاً كافين لاستيعاب عدة عملاء مزامنة يستيقظون في آن واحد، ومنح قاعدة البيانات تجمع ذاكرة مؤقتة حقيقياً، مع ترك مساحة لذاكرة الصفحات المخبأة لنظام التشغيل كي تُبقي البيانات الوصفية النشطة في الذاكرة. لا يتغير الرقم بشكل جوهري إلا إذا أضفت Nextcloud Office، الذي يُشغِّل محرك تحويل مستندات كاملاً في حاوية خاصة به ويحتاج غيغابايتين إلى أربعة لنفسه قبل أن يفتح أحد جدول بيانات.
بالكاد يُلاحَظ استخدام المعالج في الحالة المستقرة، ثم يصبح مهماً بشدة لمدة أسبوع تقريباً. توليد المعاينات لمكتبة صور موجودة هو أثقل ما سيقوم به هذا الخادم — إذ يُفكَّك ترميز كل صورة ويُعاد ترميزها بأحجام عدة — وعلى خطة صغيرة قد يستغرق هذا التمرير الأولي أياماً. بعد ذلك، يصبح تقديم الملفات شبه مجاني: فالعمل عبارة عن إدخال وإخراج، وثرثرة بروتوكول المزامنة تكلف في الرحلات ذهاباً وإياباً أكثر مما تكلف في دورات المعالج. اشترِ أنوية للاستيراد، لا للنسخة العاملة، وإذا كان الاستيراد هو السبب الوحيد الذي يدفعك لرفع الحجم، فشغِّله على خطة أكبر لمدة شهر ثم عد إلى الأصغر. الفوترة الشهرية دون عقد هي بالضبط ما يجعل هذه المناورة رخيصة.
| شكل النسخة | المستخدمون | المكتبة | RAM | الخطة المناسبة |
|---|---|---|---|---|
| مستندات، جهات اتصال، تقويمات، صور خفيفة | 1–3 | أقل من 40 GB | 4 GB | Starter (60 GB) |
| أسرة مع رفع صور الهاتف | 3–6 | 80–180 GB | 8 GB | Growth (120 GB) / Business (240 GB) |
| فريق صغير، مع تفعيل الإصدارات والمعاينات | 5–15 | 200–450 GB | 16 GB | Business (240 GB) / Pro (400 GB) |
| إضافة Nextcloud Office للتحرير المباشر | 5–15 | دون تغيير | +2–4 GB | Pro (400 GB) / Scale (640 GB) |
| أرشيف وسائط يُقاس بالتيرابايت | أي عدد | 1 TB+ | 16 GB+ | مخصص — لا تتجاوز أي فئة VPS 640 GB |
ذلك الصف الأخير يستحق أن تقرأه مرتين، لأنه الموضع الذي يخطئ فيه الناس في تقدير شكل الجهاز. تتفوق VPS في كونها محور مزامنة ومشاركة لمجموعة العمل التي يتعامل معها فريق من البشر. لكنها وعاء رديء لأرشيف وسائط: أعلى فئة نبيعها تبلغ ستمئة وأربعين غيغابايت من NVMe المحلي، وبمجرد أن تُقاس مكتبتك بالتيرابايت يصبح الجواب الصحيح هو عتاد مخصص، حيث يمنحك زوج من الأقراص المرآتية تيرابايت أو تيرابايتين مع تكرار احتياطي تحتهما. اتخاذ هذا القرار قبل أن تبدأ أقل إيلاماً بكثير من نقل نسخة ممتلئة بالبيانات بعد أن ينفد لديك المكان.
قرار قاعدة البيانات الذي تتخذه مرة واحدة
سيعرض عليك برنامج التثبيت SQLite وسيعمل. استخدمه لعرض توضيحي تنوي حذفه، ولا شيء آخر. يُسلسل SQLite الكتابات عبر قاعدة البيانات كلها، وهذا التطبيق يكتب باستمرار — كل استطلاع من عميل مزامنة، وكل ملف مفحوص، وكل إدخال نشاط — فبمجرد أن يصبح عميلان نشطين تصطف الطلبات خلف بعضها وتكتسب الواجهة تأخراً لا يزيله أي قدر من الضبط. تقول المتطلبات الرسمية الشيء نفسه، بأدب.
كل من MariaDB وPostgreSQL خيار من الدرجة الأولى، والاختيار بينهما أقرب إلى مسألة تفضيل شخصي. MariaDB هو ما تُشغِّله معظم عمليات النشر وما تفترضه معظم إجابات المجتمع، وهذا يساوي شيئاً حين تبحث عن رسالة خطأ في منتصف الليل؛ ويحتاج إلى إنشاء قاعدة البيانات بترميز UTF-8 رباعي البايت كي لا تُقتطع الرموز التعبيرية في أسماء الملفات صفاً، ويريد ضبط عزل معاملاته على read-committed، وهو ما يذكره التوثيق بوضوح وما يتجاهله الناس. أما PostgreSQL فهو أفضل بهدوء تحت التزامن ويحتاج إقناعاً أقل، على حساب مجموعة أصغر قليلاً من إجابات النسخ واللصق الجاهزة. كلاهما صحيح؛ وتشغيل أياً كان الذي تعرف بالفعل كيفية نسخه احتياطياً أصح من كليهما.
ضعها على الجهاز نفسه واتصل عبر مقبس unix. هذا أحد المواضع القليلة التي تكون فيها البنية الواضحة هي الصحيحة أيضاً: نسخة واحدة لا تكسب شيئاً من قاعدة بيانات على مضيف آخر، وتخسر رحلة شبكة ذهاباً وإياباً في كل واحد من الاستعلامات الصغيرة الكثيرة التي يجريها التطبيق. اربط قاعدة البيانات بواجهة loopback، وليس أبداً بالواجهة العامة — تشرح قائمة التحصين لماذا تُعد قاعدة البيانات المُصغية الطريقة الأكثر شيوعاً على الإطلاق لانتزاع خادم صغير من صاحبه.
الأمر الذي يجب فهمه بشأن قاعدة البيانات هذه أنها صغيرة بالبايتات وهائلة بالعواقب. جدولها المركزي يحتفظ بصف واحد لكل ملف لكل مستخدم — مئة ألف ملف عبر أربعة حسابات هي بضع مئات آلاف من الصفوف، وهو لا شيء بالنسبة لمحرك حديث، وبضع مئات من الميغابايتات على القرص. لكن ذلك الجدول هو الشيء الوحيد الذي يعرف بنية بياناتك. افقد قاعدة البيانات واحتفظ بالملفات وستحصل على شجرة مجلدات بلا مشاركات، ولا إصدارات، ولا تعليقات، ولا وسوم، ولا حالة مزامنة. ستعيد إعادة الفحص من سطر الأوامر بناء شجرة قابلة للاستخدام من ذلك، وهو ارتياح حقيقي أول مرة تحتاجه، لكنه لن يُعيد رابط مشاركة واحداً ولا سجل إصدارات. انسخ الاثنين احتياطياً معاً، دائماً، وعامل نسخة احتياطية لأحدهما دون الآخر معاملة انعدام النسخة الاحتياطية كلياً.
لماذا يبدو التثبيت الافتراضي بطيئاً — والإعدادات الأربعة التي تُصلح ذلك
تُوصف النسخة المُثبَّتة حديثاً عادة بالبطء، والذين يصفونها ليسوا مخطئين. المشكلة ليست في العتاد وليست في PHP: بل في أربعة إعدادات افتراضية اختيرت لأقصى توافق مع الاستضافة المشتركة لا لجهاز تتحكم فيه. تغييرها يستغرق عشرين دقيقة وينتج عنه أكبر تحسّن ملموس على الإطلاق يمكن لأي أحد أن يُحدثه في هذا التثبيت.
الأول هو المهام الخلفية. تعمل هذه افتراضياً في وضع AJAX، ما يعني أن الطابور يتقدم فقط عندما يُحمِّل إنسان صفحة في متصفح — فلا تُولَّد المعاينات، ولا تنتهي صلاحية سلة المهملات، ولا تُحدَّث المشاركات الاتحادية، ولا تُبنى فهارس البحث حتى يزور أحدهم الموقع مصادفة. حوِّلها إلى إدخال cron في النظام يُشغِّل منفذ المهام كل خمس دقائق باسم مستخدم خادم الويب، تماماً كما يصف توثيق المهام الخلفية. نصف الشكاوى الغامضة من أن Nextcloud "لا يفعل شيئاً" مصدرها هذا الإعداد.
الثاني هو الذاكرة المخبأة وقفل الملفات. دون ذاكرة مخبأة مشتركة، يعيد التطبيق قراءة الإعدادات والبيانات الوصفية للتطبيقات باستمرار، ودون قفل ملفات تفاعلي مدعوم بـRedis يعود إلى قفل الصفوف في قاعدة البيانات، وهو بالضبط الموضع الذي لا تريد فيه تنازعاً. ثبِّت Redis، واجعله يُصغي على مقبس unix بدلاً من منفذ TCP كي لا يصله شيء عبر الشبكة، ووجِّه إليه كلاً من الذاكرة المخبأة الموزَّعة وواجهة قفل الملفات الخلفية مع ترك الذاكرة المخبأة المحلية السريعة على APCu. يمنحك مرجع إعداد الذاكرة المخبأة الكتلة بالضبط.
الثالث هو ذاكرة رمز التشغيل المخبأة لـPHP. حُددت أحجام الذاكرة المؤقتة الافتراضية لتطبيق صغير، وهذا ليس كذلك — ستخبرك صفحة النظرة العامة للإدارة صراحة أن ذاكرة interned-strings المؤقتة شبه ممتلئة، والذاكرة المؤقتة الممتلئة تعني أن المفسِّر يقوم بعمل يمكن تجنبه في كل طلب. رفع ذاكرة opcache وذاكرة interned-strings المؤقتة، ورفع الحد الأقصى للملفات المُسرَّعة إلى ما فوق الافتراضي بكثير، يكلف بضع مئات من ميغابايتات RAM ويُشعر به فوراً في كل تحميل صفحة. الرابع هو مدير عمليات PHP-FPM: عدد العمليات الفرعية الافتراضي مضبوط لجهاز بذاكرة أقل بكثير من ذاكرتك، وستصطف أسرة لديها عدة عملاء مزامنة خلفه. حدِّد عدد العمال بناءً على ذاكرة RAM الفعلية لديك وبصمة كل عامل، وهذا هو الحساب الوحيد في هذا القسم الذي يستحق القيام به على الورق.
يستحق فخ واحد ذو صلة فقرة خاصة به لأنه ينتج عرضاً محيراً. رفع ملف كبير عبر واجهة الويب يفشل، بينما يُرفع الملف نفسه بلا مشاكل من عميل سطح المكتب. هذه ليست علة: يقسِّم عميل سطح المكتب عمليات الرفع إلى أجزاء ويعيد تجميعها من جانب الخادم، فينزلق تحت كل حد، بينما يرسل المتصفح طلباً كبيراً واحداً يجب أن ينجو من حدود الرفع وحجم POST في PHP، والحد الأقصى لحجم جسم الطلب في خادم الويب نفسه، وأي مهلة زمنية بينهما. إن كان المتصفح هو المكان الذي تدخل منه الملفات الكبيرة إلى نسختك، فيجب رفع كل تلك الأرقام معاً — رفع واحد منها دون البقية ينقل فقط أي مكوّن سيرفض الطلب.
ثلاثة أشياء مختلفة تُسمى تشفيراً، وتحمي من ثلاثة أطراف مختلفين
هذا هو القسم الذي تخطئ فيه معظم عمليات النشر ذاتية الاستضافة، وتخطئ بطريقة مفهومة: تتشارك ثلاث ميزات غير مترابطة كلمة واحدة، وتعرضها واجهة الإدارة كلها، ويبدو تفعيل المزيد أكثر أماناً من تفعيل الأقل. لكن الأمر ليس كذلك. كل واحدة منها تدافع ضد خصم محدد، وكل واحدة تكلف شيئاً، وواحدة من الثلاث ضارة فعلياً حين تُطبَّق على الحالة التي يطبقها الناس عليها عادة.
تشفير القرص الكامل هو الطبقة التي تقع تحت كل شيء. يحمي البيانات على جهاز مُطفأ — قرص سُحب من رف، أو محرك أُخرج من الخدمة، أو نسخة مأخوذة من تخزين بارد. لا يفعل شيئاً على الإطلاق أثناء تشغيل الخادم، لأن المجلد مفتوح ويقرأه نظام التشغيل كملفات عادية. إنه رخيص، وغير مرئي، وليس له أي أثر على أي ميزة من ميزات Nextcloud، ولا يوجد سبب وجيه لعدم تفعيله. ما يتطلبه هو خطة فتح عن بُعد، لأن الخادم الذي يُعاد تشغيله في الرابعة فجراً يبقى معطلاً حتى يكتب أحدهم عبارة مرور؛ يغطي دليل تشفير القرص الكامل ترتيب SSH عبر initramfs الذي يجعل ذلك ممكن النجاة منه.
التشفير من جانب الخادم هو الذي يستحق أشد التفكير. يُشفِّر محتويات الملفات بمفاتيح تعيش على الخادم نفسه، ويديرها التطبيق نفسه، والغرض الفعلي من تصميمه هو حماية بيانات تضعها على تخزين مملوك لشخص آخر — مخزن كائنات، أو نقطة تركيب خارجية مستأجرة، أو واجهة خلفية من طرف ثالث. عند تطبيقه على التخزين الأساسي المحلي على جهاز تتحكم فيه أصلاً، فإنه يحميك من القليل جداً، لأن كل من يستطيع قراءة الملفات يستطيع قراءة المفاتيح؛ ويكلفك نحو ثلث مساحة تخزين إضافية، ويُعقِّد كل سيناريو استعادة، ويُعطِّل ميزات تحتاج إلى قراءة محتويات الملفات. توثيق التشفير صريح على نحو غير معتاد بشأن هذه المقايضة. إن كان تخزينك NVMe محلياً على خادم تستأجره وحدك، فاتركه معطلاً واستخدم طبقة القرص بدلاً منه.
التشفير التام بين الطرفين هو الشيء الحقيقي، وهو الوحيد من الثلاثة الذي يحميك من الخادم نفسه. تُشفَّر الملفات في مجلد تام التشفير بين الطرفين من جانب العميل قبل أن تغادر الجهاز، ويخزِّن الخادم نصاً مشفراً لا يستطيع فتحه — وهذا بالضبط ما تريده للمجموعة الفرعية الصغيرة من المواد التي يجب ألا يُنتج فيها إرغام المضيف بيانات قابلة للقراءة. الثمن باهظ وغير قابل للتفاوض: تلك المجلدات ليس لها واجهة ويب، ولا بحث من جانب الخادم، ولا صور مصغرة، ولا مشاركة عامة، ولا استعادة إن فقدت العبارة التذكيرية التي تفتحها. هذا ليس قصوراً يجب الالتفاف حوله هندسياً، بل هو تعريف الضمان نفسه. استخدمه للمجلد الذي يحتاجه فعلاً واترك مكتبة صور العائلة خارجه، حيث تعمل المعاينات وتكون الحياة سهلة.
| الطبقة | تحمي من | عديمة الجدوى ضد | ما تكلفه |
|---|---|---|---|
| القرص الكامل (LUKS) | قرص أُزيل أو صُودر أو نُسخ أثناء إطفائه | أي شيء على الإطلاق أثناء تشغيل الجهاز | خطوة فتح عن بُعد عند كل إعادة تشغيل |
| التشفير من جانب الخادم | مشغِّل تخزين خارجي أو تخزين كائنات تستأجره | أي شخص لديه صلاحية root على هذا الخادم — المفاتيح هنا أيضاً | ~35% تخزين إضافي، واستعادة أصعب، وميزات تقرأ محتويات الملفات |
| التشفير التام بين الطرفين | الخادم نفسه، ومضيفه، وأي طرف يُرغم أياً منهما | عميل مخترَق — فهناك يعيش النص الصريح | لا وصول عبر الويب، ولا بحث، ولا معاينات، ولا مشاركة، ولا استعادة دون العبارة التذكيرية |
| TLS أثناء النقل | أي طرف يراقب الشبكة بين العميل والخادم | أي شيء مخزَّن في أي من الطرفين | لا شيء. إنه إلزامي؛ ترفض عملاء الهاتف المحمول بروتوكول HTTP العادي |
العملاء، والأجزاء التي يلمسها الآخرون فعلياً
نجاح هذا المشروع يُحدده كلياً تقريباً أناس لن يسجلوا الدخول إلى الخادم أبداً، ويتشكل حكمهم في الأسبوع الأول بثلاث قطع من البرمجيات. عميل سطح المكتب هو الأهم. اضبطه على الملفات الافتراضية بدلاً من نسخة محلية كاملة — تظهر الملفات في مدير الملفات، ولا تشغل مساحة حتى تُفتح، وتُنزَّل عند الطلب — لأن هذا ما يجعل مكتبة بحجم مئتي غيغابايت قابلة للاستخدام على حاسوب محمول بقرص صغير، وهو السلوك الذي يتوقعه الناس أصلاً من العملاء التجاريين.
يحمل تطبيق الهاتف الميزة التي تُحوِّل المتشككين: الرفع التلقائي لألبوم صور الكاميرا. فعِّلها لأفراد أسرتك، ووجِّهها إلى مجلد خاص بكل مستخدم، وخلال شهر ينتهي الجدال حول ترك Google Photos. وهي أيضاً، وللسبب نفسه بالضبط، الشيء الذي سيملأ قرصك وفق جدول زمني لم تختره، وهذا سبب تركيز قسم تحديد الحجم أعلاه على الكاميرات لا على المستندات. اضبط حصة لكل مستخدم منذ البداية — ليس لأنك تنوي فرضها، بل لأن الحصة تُحوِّل نفاد القرص بصمت إلى رسالة واضحة على هاتف أحدهم.
التقويمات وجهات الاتصال هي الفوز الهادئ والشيء الأكثر شيوعاً الذي يُترك نصف مُعد. تتحدث Nextcloud بروتوكولي CalDAV وCardDAV، اللذين يدعمهما كل هاتف وحاسوب أصلياً، فلا يحتاج أحد إلى تطبيق جديد — لكن الاكتشاف يعتمد على زوج من التحويلات عند /.well-known/caldav و/.well-known/carddav يعيشان في إعداد خادم الويب لديك لا في التطبيق. أخطئ فيهما ويفشل إعداد الحساب برسالة خطأ غير مفيدة على iOS بينما يعمل جيداً على Android. تُشير صفحة النظرة العامة للإدارة إلى هذا صراحة، وهو سبب إضافي لتفريغ تلك الصفحة قبل وصول أي أحد آخر.
ملاحظتان أصغر توفران وقتاً حقيقياً. تركيب WebDAV مدعوم ومريح فعلاً للوصول العرضي من جهاز لا تريد تثبيت أي شيء عليه؛ وهو أيضاً بطيء، لأن كل عملية رحلة HTTP ذهاباً وإياباً، فهو خيار سيئ لدليل عمل وخيار جيد لالتقاط ملف. وأنشئ كلمة مرور تطبيق لكل جهاز بدلاً من توزيع كلمة مرور الحساب: إبطال هاتف مفقود يعني عندها حذف رمز واحد بدلاً من تغيير كلمة مرور وإعادة مصادقة كل عميل آخر تملكه. اقرن ذلك بالمصادقة الثنائية على الحسابات، واحتفظ بحساب مسؤول لا يستخدمه أحد يومياً منفصلاً عن الحساب الذي تُزامن به فعلياً.
حيث تتوقف الولاية القضائية عن أن تكون فكرة مجردة
بالنسبة لمعظم الأشياء التي قد تستضيفها بنفسك، يكون موقع الجهاز قراراً متعلقاً بزمن الاستجابة مع هامش قانوني. أما بالنسبة لأرشيف مستنداتك بأكمله، وصورك، وجهات اتصالك، وتقويمك، فتنقلب الأولوية — هذا هو الجهاز الوحيد الذي تتفوق فيه المسألة القانونية على مسألة الشبكة، لأن البيانات عليه هي بالضبط النوع الذي تُصدر الإجراءات القانونية من أجله.
افهم ما الذي يتغير حين تنتقل بعيداً عن مزوِّد سحابي عملاق. حين تعيش ملفاتك لدى مزوِّد كبير، يُقدَّم أي طلب بشأنها إلى ذلك المزوِّد، وتُقيِّمه إدارته القانونية وفق مصالحها الخاصة، ويُمتثل له غالباً بموجب أمر كتمان — قد لا تعرف أبداً أن ذلك حدث. وحين تعيش الملفات على خادم تستأجره، لا توجد إدارة كهذه ولا رد فعل كهذا، ويجب أن يجد الطلب شخصاً ما. هذا ليس درعاً سحرياً؛ بل تغيير بنيوي في من يُسأل، ومدى وضوح السؤال، وكمية الاحتكاك القائمة بين طلب ونسخة من بياناتك. يشرح دليلنا القانوني ماهية ذلك الاحتكاك وما ليس هو.
يترتب على ذلك نتيجتان عمليتان. الأولى أن الولاية القضائية ينبغي اختيارها عن قصد لا بردة فعل تجاه زمن الاستجابة — يوضح مقارنة الولايات القضائية والملاحظة حول ترتيب 14-Eyes كيف تختلف المواقع الأربعة، وبالنسبة لأرشيف شخصي فالجواب عادة هو أقوى أرضية قانونية يمكنك تحمُّل زمن الرحلة ذهاباً وإياباً إليها. والثانية أن المضيف لا يمكن إرغامه إلا على تقديم ما يستطيع الوصول إليه، وهذا سبب كون طبقات التشفير أعلاه ليست زخرفة: تشفير القرص الكامل مع التشفير التام بين الطرفين على المجلدات التي تحتاجه يعني أن الجواب الصادق على أي طلب هو صورة قرص من نص مشفر.
هناك مقايضة في زمن الاستجابة، وهي أصغر مما يخشى الناس. المزامنة عملية خلفية — لا أحد يراقب رفع صورة — فمئة ميلي ثانية إضافية من الرحلة ذهاباً وإياباً لا تكلفك أي شيء ملحوظ في الأمر الذي تقوم به طوال اليوم. الموضع الذي يظهر فيه الأثر هو فتح مستند في محرر الويب أو تمرير معرض صور كبير، وهو أمر تفاعلي تُشعَر فيه المئة ميلي ثانية نفسها في كل حركة. إن كان البشر في أوروبا، فتُبقي أمستردام أو زيورخ التجربتين سريعتين؛ وإن كان الموقف القانوني هو بيت القصيد كله، فتكلفك ريكيافيك قدراً ملحوظاً لكن محتملاً من الاستجابة التفاعلية ولا شيء على الإطلاق في المزامنة.
يستحق التزام واحد أن يُذكر صراحة، لأن الاستضافة الذاتية تنقله إليك بهدوء. بمجرد أن تصبح ملفات أشخاص آخرين على خادمك — صور فرد من العائلة، ومستندات زميل، وعقود عميل — تكون قد أصبحت الطرف المسؤول عنها، وفي أوروبا لتلك المسؤولية اسم ومجموعة واجبات مرتبطة بها. الأمر ليس مرهقاً على نطاق منزلي وليس شيئاً يُكتشف أثناء خلاف: قرِّر من له صلاحية الوصول إلى ماذا، وأخبر أصحاب البيانات أين تعيش بياناتهم، وأبقِ حساب المسؤول خارج الاستخدام اليومي كي تكون قراءة مجلد شخص آخر فعلاً متعمداً لا حادثاً.
النسخ الاحتياطي، والاستعادة التي يجب أن تتدرب عليها
هناك بالضبط ثلاثة أشياء يجب حفظها ويجب أن تأتي الثلاثة من اللحظة الزمنية نفسها: دليل البيانات الذي يحمل محتويات الملفات، وقاعدة البيانات التي تحمل كل قطعة من البيانات الوصفية عنها، وملف config.php، الذي يحتوي على معرِّف النسخة، وبيانات اعتماد قاعدة البيانات — وإن فعَّلت التشفير من جانب الخادم — القيم التي بدونها يصبح الباقي غير قابل للقراءة. انسخ اثنين من ثلاثة وستحصل على تمرين أثري ممتع بدلاً من استعادة.
الاتساق هو الجزء الذي يسهل إخطاؤه بشكل خفي. ملف يُنسخ أثناء الكتابة في قاعدة البيانات ينتج نسخة احتياطية يتعارض نصفاها، ويظهر التعارض بعد أسابيع كملفات موجودة على القرص لكن ليس في الواجهة، أو إدخالات في الواجهة تشير إلى لا شيء. الإصلاح المباشر هو وضع النسخة في وضع الصيانة، وتصدير قاعدة البيانات، والتقاط دليل البيانات، ثم إيقاف وضع الصيانة — وهذا توقف قصير لا يلاحظه أحد في الرابعة فجراً. يوضح توثيق النسخ الاحتياطي التسلسل بالتفصيل، وتحقق لقطة نظام ملفات تُؤخذ أثناء تسكين التطبيق النتيجة نفسها في وقت أقل إن كان تخزينك يدعمها.
ثم أرسلها إلى مكان آخر، مُشفَّرة قبل أن تغادر. يُشفِّر كل من Restic وBorg من جانب العميل، ويُزيلان التكرار جيداً مقابل مجموعة بيانات تتغير عند أطرافها، وهو شكل خادم الملفات بالضبط. اجعل المستودع البعيد للإلحاق فقط كي لا يستطيع مضيف مخترَق حذف سجله التاريخي — هذا ما يُحوِّل النسخة الاحتياطية إلى دفاع ضد برامج الفدية لا مجرد دفاع ضد قرص معطل — وضع الطرف البعيد في ولاية قضائية مختلفة عن الطرف القريب، لأن نسخة يمكن مصادرتها في نفس إجراء مصادرة الأصل ليست نسخة ثانية حقاً. احتفظ بعبارة مرور المستودع في مكان ليس الخادم.
تستحق الميزتان اللتان يخطئ الناس فيهما بالنسخ الاحتياطي أن تُسميا. الإصدارات وسلة المهملات وسيلتا راحة تعيشان داخل النسخة نفسها، على القرص نفسه، في قاعدة البيانات نفسها؛ تستعيدان الكتابة فوق ملف بالخطأ بشكل رائع ولا تنجوان من أي شيء على الإطلاق يحدث للخادم. بالمثل، اللقطات الساعية التي يوفرها المزوِّد — والتي تتضمنها كل خطة هنا مع استبقاء سبعة أيام — ممتازة للتراجع عن ترقية سيئة وليست نسخة احتياطية خارج الموقع، لأنها تشارك مصير البنية التحتية التي تقع عليها. استخدم الثلاث كلها. اعتمد على تلك الموجودة في مكان آخر.
أخيراً، تدرَّب على الاستعادة، مرة واحدة، بينما لا يوجد أي خلل. جهِّز خادماً مؤقتاً، واستعد قاعدة البيانات ودليل البيانات إليه، وصحِّح إدخال النطاق الموثوق في config.php، وسجِّل الدخول. ستكتشف شيئاً ما — وحدة PHP مفقودة، أو مستخدم قاعدة بيانات لم تدوّنه قط، أو مفتاح تشفير كان يعيش في مكان نسيته — وستكتشفه في عصر يوم يكلفك ساعة بدلاً من اليوم الذي يكلفك فيه الأرشيف كله. وإن احتاجت الاستعادة أيضاً إعادة فحص للملفات لتسوية الشجرة، فهذا ما صُممت له أداة سطر الأوامر، ومعرفة ذلك مسبقاً هي كل الهدف من هذا التمرين.
المشاركة إلى الخارج دون تسرب إلى الداخل
الميزة التي تجعل هذا مفيداً فعلاً للآخرين هي نفسها التي تضع رابطاً لملفاتك على الإنترنت العام، لذا فهي تستحق خمس دقائق من الإعداد المتعمد بدلاً من القيم الافتراضية. ينبغي أن تحمل الروابط العامة كلمة مرور وتاريخ انتهاء صلاحية كسياسة عامة لا كقرار لكل رابط على حدة — يمكن فرض كليهما على مستوى النسخة كلها، ما يعني أن الإعداد يُضبط مرة واحدة من قبلك بدلاً من أن ينساه شخص آخر في كل مرة. مجلدات الإسقاط للرفع فقط هي الحالة التي لا تُقدَّر حق قدرها: رابط يقبل الملفات دون كشف ما هو موجود بالفعل في المجلد يحل محل كل سير عمل مرفقات بريد إلكتروني مزعج لديك حالياً.
خلف وكيل عكسي — وهي الطريقة التي يُشغِّل بها الجميع تقريباً هذا — تسبب قيمة إعداد واحدة قدراً غير متناسب من الالتباس. إن لم يُخبَر التطبيق بالعناوين التي يجب الوثوق بها كوكلاء، يبدو أن كل طلب ينشأ من الوكيل نفسه. عندها يحتسب تحديد المعدل العالم كله كزائر واحد، وتُقيِّد الحماية من هجمات القوة الغاشمة في النهاية ذلك العنوان الواحد، والنتيجة نسخة تتباطأ بشكل غامض أو تقفل أمام مستخدمين شرعيين بينما تُظهر السجلات عنوان IP واحداً يقوم بكل شيء. ضبط قائمة الوكلاء الموثوقين وتجاوز البروتوكول، كما يصف توثيق الوكيل العكسي، يُصلح السجلات والحماية في سطر واحد لكل منهما.
قائمة النطاقات الموثوقة هي القيمة الأخرى التي تستحق الفهم لا مجرد النسخ. إنها قائمة سماح بأسماء المضيفين التي ستستجيب لها النسخة، وهي موجودة لأن التطبيق يبني روابط مطلقة — روابط إعادة تعيين كلمة المرور، وروابط المشاركة، واستدعاءات الاتحاد — من ترويسة المضيف التي يستقبلها. تركها مفتوحة طريقة معروفة جيداً لجعل روابطك الخاصة تشير إلى مكان آخر. أضف أسماء المضيفين التي تستخدمها فعلاً، بما فيها عنوان onion إن نشرت واحداً، ولا شيء غير ذلك.
إن كان بعض هذا لا ينبغي أن يكون قابلاً للوصول من الإنترنت المفتوح على الإطلاق، فلا تحل ذلك بقاعدة جدار حماية وأمل. يوجد جوابان واضحان: ضع النسخة خلف نفق WireGuard بحيث لا يمكن الوصول إليها إلا من أجهزة تحمل مفتاحاً، وهذا يعمل جيداً لأرشيف شخصي وسيئاً للمشاركة مع الغرباء؛ أو انشرها كخدمة onion إلى جانب اسم مضيف الشبكة العادية، ما يُبقي عملاء المزامنة يعملون عبر Tor دون كشف أي عنوان على الإطلاق. كلا الحلين إضافي — يمكنك تشغيل أي منهما إلى جانب اسم مضيف عام عادي وترك المواد الحساسة تعيش خلف المسار الخاص.
متى ينبغي ألا تستضيف هذا بنفسك
أي دليل لا يقول هذا يبيع شيئاً، فإليك القائمة. إن كانت البيانات تخص عملاً تجارياً تتوقف عملياته حين يتوقف خادم الملفات، فأنت تضمن توفراً بجهاز واحد واهتمام شخص واحد، وVPS واحدة ليست الأداة المناسبة لذلك. التوفر العالي لهذا التطبيق معقد فعلاً — تخزين مشترك، وقاعدة بيانات مُكررة، وموازن حِمل يفهم الجلسات الثابتة — وإن احتجت إليه، فأنت تحتاج ميزانية وشخصاً ثانياً، لا خطة أكبر.
إن لم يكن هناك من سيقوم بالصيانة الشهرية، فلا تبدأ. العمل صغير — تطبيق التحديثات، وإلقاء نظرة على صفحة النظرة العامة للإدارة، والتأكد من أن النسخ الاحتياطي عمل، وترقية إصدار رئيسي واحد في كل مرة عند وصول إصدار جديد — لكنه لا يغفر تخطيه لمدة سنة. نسخة متأخرة عدة إصدارات رئيسية لا يمكن ترقيتها في خطوة واحدة ولا ينبغي أن تواجه الإنترنت في هذه الأثناء، والخروج من هذا الوضع عمل أكثر مما كانت ستكون عليه الصيانة.
إن كانت مكتبتك تُقاس بالتيرابايت وتنمو، فالمشكلة في الشكل لا في الحجم. لا تصل أي فئة VPS نبيعها إلى تيرابايت من NVMe المحلي، وإلحاق تخزين كائنات بخلفية النسخة ينقل المشكلة بدلاً من حلها: تصبح قاعدة البيانات أكثر أهمية حتى، ويرتفع زمن الاستجابة في كل عملية على ملف، وتكون قد أعدت بهدوء إدخال طرف ثالث في تصميم كان غرضه بأكمله إزالة طرف كهذا. اشترِ عتاداً مخصصاً بأقراص مرآتية، أو تقبَّل أن الأرشيف ومحور المزامنة نظامان مختلفان.
وإن كان ما تريده فعلاً هو Google Docs — ثلاثون شخصاً يكتبون في جدول البيانات نفسه بمؤشرات أقل من ثانية — فكن صادقاً بأن كومة المكتب ذاتية الاستضافة جيدة لا مكافئة، وأنها تريد ذاكرتها الخاصة ومعالجها الخاص. شغِّلها لأنك تريد المستندات على قرصك الخاص، لا لأنك تتوقع أن يبدو التعاون مطابقاً.
أما بالنسبة لبقية الناس — أسرة سئمت من دفع إيجار على صورها الخاصة، أو فريق صغير يفضل ألا تُفهرس عقوده شركة لديها إدارة سياسات، أو فرد يريد ببساطة أن تكون الملفات في مكان اختاره — فهذا واحد من أكثر الأشياء إرضاءً التي يمكنك وضعها على خادم. البرمجية ناضجة، والعملاء جيدون، وأنماط الفشل موثقة، والنمط الوحيد الذي لا يغفر فعلاً هو النسخة الاحتياطية التي لم تُختبر قط. يستغرق تجهيز الخادم نحو دقيقة، وستظل المعاينات تتولد بينما تنهي إعداد الهواتف، ويمكنك الدفع مقابله بموقف الخصوصية نفسه الذي تشتريه من أجله.