في الليلة الماضية، كنت أعمل على ترقيات Discourse وأعدت بناء التطبيق، مما أدى إلى ظهور مجموعة من أخطاء Postgres. أدركت أن هذا ناتج عن الترقية الأخيرة، لكنني ظلت تظهر لي أخطاء “مرفوضة بسبب عدم وجود إذن”، وغيرها من المشاكل (ونعم، قمت بتغيير ملكية كل شيء إلى 700، لذا لم يكن الأمر عامًا). لذا، قمت بنقل مجلد /var/discourse الأصلي إلى مكان كان من المفترض أن يكون مؤقتًا، وقمت بإعادة تثبيت نسخة جديدة من Discourse في محاولة لتحديث Postgres على الأقل.
هنا يبدأ الأمر بالمتعة. كان لدي نسخة احتياطية من الموقع (قاعدة البيانات فقط، حيث تم حفظ الملفات المرفوعة في حجم مختلف) تم إنشاؤها عبر واجهة المستخدم قبل ثلاثة أيام. أو على الأقل، كنت أظن ذلك. ما لدي الآن هو ملف يُسمى wacky-writers-forum-2021-04-06-033906-v20210328233843.sql.gz، والذي أعتقد أنني تعلمت أنه في الواقع ليس ملف tar.gz الذي يجب أن تكون عليه النسخة الاحتياطية الفعلية.
لقد قمت بتوجيه جميع المستخدمين حاليًا إلى صفحة هبوط، وأتأمل أن يتمكن شخص ما من إخباري بأنه لا يزال من الممكن استعادة ملف .tar.gz الفعلي من الخادم من قبل ثلاثة أيام، وكيف بالضبط يجب أن أقوم بذلك.
أقوم بحفظ نسخي الاحتياطية والملفات المرفوعة في تخزين Digital Ocean الكتلي، ولا يزال لدي مجلد discourse من التثبيت القديم الذي كان يعمل، لكن نقله أو نسخه مرة أخرى إلى /var/discourse يكسر كل شيء مرة أخرى، بما في ذلك ظهور أخطاء Postgres. لقد عملت على هذا لمدة 9 ساعات متواصلة، وأنا على وشك الوصول إلى حضيض صبري. هل يمكن لأي شخص مساعدتي، أو على الأقل محاولة توجيهي في الاتجاه الصحيح؟ لقد وصلنا للتو إلى علامة 1000 مستخدم، وأود حقًا حقًا تجنب فقدان كل ذلك.
إذا كان لديك تكوين S3 في ملف app.yml، فيمكنك ببساطة إجراء استعادة عبر سطر الأوامر، وسيتم جلب النسخة الاحتياطية من S3.
وبما أن أصولك مخزنة في S3، فإن النسخة الاحتياطية تحتوي فقط على قاعدة البيانات.
يجب أن تتمكن ببساطة من استنساخ مجلد /var/discourse الجديد، ونسخ ملف yml الخاص بك، وإعادة البناء، ثم إجراء استعادة عبر سطر الأوامر.
سأعدّل ذلك وأقول إن تحميلي ونسخي الاحتياطية ليست محلية لمجلد discourse الرئيسي (هذا جزئيًا كيف بدأت كل هذه القصة، كنت أحاول نقلنا إلى DigitalOcean Spaces). لذا، لا، للأسف، لم أقم بأي إعدادات لـ S3 لأنني كنت فقط أحفظها في مساحة تخزين موصولة.
كانت النسخ الاحتياطية تُحفظ في mnt/my_storage/shared/standalone، ولكن عندما أذهب للبحث عن النسخ الاحتياطية هناك، كل ما لدي هو ملف wacky-writers-forum-2021-04-06-033906-v20210328233843.sql.gz. لقد حاولت بالفعل الاستعادة من هذا الملف لعدم وجود فكرة أفضل (وهو ما كان ربما خطأ)، لكنني حصلت على خطأ “مرفوض من حيث الإذن”. أنا متأكد أن الأمر يتعلق بكيفية إنشاء هذه النسخ الاحتياطية فعليًا.
في هذه الحالة، يجب أن تتمكن من استعادة ملف SQL، ثم إعادة توصيل وحدة تخزين الكتلة لاستعادة ملفات التحميل الخاصة بك.
هناك نوعان من النسخ الاحتياطية: sql.gz الذي لا يتضمن ملفات التحميل، و tar.gz الذي يتضمنها. لذا، كان لديك النوع الخاطئ من النسخ الاحتياطي، لكن حقيقة أن ملفات التحميل كانت على وحدة تخزين خارجية أنقذت ظهرك.
استثناء: lib/discourse.rb:93:in `exec': فشل في نسخ الأرشيف إلى مجلد tmp.
cp: لا يمكن فتح '/var/www/discourse/public/backups/default/wacky-writers-forum-2021-04-06-033906-v20210328233843.sql.gz' للقراءة: إذن مرفوض
تم استعادة قاعدة البيانات بنجاح من ملف .sql.gz. (يا لها من فرحة! شكرًا مجددًا ريتشارد.)
تأكدت من أن ملف app.yml يحمل نفس الإعدادات التي كانت عليه قبل تعطل كل شيء.
شغلت الأمر ./launcher rebuild app
اكتملت عملية إعادة البناء بنجاح مع Postgres 13 (أخيرًا)
ومع ذلك، لا يزال الوصول إلى الموقع نفسه غير متاح. أستخدم Cloudflare، لكنني فعلت وضع التطوير حاليًا، وقمت بتفريغ ذاكرة التخزين المؤقت لـ DNS. جميع التوجيهات صحيحة كما يجب. قالب Cloudflare موجود في ملف app.yml.
يتم حل أسماء النطاقات (DNS) بشكل صحيح، وأسماء المضيفين محدثة، وتم تثبيت Discourse باستخدام عنوان URL المناسب، وقد نفدت من الأفكار.
عنوان URL هو https://forum.wackywriters.com، وأواجه فقط أخطاءً تقول “الخادم غير متاح”. أشعر وكأنني أدور في حلقة مفرغة هنا (عذرًا)، لكن هل لديك أي اقتراحات؟
تعديل: عند تشغيل ./discourse-doctor، أرى أن هناك نسختين من التطبيق تعملان داخل Docker:
هل هذا طبيعي؟ (يبدو أنه ليس كذلك، لكن كل ما كنت أعرفه عن Discourse قد أُسقط من نافذتي خلال الـ 24 ساعة الماضية )
تعديل 2: كنت أرجئ هذا كحل أخير، لكنني سأحاول الآن إعداد خادم جديد تمامًا مع تثبيت نظيف لـ Discourse. أنا قلق من أن يكون قد حدث شيء معقد بسبب كل تعديلاتي، ولا أستطيع معرفة ما الذي تعطل. لحسن الحظ، لا يزال لدي النسخ الاحتياطي وجميع الملفات المرفوعة في تخزين الكتل، لذا إذا حظيت بحظ جيد، يجب أن أتمكن من ربطها بخادم جديد (droplet) ونقل البيانات منه. إذا كان لدى أي شخص نصائح أو اقتراحات إضافية، فسأقدر الخبرة الأقدم من خبرتي.
تعديل 3: حتى مع وجود خادم جديد وانتشار عنوان IP (يبدو أن nslookup و ping يعملان بشكل جيد، وموقع whatsmydns.net يبدو جيدًا)، لا يزال المنتدى لا يعمل. ما زلت أحصل على أخطاء اتصال. يبدو وكأنه لا يقوم بربط عنوان IP بنسخة Discourse، وبدلاً من ذلك يحاول تحميل صفحة ثابتة، وهو أمر غير موجود بالطبع في هذه الحالة.
إذًا، بعد ما يقارب 24 ساعة من النضال، أدركت السبب وراء رفض تحميل الموقع بعد بدء عملية الاستعادة.
بسبب إعادة التعيين وإعادة التثبيت العديدة وما لا يعلمه إلا الله، وصلت إلى حد معدل الطلبات، لذا قمت مؤقتًا بإسقاط قوالب SSL وسأعيدها للعمل خلال أسبوع.
الموقع “يعمل” بينما أعيد معالجة جميع المنشورات لإصلاح الصور المعطلة، لكنني أقدر حقًا مساعدتي جاي وريتشارد اليوم؛ لقد ساعدتموني في تجاوز الأجزاء التي لم أستطع حلها بمفردي.
الآن، يجب أن أحمل نسخة احتياطية حقيقية حتى أتمكن من إعداد S3 هذا الأسبوع دون القلق من تكرار هذه المشكلة مرة أخرى.
@pfaffman أليس من الممكن أنك تخلط بين تخزين الكائنات وتخزين الكتل؟ تخزين الكائنات هو S3، لكن TS يقولون إنهم استخدموا تخزين الكتل، وهو مجرد قرص مرفق في مجلد التحميلات الخاص بهم: