لا يمكن إعادة البناء بسبب فشل ترقية PostgreSQL 12

أي دليل؟
المنفذ 2045 يذكرني بشيء لا أستطيع تحديده بدقة :thinking:

بعد عدة محاولات فاشلة للتثبيت قبل بضعة أشهر، قمت بتغييره إلى 2045، لكن هذا غير ذي صلة لأنه مُعلّق بعلامة #. المشكلة ليست في هذا المنفذ.

لقد اتبعت هذا الدليل discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub

حسنًا… لقد تم تغييره، أحيانًا تنزلق الأصابع :sweat_smile:

أنا أفهم، ولكن للوصول إلى 2045 في مرحلة ما، ربما تكون قد اتبعت شيئًا ما قادك إلى هنا وإلى الآن. أعتقد أنني تابعت نفس المنشور لأنني أيضًا لدي وكيل 2045 في إعدادات nginx الخاصة بي لسبب لا أستطيع تذكره… https://youtu.be/3hKgEylk8ks :face_with_spiral_eyes:

@Benjamin_D لا يوجد منفذ 2045 في ملف nginx الخاص بي، يمكنك إلقاء نظرة عليه عن طريق التمرير للأعلى. ذلك السطر في ملف app.yml معطل بواسطة لذا لا أفهم لماذا تشيرون إليه. المشكلة بالتأكيد ليست من هناك، وإلا لكانت رسالة الخطأ قد أشارت إليه.

يمكنني إزالة ذلك السطر من ملف app.yml إذا أردتم، ستكون النتيجة كما كانت من قبل.

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

ليس على الإطلاق، نحن نحاول فقط تتبع خطواتك ومقارنة إعداداتنا بإعداداتك.

يرتبط هذا الخطأ بالتأكيد بفشل ترقية PostgreSQL.

راجع الموضوع الرئيسي لحل المشكلة.

سأتحقق من موضوع ترقية PostgreSQL. وسأعود إذا واجهت أي خطأ آخر.

إذن، بعد ترقية PostgreSQL من الإصدار 10 إلى 12، ما زلت أواجه مشاكل بعد تنفيذ الأمر: ./launcher rebuild app

sudo ./launcher rebuild app
fatal: not a git repository (or any of the parent directories): .git
إيقاف الحاوية القديمة
+ /usr/bin/docker stop -t 60 app
app
cd /pups && git pull && /pups/bin/pups --stdin
Already up to date.
I, [2020-07-13T13:34:21.635079 #1]  INFO -- : Loading --stdin
I, [2020-07-13T13:34:21.643465 #1]  INFO -- : > locale-gen $LANG && update-locale
I, [2020-07-13T13:34:21.713536 #1]  INFO -- : Generating locales (this might take a while)...
Generation complete.

I, [2020-07-13T13:34:21.713917 #1]  INFO -- : > mkdir -p /shared/postgres_run
I, [2020-07-13T13:34:21.720693 #1]  INFO -- :
I, [2020-07-13T13:34:21.721042 #1]  INFO -- : > chown postgres:postgres /shared/postgres_run
I, [2020-07-13T13:34:21.724919 #1]  INFO -- :
I, [2020-07-13T13:34:21.725387 #1]  INFO -- : > chmod 775 /shared/postgres_run
I, [2020-07-13T13:34:21.728768 #1]  INFO -- :
I, [2020-07-13T13:34:21.729117 #1]  INFO -- : > rm -fr /var/run/postgresql
I, [2020-07-13T13:34:21.732712 #1]  INFO -- :
I, [2020-07-13T13:34:21.733008 #1]  INFO -- : > ln -s /shared/postgres_run /var/run/postgresql
I, [2020-07-13T13:34:21.735981 #1]  INFO -- :
I, [2020-07-13T13:34:21.736200 #1]  INFO -- : > socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres already running stop container ; exit 1
2020/07/13 13:34:21 socat[27] E connect(6, AF=1 "/shared/postgres_run/.s.PGSQL.5432", 36): No such file or directory
I, [2020-07-13T13:34:21.751266 #1]  INFO -- :
I, [2020-07-13T13:34:21.752242 #1]  INFO -- : > rm -fr /shared/postgres_run/.s*
I, [2020-07-13T13:34:21.757300 #1]  INFO -- :
I, [2020-07-13T13:34:21.757817 #1]  INFO -- : > rm -fr /shared/postgres_run/*.pid
I, [2020-07-13T13:34:21.761287 #1]  INFO -- :
I, [2020-07-13T13:34:21.761706 #1]  INFO -- : > mkdir -p /shared/postgres_run/10-main.pg_stat_tmp
I, [2020-07-13T13:34:21.765114 #1]  INFO -- :
I, [2020-07-13T13:34:21.765725 #1]  INFO -- : > chown postgres:postgres /shared/postgres_run/10-main.pg_stat_tmp
I, [2020-07-13T13:34:21.770573 #1]  INFO -- :
I, [2020-07-13T13:34:21.781057 #1]  INFO -- : File > /etc/service/postgres/run  chmod: +x  chown:
I, [2020-07-13T13:34:21.791681 #1]  INFO -- : File > /etc/service/postgres/log/run  chmod: +x  chown:
I, [2020-07-13T13:34:21.800244 #1]  INFO -- : File > /etc/runit/3.d/99-postgres  chmod: +x  chown:
I, [2020-07-13T13:34:21.808363 #1]  INFO -- : File > /root/upgrade_postgres  chmod: +x  chown:
I, [2020-07-13T13:34:21.809170 #1]  INFO -- : > chown -R root /var/lib/postgresql/10/main
chown: cannot access '/var/lib/postgresql/10/main': No such file or directory
I, [2020-07-13T13:34:21.817357 #1]  INFO -- :


FAILED
--------------------
Pups::ExecError: chown -R root /var/lib/postgresql/10/main failed with return #<Process::Status: pid 42 exit 1>
Location of failure: /pups/lib/pups/exec_command.rb:112:in `spawn'
exec failed with the params {"cmd"=>["chown -R root /var/lib/postgresql/10/main", "[ ! -e /shared/postgres_data ] && install -d -m 0755 -o postgres -g postgres /shared/postgres_data && sudo -E -u postgres /usr/lib/postgresql/10/bin/initdb -D /shared/postgres_data || exit 0", "chown -R postgres:postgres /shared/postgres_data", "chown -R postgres:postgres /var/run/postgresql"]}
3e7af3d49be0616ae52ee03d6ee0867d25e5db96de40d92c7ec7abeded5d3262
** FAILED TO BOOTSTRAP ** الرجاء التمرير للأعلى والبحث عن رسائل الخطأ السابقة، قد يكون هناك أكثر من خطأ.
قد يساعدك ./discourse-doctor في تشخيص المشكلة.

لا أفهم، استسلمت… ;/

ماذا يعني "fatal: not a git repository (or any of the parent directories): .git "؟؟

أيضاً، أحصل على ما يلي

sudo ./discourse-setup
The configuration file containers/app.yml already exists!

. . . reconfiguring . . .


Saving old file as app.yml.2020-07-13-153931.bak
Stopping existing container in 5 seconds or Control-C to cancel.
+ /usr/bin/docker stop -t 10 app
app

Found 4GB of memory and 2 physical CPU cores
setting db_shared_buffers = 1024MB
setting UNICORN_WORKERS = 4
containers/app.yml memory parameters updated.

Hostname for your Discourse? [cp2077.eu]:

Checking your domain name . . .
WARNING: Port 443 of computer does not appear to be accessible using hostname:    cp2077.eu.
WARNING: Connection to http://cp2077.eu (port 80) also fails.

This suggests that cp2077.eu resolves to some IP address that does not reach this
machine where you are installing discourse.

The first thing to do is confirm that cp2077.eu resolves to the IP address of this server.
You usually do this at the same place you purchased the domain.

If you are sure that the IP address resolves correctly, it could be a firewall issue.
A web search for "open ports YOUR CLOUD SERVICE" might help.

This tool is designed only for the most standard installations. If you cannot resolve
the issue above, you will need to edit containers/app.yml yourself and then type

./launcher rebuild app

الموقع الإلكتروني يعمل ومحمي باستخدام المنفذ 443 (SSL)، لا أفهم سبب قولهم إنه لا يمكن الوصول إلى الموقع. لا أعرف ما الذي يجب فعله بعد ذلك. يرجى المساعدة

لديك وكيل عكسي، لذا لا يمكنك استخدام discourse-setup. كما أنك على الأرجح بحاجة إلى إزالة قالب let’s encrypt من ملف الإعدادات الخاص بك.

لا أعرف ما قد تكون مشكلة postgres لديك.

هل تقصد تلك الأسطر المتعلقة بالوكيل (proxy) في ملف nginx الخاص بي؟

ألا تحاول إعادة تثبيت discourse “فوق” تثبيت سابق (التثبيت الذي كان في فبراير)، وبالتالي فإن ملف app.yml الموجود مسبقًا من لقطة شاشة المنشور الأول، والحاجة إلى ترقية PostgreSQL من الإصدار 10 إلى 12 (والذي لا أعتقد أنك قمت به، بالنظر إلى رسالة الخطأ، ربما قمت بذلك على المضيف الخاص بك ولكن ليس داخل حاوية البيانات الخاصة بك، والتي قد لا تكون موجودة بعد الآن، لا أعرف حالة التثبيت السابق لديك)؟
هل لديك نسخة احتياطية، وهل تريد تثبيتًا جديدًا؟

أعتقد أن @pfaffman يقصد أنه نظرًا لأنك تستخدم وكيل عكسي (nginx)، فقد لا يعمل السكربت discourse-setup (لم أقم بتشغيل discourse مع وكيل عكسي من قبل، لذا لا أعرف ما إذا كان هذا هو الحال). إذا قمت بتعريف app.yml بشكل صحيح، فيجب أن يكون كل شيء على ما يرام دون الحاجة لتشغيل discourse-setup.

يبدو أن هذا يحاول تنفيذ هذا الكود داخل حاوية لا تحتوي على postgres 10 (أنت على الأرجح تستخدم الإصدار 12). إذا كان هذا ما تريده، وكانت قالبك هو templates/postgres.template.yml كما هو محدد في منشورك الأول، فقد يكون مستودع discourse_docker على جهازك (في /var/discourse) قديمًا.

هل نسخة discourse المثبتة لديك حديثة أم قديمة؟ قد يحل تحديث المستودع هذه المشكلة:

cd /var/discourse
git pull

ثم قم بتشغيل خطوة إعادة البناء.

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

إذا لم ينجح الأمر ولديك نسخة احتياطية، فمن المستحسن محاولة التثبيت على مثيل جديد تمامًا كما قال @Benjamin_D.

@بنجامين_دي،

أحاول تثبيت discourse لنطاق آخر “فوق” التثبيت السابق. وبشكل أدق، نطاقان على نفس الخادم. أرجو أن تعذروا جهلي، في أي جزء من ملف app.yml يمكنني العثور على postgresql؟ لأنني نظرت في ملف app.yml الخاص بي ولم أجد أي شيء متعلق بذلك.

لدي نسخ احتياطية للملفات القديمة التي كانت لدي، وقد قمت بنسخ بعض المعلومات من التثبيت السابق إلى ملف app.yml الجديد للخادم الجديد.

@لوكاس_باسكويروتو

هنا أيضًا، أرجو أن تعذروا جهلي، هل تشيرون إلى هذا السطر عندما تقولون “الوكيل” nginx؟

location / {
        proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock;
        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_set_header X-Real-IP $remote_addr;

من قبل كنت أستخدم postgresql الإصدار 10، لكنني قمت بترقيته إلى الإصدار 12 أمس.

أود جدًا بدء مثيل جديد في هذه الحالة، كيف يمكنني إزالة النسخ القديمة للتأكد من أن كل شيء سيتم تثبيته بشكل جديد؟ شكرًا جزيلاً.

حالتا نقاش على نفس الخادم، هذا سيكون تكوينًا متعدد المواقع، قصة مختلفة تمامًا :smile:
حاليًا، أعتقد أن الأفضل هو التأكد من وجود نسخة احتياطية للموقع الأول، وجعله يعمل مع ترقية pg12، ثم تجربة مغامرة تعدد المواقع التي لا أملك المؤهلات الكافية لها على الإطلاق :sweat_smile:

شكرًا لك بنيامين،

أود أن أبدأ من جديد. لدي نسخة احتياطية من الموقع الأول، لكنها كانت تجربة ولم تعد ضرورية. أود أن أبدأ من الصفر مرة أخرى.

كيف يمكنني إزالة الحاوية القديمة وكل شيء حتى أتمكن من البدء بلوحة جديدة؟

هل جربت تحديث مستودع discourse_docker محليًا (في /var/discourse) أولًا؟ هل لم ينجح الأمر؟

بخصوص الوكيل العكسي، فإن السبب هو أن nginx يقع في وسط الطلبات ويقوم بتوجيهها إلى الخدمات الصحيحة (بدلاً من تعريض الخدمة، وهي discourse في هذه الحالة، مباشرةً للإنترنت)، لذا فإن nginx يعمل كوكيل عكسي، والمنافذ (80 و443) المعروضة على الإنترنت تنتمي إلى خدمة nginx.

من الغريب أن إعداد discourse نجح في فبراير على أحد نطاقاتي، كما لاحظت يا بنيامين، تذكر ذلك لأنني كنت أيضًا أنشر محتوى متعلقًا بذلك منذ فترة. لذا أنا مندهش من أن الناس لم يشغّلوا discourse مع nginx أبدًا. وبصراحة، كان يعمل بشكل ممتاز حتى الأمس عندما حاولت تثبيت discourse على نطاق آخر باستخدام نفس الخادم.

ما الذي يجب أن أبحث عنه بالضبط في discourse_docker؟ إليك محتويات ذلك المجلد:

discourse_docker$ ls
bin   containers        discourse-setup  launcher  README.md  scripts  templates
cids  discourse-doctor  image            LICENSE   samples    shared

ما عليك سوى تشغيل git pull لتحديث المستودع (المجلد /var/discourse نفسه هو المستودع المحلي)، كما ذكرت في أحد المنشورات أعلاه:

وبعد ذلك قم بتشغيل أمر إعادة البناء.

هناك أشخاص آخرون يستخدمون nginx كواجهة أمامية، لكن الحالات يجب أن تكون أقل بكثير من التثبيت القياسي على جهاز مخصص لـ Discourse فقط. ولا أعرف أيضًا ما إذا كان ذلك يكسر discourse-setup، فأنا أتخيل ذلك بناءً على نتائجك، وبما أن الخطأ حدث أثناء فحص DNS والمنافذ المفتوحة (مع الأخذ في الاعتبار أن حاوية Discourse الخاصة بك هي التي تستخدم المنافذ 80 و 443 على المضيف).

حسناً، لقد ذهبت إلى مجلد discourse_docker كما ذكر لوكاس، ونسخت ملف app.yml الخاص بي إلى حاويات ذلك المجلد، وقمت بتشغيل الأمر ./launcher rebuild app

حدث شيء ما دون أي خطأ، وأعتقد أنه يعمل

لا أريد أن أستبق الأمور بعد، سأحاول الآن إعداد الحساب الجديد :smiley: