عرض صفحة "تحت الصيانة" باستخدام nginx في تطبيق "launcher rebuild app"؟

تستغرق صيانة الموقع باستخدام “./launcher rebuild app” بعض الوقت لإعادة بناء الموقع بالكامل (تثبيت إضافات جديدة وما إلى ذلك من git).
هل هناك أي طريقة موصى بها لعرض صفحة ثابتة تقول “قيد الصيانة” أثناء إعادة بناء discourse؟

ما فكرت فيه هو استخدام nginx. يتضمن ذلك إيقاف docker للخدمة على المنفذ 80 والسماح لـ nginx بالوكالة العكسية لتولي المسؤولية وإعادة توجيه حركة المرور إما إلى حاوية docker أو إلى صفحتي الثابتة.

أفكر في القيام بذلك عن طريق تحرير nginx.conf يدويًا ليصبح كالتالي كلما لزم الأمر،

server {
    listen 80;
    server_name your-discourse-domain.com;

location / {
    proxy_pass http://localhost:80;
    proxy_set_header Host $http_host;
    proxy_http_version 1.1;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https;
    proxy_redirect http:// https://;
}
}

واستبداله بـ،

server {
    listen 80;
    server_name your-discourse-domain.com;

    location / {
        root /path/to/your/maintenance/page;
    }
}

ما هي اقتراحاتكم؟ أستخدم خوادم AWS EC2. هل هناك طريقة أفضل؟

مرحباً @PrettyGirl

نعم، يوجد. ألقِ نظرة هنا:

إعجاب واحد (1)

الطريقة التي أعتقد أنها أفضل وأسهل هي استخدام إعداد حاويتين بحيث يمكنك بناء حاوية جديدة أثناء تشغيل الحاوية القديمة. هناك وقت تعطل أقل بكثير بهذه الطريقة. يعتقد آخرون أن تشغيل خادم ويب إضافي أسهل.

إعجاب واحد (1)

سيعمل هذا في كثير من الحالات، ولكنه سيظل يواجه وقت تعطل كلما احتاجت حاوية البيانات إلى التحديث.

إعجاب واحد (1)

تتم ترقيات قواعد البيانات الرئيسية بشكل أقل من مرة واحدة في السنة. ترقيات قواعد البيانات الثانوية لا تستغرق وقتًا طويلاً ويمكنك إعادة بناء حاوية البيانات، وتدمير حاوية الويب وتشغيلها في غضون دقائق قليلة. يبدو أن بعض الأشخاص يفضلون رسالة جميلة تفيد بأن الموقع معطل بدلاً من تقليل وقت التعطل، لذا فإن الحاوية الثانية هي الطريقة للقيام بذلك.

في الواقع، ربما يكون الحل الأسهل هو مجرد وجود حاوية nginx ثانية مع رسالة “سنعود قريبًا” تقوم بتشغيلها يدويًا أثناء إجراء ترقية، مثل

./launcher stop app
docker run nginx --name back-soon # والمزيد من الأشياء لرؤية أنه تم تقديم صفحة
./launcher bootstrap app
./launcher destroy app
docker stop back-soon
./launcher start app

ولكن بعد ذلك يتعين عليك الحصول على شهادة والحفاظ على تحديث الشهادة لحاوية back-soon، وهو أمر معقد.

تحرير: هذا هو الموضوع الرسمي لهذه المناقشة Add an offline page to display when Discourse is rebuilding or starting up - #83 by amotl