فشلت ترقية Postgres - لقد جربت كل شيء

مرحبًا، الموقع عالق فجأة على صفحة “مرحبًا بكم في nginx!”، لذا قمت بتشخيص المشكلة وواجهت هذه الأخطاء.

تم بنجاح. يمكنك الآن بدء تشغيل خادم قاعدة البيانات باستخدام:

    pg_ctlcluster 10 main start

تحذير: دليل stats_temp_directory المحدد /var/run/postgresql/10-main.pg_stat_tmp
ليس قابلًا للكتابة لمالك المجموعة. لن تتم إضافة هذا الإعداد في
postgresql.conf.
الإصدار المجموعة المنفذ الحالة المالك              دليل البيانات              ملف السجل
10  main    5433 متوقف postgres /var/lib/postgresql/10/main /var/log/postgresql/postgresql-10-main.log
update-alternatives: تحذير: فرض إعادة تثبيت البديل /usr/share/postgresql/12/man/man1/postmaster.1.gz لأن مجموعة الروابط postmaster.1.gz تالفة
invoke-rc.d: تعذر تحديد مستوى التشغيل الحالي
invoke-rc.d: رفض policy-rc.d تنفيذ الأمر start.
معالجة المحفزات لـ postgresql-common (215.pgdg100+1) ...
بناء قواميس PostgreSQL من حزم myspell/hunspell المثبتة...
إزالة ملفات القواميس القديمة:
إيقاف خادم قاعدة بيانات PostgreSQL 10: main.
إيقاف خادم قاعدة بيانات PostgreSQL 12: main.
إجراء فحوصات الاتساق
-----------------------------
فحص إصدارات المجموعات                                   تم بنجاح

لم يتم إغلاق المجموعة المصدر بشكل صحيح.
فشل، الخروج
-------------------------------------------------------------------------------------
فشل ترقية Postgres

يرجى زيارة https://meta.discourse.org/t/postgresql-12-update/151236 للحصول على الدعم

يمكنك تشغيل ./launcher start app لإعادة تشغيل تطبيقك في الوقت الحالي




فشل
--------------------
Pups::ExecError: /root/upgrade_postgres فشل مع إرجاع #<Process::Status: pid 45 exit 1>
موقع الفشل: /pups/lib/pups/exec_command.rb:112:in `spawn'
فشل التنفيذ مع المعلمات "/root/upgrade_postgres"
bfe8265213ad992fa3245d252d192977f05d902d7213b361f53d3bc2b0d16b3a
** فشل التمهيد ** يرجى التمرير للأعلى والبحث عن رسائل خطأ سابقة، قد يكون هناك أكثر من خطأ.
قد يساعد ./discourse-doctor في تشخيص المشكلة.
root@bitkcor:/var/discourse# df -h
نظام الملفات   الحجم  المستخدم  المتاح  النسبة%  المثبت على
udev            1.9G     0  1.9G   0% /dev
tmpfs           395M  648K  394M   1% /run
/dev/vda1        78G   23G   55G  30% /
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/vda15      105M  3.4M  101M   4% /boot/efi
tmpfs           395M     0  395M   0% /run/user/0
root@bitkcor:/var/discourse# ls
bin   containers        discourse-setup  launcher  README.md  scripts  templates
cids  discourse-doctor  image            LICENSE   samples    shared
root@bitkcor:/var/discourse# cd shared
root@bitkcor:/var/discourse/shared# chown -R postgres postgres_data
chown: مستخدم غير صالح: 'postgres'
root@bitkcor:/var/discourse/shared# ./launcher start app
-bash: ./launcher: لا يوجد ملف أو دليل
root@bitkcor:/var/discourse/shared# cd ..
root@bitkcor:/var/discourse# ./launcher start app

بدء تشغيل الحاوية الموجودة
+ /usr/bin/docker start app
استجابة خطأ من الديمن: فشل السائق في برمجة الاتصال الخارجي على نقطة النهاية app (10f3d3b7938496e743c73affc9ddb2d821e04419985bf8e3ebde2ec9ec704a0b): خطأ في بدء تشغيل وكيل المستخدم الأرضي: الاستماع tcp 0.0.0.0:80: bind: العنوان مستخدم بالفعل
خطأ: فشل بدء الحاويات: app
root@bitkcor:/var/discourse# cd containers
root@bitkcor:/var/discourse/containers# ls
app.yml  app.yml.2018-08-29-034711.bak
root@bitkcor:/var/discourse/containers# cd ..
root@bitkcor:/var/discourse# ./launcher stop app
+ /usr/bin/docker stop -t 10 app
app
root@bitkcor:/var/discourse# ./launcher stop app
+ /usr/bin/docker stop -t 10 app
app
root@bitkcor:/var/discourse# git pull
محدث بالفعل.
root@bitkcor:/var/discourse# ./launcher start app

بدء تشغيل الحاوية الموجودة
+ /usr/bin/docker start app
استجابة خطأ من الديمن: فشل السائق في برمجة الاتصال الخارجي على نقطة النهاية app (f149fe57c125ae0c276c339a1367c83262f866227ab9317ff06bf026e8776f65): خطأ في بدء تشغيل وكيل المستخدم الأرضي: الاستماع tcp 0.0.0.0:80: bind: العنوان مستخدم بالفعل
خطأ: فشل بدء الحاويات: app

لقد زرت https://meta.discourse.org/t/postgresql-12-update/151236 للحصول على الدعم وحاولت اقتراحات @Falco هنا… وأي اقتراحات أخرى عبر meta. لم أستطع جعل أي شيء يعمل.

بما في ذلك، يبدو أن لدي مساحة أكثر من كافية لهذا.

هل يمكن لأحد أن يخبرني بما ينقصني؟

هناك مدخل في الأسئلة الشائعة مخصص لهذا فقط في تحديث PostgreSQL 12.

شكرًا لك على الرد السريع! نعم، جربت ذلك أيضًا.

root@bitkcor:/var/discourse# ./launcher start app

starting up existing container
+ /usr/bin/docker start app
Error response from daemon: driver failed programming external connectivity on endpoint app (49f1fdf896618efc824e50f782c1fba91bf81320e49ccadb5e5e80b342552e3e): Error starting userland proxy: listen tcp 0.0.0.0:80: bind: address already in use
Error: failed to start containers: app
root@bitkcor:/var/discourse# ./launcher stop app
+ /usr/bin/docker stop -t 10 app
app
root@bitkcor:/var/discourse# tail -f shared/data/log/var-log/postgres/current
tail: cannot open 'shared/data/log/var-log/postgres/current' for reading: No such file or directory
tail: no files remaining

بشكل ما، قام شخص ما بتثبيت nginx على خادمك. يجب عليك إزالة أي خوادم ويب إضافية من خادمك الخاص (VPS) ثم اتبع التعليمات.

تم تثبيت nginx لأن هذا المنتدى كان يعمل لعدة سنوات. تأخرت مع Digital Ocean وتم إيقاف Droplet. بعد إعادة تشغيله، أواجه خطأ 521 عند زيارة العنوان. عند الدخول إلى عنوان IP، أعود إلى شاشة الترحيب.

لم يتغير تكوين Cloudflare.

وأنظمة الأسماء صحيحة في NameCheap.

لم أقم بأي تغييرات منذ عدة أشهر، لذا لا أعرف أين أبحث.

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

ينبغي عليك حقًا إلغاء تثبيتها حتى لا يحدث هذا كل مرة يتم فيها إعادة تشغيل الخادم…

هل حدث تغيير ما؟ عندما قمت بإنشائه، كانت شاشة الترحيب الخاصة بـ Nginx جزءًا من عملية التثبيت. كنتُ أعتقد أن Nginx ضروري لتشغيل Discourse. كيف يمكنني إلغاء تثبيته؟

يرجى تغيير المسار إلى:
tail -f shared/standalone/log/var-log/postgres/current

المسار المذكور في الدليل يشير إلى حاوية البيانات في تثبيت الحاويتين، بينما يبدو أن تثبيتك هو النسخة ذات الحاوية الواحدة.

تم. يعطيني هذا.

root@bitkcor:/var/discourse# tail -f shared/standalone/log/var-log/postgres/current
2020-07-19 03:33:56.864 UTC [19933] discourse@discourse LOG:  duration: 279.207 ms  statement: COPY public.scheduler_stats (id, name, hostname, pid, duration_ms, live_slots_start, live_slots_finish, started_at, success, error) TO stdout;
2020-07-19 03:34:09.436 UTC [19933] discourse@discourse LOG:  duration: 12555.420 ms  statement: COPY public.stylesheet_cache (id, target, digest, content, created_at, updated_at, theme_id, source_map) TO stdout;
2020-07-19 03:34:10.211 UTC [19933] discourse@discourse LOG:  duration: 727.297 ms  statement: COPY public.unsubscribe_keys (key, user_id, created_at, updated_at, unsubscribe_key_type, topic_id, post_id) TO stdout;
2020-07-21 01:56:22.105 UTC [6388] discourse@discourse LOG:  duration: 167.853 ms  execute <unnamed>: INSERT INTO "unsubscribe_keys" ("key", "user_id", "created_at", "updated_at", "unsubscribe_key_type") VALUES ('352fc5679876a1a700dfe7b45f8fa67612592421a3659e08ec5c2ccbf8f0e2d2', 2, '2020-07-21 01:56:21.932109', '2020-07-21 01:56:21.932109', 'digest') RETURNING "key"
2020-07-26 03:34:50.570 UTC [27570] discourse@discourse LOG:  duration: 147.456 ms  statement: COPY public.post_revisions (id, user_id, post_id, modifications, number, created_at, updated_at, hidden) TO stdout;
2020-07-26 03:34:50.925 UTC [27570] discourse@discourse LOG:  duration: 349.648 ms  statement: COPY public.post_search_data (post_id, search_data, raw_data, locale, version) TO stdout;
2020-07-26 03:34:51.236 UTC [27570] discourse@discourse LOG:  duration: 292.799 ms  statement: COPY public.posts (id, user_id, topic_id, post_number, raw, cooked, created_at, updated_at, reply_to_post_number, reply_count, quote_count, deleted_at, off_topic_count, like_count, incoming_link_count, bookmark_count, avg_time, score, reads, post_type, sort_order, last_editor_id, hidden, hidden_reason_id, notify_moderators_count, spam_count, illegal_count, inappropriate_count, last_version_at, user_deleted, reply_to_user_id, percent_rank, notify_user_count, like_score, deleted_by_id, edit_reason, word_count, version, cook_method, wiki, baked_at, baked_version, hidden_at, self_edits, reply_quoted, via_email, raw_email, public_version, action_code, image_url, locked_by_id) TO stdout;
2020-07-26 03:34:51.547 UTC [27570] discourse@discourse LOG:  duration: 296.400 ms  statement: COPY public.scheduler_stats (id, name, hostname, pid, duration_ms, live_slots_start, live_slots_finish, started_at, success, error) TO stdout;
2020-07-26 03:35:04.123 UTC [27570] discourse@discourse LOG:  duration: 12549.364 ms  statement: COPY public.stylesheet_cache (id, target, digest, content, created_at, updated_at, theme_id, source_map) TO stdout;
2020-07-26 03:35:04.760 UTC [27570] discourse@discourse LOG:  duration: 588.788 ms  statement: COPY public.unsubscribe_keys (key, user_id, created_at, updated_at, unsubscribe_key_type, topic_id, post_id) TO stdout;

يبدو أن postgres قيد التشغيل. هل قمت بإيقاف حاوية Discourse قبل التحقق من السجلات؟

./launcher stop app

لا أستطيع إيقافه.

root@bitkcor:/var/discourse# ./launcher stop app
+ /usr/bin/docker stop -t 10 app
app
root@bitkcor:/var/discourse# tail -f shared/standalone/log/var-log/postgres/current
2020-07-19 03:33:56.864 UTC [19933] discourse@discourse LOG:  duration: 279.207 ms  statement: COPY public.scheduler_stats (id, name, hostname, pid, duration_ms, live_slots_start, live_slots_finish, started_at, success, error) TO stdout;
2020-07-19 03:34:09.436 UTC [19933] discourse@discourse LOG:  duration: 12555.420 ms  statement: COPY public.stylesheet_cache (id, target, digest, content, created_at, updated_at, theme_id, source_map) TO stdout;
2020-07-19 03:34:10.211 UTC [19933] discourse@discourse LOG:  duration: 727.297 ms  statement: COPY public.unsubscribe_keys (key, user_id, created_at, updated_at, unsubscribe_key_type, topic_id, post_id) TO stdout;
2020-07-21 01:56:22.105 UTC [6388] discourse@discourse LOG:  duration: 167.853 ms  execute <unnamed>: INSERT INTO "unsubscribe_keys" ("key", "user_id", "created_at", "updated_at", "unsubscribe_key_type") VALUES ('352fc5679876a1a700dfe7b45f8fa67612592421a3659e08ec5c2ccbf8f0e2d2', 2, '2020-07-21 01:56:21.932109', '2020-07-21 01:56:21.932109', 'digest') RETURNING "key"
2020-07-26 03:34:50.570 UTC [27570] discourse@discourse LOG:  duration: 147.456 ms  statement: COPY public.post_revisions (id, user_id, post_id, modifications, number, created_at, updated_at, hidden) TO stdout;
2020-07-26 03:34:50.925 UTC [27570] discourse@discourse LOG:  duration: 349.648 ms  statement: COPY public.post_search_data (post_id, search_data, raw_data, locale, version) TO stdout;
2020-07-26 03:34:51.236 UTC [27570] discourse@discourse LOG:  duration: 292.799 ms  statement: COPY public.posts (id, user_id, topic_id, post_number, raw, cooked, created_at, updated_at, reply_to_post_number, reply_count, quote_count, deleted_at, off_topic_count, like_count, incoming_link_count, bookmark_count, avg_time, score, reads, post_type, sort_order, last_editor_id, hidden, hidden_reason_id, notify_moderators_count, spam_count, illegal_count, inappropriate_count, last_version_at, user_deleted, reply_to_user_id, percent_rank, notify_user_count, like_score, deleted_by_id, edit_reason, word_count, version, cook_method, wiki, baked_at, baked_version, hidden_at, self_edits, reply_quoted, via_email, raw_email, public_version, action_code, image_url, locked_by_id) TO stdout;
2020-07-26 03:34:51.547 UTC [27570] discourse@discourse LOG:  duration: 296.400 ms  statement: COPY public.scheduler_stats (id, name, hostname, pid, duration_ms, live_slots_start, live_slots_finish, started_at, success, error) TO stdout;
2020-07-26 03:35:04.123 UTC [27570] discourse@discourse LOG:  duration: 12549.364 ms  statement: COPY public.stylesheet_cache (id, target, digest, content, created_at, updated_at, theme_id, source_map) TO stdout;
2020-07-26 03:35:04.760 UTC [27570] discourse@discourse LOG:  duration: 588.788 ms  statement: COPY public.unsubscribe_keys (key, user_id, created_at, updated_at, unsubscribe_key_type, topic_id, post_id) TO stdout;c

شاشة الترحيب في nginx لم تكن جزءًا من العملية أبدًا. أنت تخطئ في التذكر.

كما تم تثبيت nginx داخل حاوية Docker، ولم يكن مطلوبًا أبدًا خارجها.

لديك نسختان من nginx تستمعان إلى نفس المنفذ. إذا كان الشيء الوحيد على هذا الخادم هو Discourse، فيمكن إزالة nginx المكررة خارج الحاوية بأمان تام.

حسناً، آسف على ذلك.

هل تعرف أين قد يكون موقعه؟

بافتراض أن الخادم يعمل بنظام Ubuntu، قم بتشغيل الأمر التالي خارج الحاوية:

sudo apt-get remove nginx nginx-common

يا إلهي. الآن لا يمكن الوصول إلى الموقع. يتم استعادة نسخة احتياطية ونأمل في الأفضل.

في الواقع، هذه أخبار جيدة، مما يعني أن مثيل nginx خارج الحاوية لم يعد يختطف المنفذ.

بمجرد إلغاء تثبيتك له، يجب إعادة تشغيل الخادم حتى يتمكن كل شيء من البدء بشكل صحيح.