ArgumentError: الدليل الخاص بـ pid=/.../unicorn.pid غير قابل للكتابة

هذا هو ذيل ملف unicorn.stderr.log الخاص بي، إذا كان ذلك مفيدًا

I, [2023-08-22T04:18:52.795267 #81]  INFO -- : Refreshing Gem list
fatal: detected dubious ownership in repository at '/var/www/discourse'
To add an exception for this directory, call:

	git config --global --add safe.directory /var/www/discourse
I, [2023-08-22T04:18:57.742262 #81]  INFO -- : listening on addr=127.0.0.1:3000 fd=10
fatal: detected dubious ownership in repository at '/var/www/discourse'
To add an exception for this directory, call:

	git config --global --add safe.directory /var/www/discourse
I, [2023-08-22T04:19:04.916798 #81]  INFO -- : starting 1 supervised sidekiqs
I, [2023-08-22T04:19:04.927971 #81]  INFO -- : starting up EmailSync demon
I, [2023-08-22T04:19:07.993280 #81]  INFO -- : master process ready
I, [2023-08-22T04:19:11.010040 #174]  INFO -- : worker=0 ready
I, [2023-08-22T04:19:11.994849 #188]  INFO -- : worker=1 ready
I, [2023-08-22T04:19:12.524936 #203]  INFO -- : worker=2 ready

أوبونتو 22.04 (خادم)

تم إعداده حديثًا من مضيف سحابي. لم أفعل شيئًا سوى تحديث النظام، وتثبيت docker، و zsh، و nginx، وتشغيل الإعداد لـ discourse، والذي فشل

تعديل:

لقد أعدت بناء الخادم السحابي باستخدام Fedora، وقمت فقط بتثبيت docker، ثم حاولت التثبيت الجديد مرة أخرى.

خطأ مختلف آخر

[الثلاثاء 22 أغسطس 2023 05:51:02 مساءً بتوقيت جرينتش] تشغيل أمر إعادة التحميل: sv reload nginx
تحذير: nginx: غير قادر على فتح supervise/ok: الملف غير موجود
[الثلاثاء 22 أغسطس 2023 05:51:02 مساءً بتوقيت جرينتش] خطأ إعادة التحميل لـ:
بدأ تشغيل runsvdir، المعرف هو 2941
ok: run: redis: (pid 2953) 0s
ok: run: postgres: (pid 2954) 0s
supervisor pid: 2949 unicorn pid: 2981

nginx الداخلي لا يريد العمل

انتظر، لماذا قمت بتثبيت nginx؟ سيفشل التثبيت الافتراضي إذا كان هناك شيء ما على المضيف يستخدم المنفذ 80 بالفعل.

على قطرة Digital Ocean جديدة، لم أفعل شيئًا لم يكن في دليل التثبيت الرسمي، وقد نجح الأمر. السماح لمثبت Discourse بتثبيت docker لي وكل شيء.

محاولة إعادة إنتاج هذا تثبت صعوبة.

إعجابَين (2)

نعم، يبدو الأمر كذلك. يبدو بالتأكيد أنه أمر واقع بما أنني رأيت العديد من الأشخاص يبلغون عنه (@DarthLasciel ، @Godmar_Back وربما @kdambekalns).

أخبرني إذا كان هناك أي شيء تريد رؤيته من تثبيتي.

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

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

أيضًا، هل يمكنك مشاركة ملف app.yml الخاص بك [redacted]؟

على وجه التحديد، يرجى التأكد من إخفاء متغير البيئة DISCOURSE_SMTP_PASSWORD وأي أجزاء حساسة أخرى.

أيضًا:

هل يمكنك تجربة إضافة هذا إلى عنوان URL؟ ?safe_mode=no_plugins

إذا نجح الأمر، فقد يشير ذلك إلى وجود أخطاء في المكونات الإضافية.

باستثناء جزء النطاق الفرعي، لقد فعلت ذلك بالضبط.
خادم Fedora جديد، تثبيت docker، تثبيت discourse، الإعداد بدون تثبيت nginx على الخادم. يؤدي إلى الخطأ المذكور أعلاه.

## هذا هو قالب حاوية Discourse Docker المستقل والمتكامل
##
## بعد إجراء تغييرات على هذا الملف، يجب عليك إعادة البناء
## /var/discourse/launcher rebuild app
##
## كن حذرًا جدًا عند التحرير!
## ملفات YAML حساسة للغاية للأخطاء في المسافات البيضاء أو المحاذاة!
## قم بزيارة http://www.yamllint.com/ للتحقق من صحة هذا الملف حسب الحاجة

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  ## قم بإلغاء التعليق على السطر التالي لتمكين مستمع IPv6
  #- "templates/web.ipv6.template.yml"
  - "templates/web.ratelimited.template.yml"
  ## قم بإلغاء التعليق على هذين السطرين إذا كنت ترغب في إضافة Lets Encrypt (https)
  #- "templates/web.ssl.template.yml"
  #- "templates/web.letsencrypt.ssl.template.yml"

## ما هي منافذ TCP/IP التي يجب أن تعرضها هذه الحاوية؟
## إذا كنت تريد أن تشارك Discourse منفذًا مع خادم ويب آخر مثل Apache أو nginx،
## راجع https://meta.discourse.org/t/17247 للحصول على التفاصيل
expose:
  - "9980:80"   # http
#  - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## اضبط db_shared_buffers على حد أقصى 25٪ من الذاكرة الإجمالية.
  ## سيتم تعيينه تلقائيًا بواسطة bootstrap بناءً على الذاكرة العشوائية المكتشفة، أو يمكنك تجاوزها
  #db_shared_buffers: "256MB"

  ## يمكن أن يحسن أداء الفرز، ولكنه يضيف استخدام الذاكرة لكل اتصال
  #db_work_mem: "40MB"

  ## أي مراجعة Git يجب أن تستخدمها هذه الحاوية؟ (الافتراضي: tests-passed)
  #version: tests-passed

env:
  LC_ALL: de_DE.UTF-8
  LANG: de_DE.UTF-8
  LANGUAGE: de_DE.UTF-8
  # DISCOURSE_DEFAULT_LOCALE: en

  ## كم عدد طلبات الويب المتزامنة التي يتم دعمها؟ يعتمد على الذاكرة وأنوي CPU.
  ## سيتم تعيينه تلقائيًا بواسطة bootstrap بناءً على وحدات المعالجة المركزية المكتشفة، أو يمكنك تجاوزها
  #UNICORN_WORKERS: 3

  ## TODO: اسم النطاق الذي ستستجيب له هذه النسخة من Discourse
  ## مطلوب. لن تعمل Discourse مع رقم IP فارغ.
  DISCOURSE_HOSTNAME: 'redacted.de'

  ## قم بإلغاء التعليق إذا كنت تريد بدء تشغيل الحاوية بنفس
  ## اسم المضيف (-h option) كما هو محدد أعلاه (الافتراضي "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: قائمة بالبريد الإلكتروني المفصولة بفواصل والتي ستصبح مسؤولاً ومطورًا
  ## عند التسجيل الأولي مثال 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'me@example.com,you@example.com'

  ## TODO: خادم البريد SMTP المستخدم للتحقق من الحسابات الجديدة وإرسال الإشعارات
  # عنوان SMTP واسم المستخدم وكلمة المرور مطلوبة
  # تحذير الحرف '#' في كلمة مرور SMTP يمكن أن يسبب مشاكل!
  DISCOURSE_SMTP_ADDRESS: none.com
  #DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: user@none.com
  DISCOURSE_SMTP_PASSWORD: none
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (اختياري، الافتراضي صحيح)
  #DISCOURSE_SMTP_DOMAIN: discourse.example.com    # (مطلوب من قبل بعض المزودين)
  #DISCOURSE_NOTIFICATION_EMAIL: noreply@discourse.example.com    # (العنوان لإرسال الإشعارات منه)

  ## إذا أضفت قالب Lets Encrypt، قم بإلغاء التعليق أدناه للحصول على شهادة SSL مجانية
  #LETSENCRYPT_ACCOUNT_EMAIL: me@example.com

  ## عنوان CDN HTTP أو HTTPS لهذه النسخة من Discourse (تم تكوينه للسحب)
  ## راجع https://meta.discourse.org/t/14857 للحصول على التفاصيل
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com
  
  ## مفتاح Maxmind geolocation IP للبحث عن عنوان IP
  ## راجع https://meta.discourse.org/t/-/137387/23 للحصول على التفاصيل
  #DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456

## الحاوية Docker عديمة الحالة؛ يتم تخزين جميع البيانات في /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## الإضافات هنا
## راجع https://meta.discourse.org/t/19157 للحصول على التفاصيل
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

## أي أوامر مخصصة لتشغيلها بعد البناء
run:
  - exec: echo "Beginning of custom commands"
  ## إذا كنت ترغب في تعيين عنوان البريد الإلكتروني 'من' للتسجيل الأول الخاص بك، قم بإلغاء التعليق والتغيير:
  ## بعد الحصول على البريد الإلكتروني الأول للتسجيل، أعد التعليق على السطر. يحتاج إلى التشغيل مرة واحدة فقط.
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  - exec: echo "End of custom commands"

لدي نفس مشكلة الإذن حيث لا يمكن الكتابة إلى unicorn.pid. أردت أن أقدم لك المزيد من المعلومات من خلال معرفة ما إذا كان يمكن تكرارها باستخدام دليل التثبيت الرسمي، ولكنه لا يتناسب مع نظامي. أولاً، اشتكى لأن المنافذ 80/443 قيد الاستخدام بالفعل، ثم أجرى بعض فحوصات البريد الإلكتروني التي فشلت. هل لديك ملف app.yml ينشئ فقط صورة docker لا تتطلب أي شيء خارجي؟ يفترض أن تتكرر نفس المشكلة مع ذلك بنفس القدر.

لقد قمت “بإصلاح” المشكلة، وأشعر بغباء شديد.

بدلاً من تثبيت دوكر “بالطريقة الصحيحة”، قمت فقط بإدخال “sudo apt install docker-compose” واستمررت في العمل. بدا دوكر وكأنه يعمل… بدا…

لقد قمت بإعادة تثبيته بالطريقة التي يخبرني بها دليل دوكر، مضيفًا مستودعًا آخر، ومفاتيح، وكل تلك الأشياء… ويعمل الخطاب!

7 إعجابات

لذا كان تثبيت دوكر (docker) المعطوب هو السبب. أنا حقًا لا أفهم كيف لا يزال من الصعب جدًا تثبيت دوكر (docker) محدث وعملي. ويبدو أنهم أخيرًا دمجوا دوكر-كومبوز (docker-compose) في دوكر (docker) (لذا يمكنك القيام بـ docker compose ...)، على الرغم من أنني لم أهتم بذلك عن كثب بعد.

@rtwfroody و @StanD هل هذا يحل مشكلتك أيضًا؟

إعجابَين (2)

لكننا لا نستخدم docker-compose على الإطلاق

من الجيد معرفة ذلك ، لكن دليلنا لا يطلب أيًا من هذا ، فأنت تقوم بتشغيل discourse-setup وسيقوم بتثبيت دوكر لك.

أنا متأكد من أن تثبيت دوكر الخاص بي على ما يرام ولا أستخدم دوكر كومبوز. بصراحة، كل ما فعلته هو إزالة إضافة (إضافة discourse-checklist التي لم تعد هناك حاجة إليها) وإعادة البناء على نسخة مستضافة ذاتيًا ومحدثة تعمل بشكل جيد لسنوات.

للأسف، أبقاني عملي اليومي بعيدًا عن النظر في هذا الأمر خلال الـ 24 ساعة الماضية. يجب أن أستأنفه مرة أخرى هذا المساء. سأرى ما إذا كان بإمكاني تقديم المزيد من المعلومات.

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

واجهت نفس المشكلة عندما كنت أقوم بتثبيت جديد على EC2 (Ubuntu 22.04.3 LTS).
كان لدي خبرة سابقة في إعداد discourse (حوالي 2-3 مرات).

في البداية، اعتقدت أنها مشكلة في البناء وقمت بتشغيل ./launcher rebuild app عدة مرات، مما أدى إلى استنفاد الحد الأسبوعي لشهادات SSL الذي تقدمه Let’s Encrypt، ولهذا السبب كان الموقع يعطي خطأ site cant be reached error.

لاحقًا، حاولت تشغيل ./launcher logs app. كان يظهر الأخطاء التالية:

  1. directory for pid=/var/www/discourse/tmp/pids/unicorn.pid not writable (ArgumentError).
  2. \"detail\": \"Error creating new order :: too many certificates (5) already issued for this exact set of domains in the last 168 hours - مشكلة حد Let’s Encrypt.

الشيء الوحيد الذي قمت به بشكل مختلف عن الدليل الرسمي كان تثبيت docker.
قمت بتثبيت docker باستخدام sudo apt install docker.io. قمت بإلغاء تثبيته بالكامل وتركت تثبيت docker يحدث مع ./discourse-setup.

ونجح الأمر!!

كما قال @pfaffman، كانت مشكلة في تثبيت docker.

ملاحظة: تقدمت بطلب باستخدام نطاق فرعي جديد في المرة الثانية من التثبيت حيث كان عليّ إعداد خادم discourse حسب الأولوية.

أثالث ما قاله @pfaffman و @csgeek، نجح ما يلي بالنسبة لي:

  1. apt remove docker.io، إزالة docker.io (20.10.25-0ubuntu1~22.04.1)
  2. تشغيل ./discourse-setup حتى يقوم بتثبيت docker، ثم الخروج منه.
  3. systemctl start docker
  4. ./launcher rebuild app

هذا على نظام يعمل بنظام Ubuntu 22.04.3 LTS.

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

مرحباً @jeanas. يبدو هذا هو الشيء الذي يجب تجربته. هل يمكنك فعل هذا:

وإذا نجح ذلك معك، فهل يمكنك تمييز منشوره كحل؟

[ملاحظة: حالتي ليست مشكلة #تثبيت حقًا ولكن الخطأ الذي تم إنتاجه هو نفس الخطأ في هذا الموضوع وقد يكون إصلاحي (أدناه) مفيدًا للآخرين. المشرفون (@pfaffman؟)، لا تترددوا في تصنيف هذا بشكل أنسب.]

تظهر رسالة ArgumentError بعد تشغيل ./launcher rebuild app على نسختي المستضافة ذاتيًا والمثبتة في Docker (مثبتة وتعمل لسنوات عديدة). يحدث ذلك لأن unicorn غير قادر على كتابة ملف pid إلى الدليل /var/www/discourse/tmp/pids (داخل الحاوية). يظهر السجل حلقة من رسائل ArgumentError أثناء محاولته كتابة هذا الملف كل بضع ثوانٍ.

أسجل الدخول إلى الحاوية من الجهاز المضيف عبر

docker exec -it app bash

من داخل الحاوية أقوم بتشغيل

find /var/www/discourse -printf '%u:%g\\n'  | sort -t: -u

هذا يعرض لي قائمة بالمالك:المجموعات في هذا الدليل

root:root
discourse:discourse

ثم أجعل الدليل /var/www/discourse/tmp/pids قابلاً للقراءة عالميًا عبر

chmod +r /var/www/discourse/tmp/pids

في هذه المرحلة، يتم كتابة ملف unicorn.pid إلى هذا الدليل. الملف له مالك:مجموعة discourse:www-data.

كان إصلاحي هو تغيير ملكية /var/www/discourse بشكل متكرر إلى discourse:www-data.

chown -R discourse:www-data /var/www/discourse

يستغرق هذا وقتًا طويلاً نظرًا لوجود أكثر من 100,000 ملف. من المحتمل ألا يكون من الضروري القيام بالدليل بأكمله ولكن هذا ما فعلته.

أخيرًا، جعلت ملف /etc/postgres/13/main/pb_hba.conf قابلاً للقراءة عالميًا

chmod +r /etc/postgres/13/pg_hba.conf

أعد تشغيل الحاوية وكل شيء يعمل.

يبدو أن إعداد ملكية الملف ليس صحيحًا تمامًا ولكني لست ملمًا بما يكفي بفن تعيين الأذونات لمعرفة إصلاح أبسط. حقيقة أن ملف unicorn.pid له مجموعة www-data تبدو مفتاحية.

يبدو أنه سيتعين عليّ المرور بهذه الإجراءات في كل مرة أقوم فيها بإعادة بناء (rebuild) (أي في أي وقت أقوم فيه بتغيير ملف app.yml). لاحظ أيضًا أنه لا يبدو أنه مشكلة مع أي مكون إضافي معين.

نأمل أن تكون هذه معلومات كافية لأحد المطورين لإلقاء نظرة والقول: “بالطبع! يجب علي فقط تغيير x للإصلاح.”

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

ربما تكون مشكلتك مختلفة عن مشاكل الآخرين. ما هو إصدار دوكر الذي تستخدمه وكيف قمت بتثبيته؟

أتفق على أنه لا معنى أن يكون دوكر الذي يعمل لديك منذ فترة طويلة هو المشكلة

تشغيل docker --version على الخادم الخاص بي يُرجع

Docker version 20.10.25, build 20.10.25-0ubuntu1~22.04.1

يبدو أنني قد لا أكون محدثًا؟

إعجابَين (2)

هذه النسخة من دوكر نجحت معي يا @StanD.

Docker version 24.0.5, build ced0996.

يمكنك تجربة هذا.

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

نعم! لقد نجح ذلك معي.

بناءً على تجربتي وتجربة @Stand، يبدو أن Discourse لم يعد يعمل على إصدارات Docker القديمة.

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