NGINX يفشل في البدء

أهلاً بالجميع!

أحاول تثبيت Discourse على نطاق فرعي.
نطاقي الرئيسي يعمل بنظام WordPress، والذي تم بناؤه باستخدام docker-compose.
النطاق الفرعي والنطاق يستخدمان نفس خادم VPS.

للتثبيت، اتبعت هذا الدليل: https://meta.discourse.org/t/run-other-websites-on-the-same-machine-as-discourse/17247

للأسف، لا يمكن بدء تشغيل NGIX. عندما أقوم بتشغيل الأمر systemctl status nginx، تظهر الرسالة التالية:

× nginx.service - خادم ويب عالي الأداء وخادم وكيل عكسي
     تم التحميل: تم التحميل (/lib/systemd/system/nginx.service؛ ممكّن؛ إعداد افتراضي: ممكّن)
    نشط: فشل (النتيجة: رمز خروج) منذ الجمعة 2024-03-08 07:06:36 CST؛ قبل 1 ساعة و 14 دقيقة
      المستندات: man:nginx(8)
    العملية: 27329 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (رمز الخروج، الحالة=0/نجاح)
    العملية: 27330 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (رمز الخروج، الحالة=1/فشل)
        وحدة المعالجة المركزية: 42 مللي ثانية

08 مارس 07:06:33 vmi1695712.contaboserver.net systemd[1]: بدء خادم ويب عالي الأداء وخادم وكيل عكسي...
08 مارس 07:06:33 vmi1695712.contaboserver.net nginx[27330]: nginx: [emerg] فشل الربط بـ 0.0.0.0:80 (98: خطأ غير معروف)
08 مارس 07:06:34 vmi1695712.contaboserver.net nginx[27330]: nginx: [emerg] فشل الربط بـ 0.0.0.0:80 (98: خطأ غير معروف)
08 مارس 07:06:34 vmi1695712.contaboserver.net nginx[27330]: nginx: [emerg] فشل الربط بـ 0.0.0.0:80 (98: خطأ غير معروف)
08 مارس 07:06:35 vmi1695712.contaboserver.net nginx[27330]: nginx: [emerg] فشل الربط بـ 0.0.0.0:80 (98: خطأ غير معروف)
08 مارس 07:06:35 vmi1695712.contaboserver.net nginx[27330]: nginx: [emerg] فشل الربط بـ 0.0.0.0:80 (98: خطأ غير معروف)
08 مارس 07:06:36 vmi1695712.contaboserver.net nginx[27330]: nginx: [emerg] لا يزال غير قادر على الربط()
08 مارس 07:06:36 vmi1695712.contaboserver.net systemd[1]: nginx.service: تم إنهاء عملية التحكم، الرمز=منتهي، الحالة=1/فشل
08 مارس 07:06:36 vmi1695712.contaboserver.net systemd[1]: nginx.service: فشل مع النتيجة 'رمز خروج'.
08 مارس 07:06:36 vmi1695712.contaboserver.net systemd[1]: فشل في بدء خادم ويب عالي الأداء وخادم وكيل عكسي.

ملف الموقع الخاص بي لـ Discourse:

# إعدادات الخادم الافتراضية
#
server {
        # listen 80 default_server;
        # listen [::]:80 default_server;

        # إعدادات SSL
        #
        # listen 443 ssl default_server;
        # listen [::]:443 ssl default_server;
        #
        # ملاحظة: يجب عليك تعطيل gzip لحركة مرور SSL.
        # انظر: https://bugs.debian.org/773332
        #
        # اقرأ عن ssl_ciphers للتأكد من إعداد آمن.
        # انظر: https://bugs.debian.org/765782
        #
        # شهادات ذاتية التوقيع تم إنشاؤها بواسطة حزمة ssl-cert
        # لا تستخدمها في خادم إنتاجي!
        #
        # include snippets/snakeoil.conf;

        root /var/www/html;

        # أضف index.php إلى القائمة إذا كنت تستخدم PHP
        index index.html index.htm index.nginx-debian.html;

        server_name forum.ictsharks.com;

        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 $scheme;
                proxy_set_header X-Real-IP $remote_addr;
                # حاول أولاً تقديم الطلب كملف، ثم
                # كدليل، ثم ارجع إلى عرض 404.
                # try_files $uri $uri/ =404;
        }

        # تمرير نصوص PHP إلى خادم FastCGI
        #
        #location ~ \.php$ {
        #       include snippets/fastcgi-php.conf;
        #
        #       # مع php-fpm (أو مقابس Unix أخرى):
        #       fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        #       # مع php-cgi (أو مقابس TCP أخرى):
        #       fastcgi_pass 127.0.0.1:9000;
        #}

        # منع الوصول إلى ملفات .htaccess، إذا كان جذر مستند Apache
        # يتوافق مع جذر NGINX
        #
        #location ~ /\\.ht {
        #       deny all;
        #}
}

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

آسف، أنا مبتدئ في أمور Linux / NGINX / Docker. أي نصيحة ستكون موضع تقدير. شكراً لك.

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

هل يوجد خادم ويب آخر على هذا الجهاز يحتكر المنفذ 80؟

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

هل قمت بتغيير المنافذ في app.yml حتى لا يحاول Discourse استخدام المنافذ التي يريدها NGINX؟

هذا إعداد متقدم يتطلب فهمًا لنظام أسماء النطاقات (DNS)، وشهادات HTTPS، و nginx، والوكلاء العكسيين، و docker، والتوجيه.

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

كما ذكرت، يعمل ووردبريس على النطاق الرئيسي.

إذا فهمت بشكل صحيح، فإن NGINX الآخر يعمل في الحاوية مع ووردبريس.

لقد اتبعت هذا البرنامج التعليمي: How To Install WordPress With Docker Compose | DigitalOcean

إذا قمت بتشغيل الأمر netstat -tulnp، فهذا ما أحصل عليه:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      419/systemd-resolve
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1192/docker-proxy
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      463/sshd: /usr/sbin
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      1179/docker-proxy
tcp6       0      0 :::22                   :::*                    LISTEN      463/sshd: /usr/sbin
udp        0      0 127.0.0.53:53           0.0.0.0:*                           419/systemd-resolve

تقترح التعليمات التعليق عليها، لذلك فعلت ذلك:

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

أتفهم سجلات DNS و https والشهادات. فقط الباقي جديد بالنسبة لي.

لا تقلق، أعرف كيف أبحث وأنا متعلم سريع :wink:

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

قبل أن تبدأ هذا، هل كان يعمل خلف وكيل عكسي NGINX يعمل كنت تضيف إليه Discourse؟

أم إذا كان Apache/WordPress يعمل من قبل، فهل هذا ما حصل على المنفذ 80؟

أوه، يبدو أن docker-proxy لديه المنفذ 80، فربما كان لديك ووردبريس خلف docker-proxy؟

ربما docker ps لمعرفة ما إذا كان يمكنك رؤية ما docker

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

كما ذكرت، أعتقد أن NGINX الآخر (الخاص بـ WordPress) يعمل في حاوية مع MySQL و WordPress.

هذا ما أحصل عليه عند تشغيل الأمر docker ps:

CONTAINER ID   IMAGE                        COMMAND                  CREATED          STATUS          PORTS                                      NAMES
6ca4cbec2c88   local_discourse/app          "\"/sbin/boot\""          51 minutes ago   Up 15 minutes                                              app
4a3ebdd9f5b5   nginx:1.15.12-alpine         "\"nginx -g 'daemon of..."   20 hours ago     Up 15 minutes   0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   webserver
42c4211a2fb6   wordpress:5.1.1-fpm-alpine   "\"docker-entrypoint.s..."   2 days ago       Up 15 minutes   9000/tcp                                   wordpress
5b588a7435ad   mysql:8.0                    "\"docker-entrypoint.s..."   2 days ago       Up 15 minutes   3306/tcp, 33060/tcp                        db

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

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

لقد أوقفت خادم الويب (حاوية NGINX) وحاولت تشغيل NGIX الخارجي. لا يزال لا يعمل.

أنت على حق. هذا خطئي. اعتقدت أن جميع التطبيقات المذكورة كانت في حاوية واحدة.

حاوية واحدة = تطبيق/برنامج واحد :wink:

كيف تبدو docker ps و netstat -tulnp الآن؟

CONTAINER ID   IMAGE                        COMMAND                  CREATED       STATUS       PORTS                 NAMES
6ca4cbec2c88   local_discourse/app          " /sbin/boot"            3 hours ago   Up 2 hours                         app
42c4211a2fb6   wordpress:5.1.1-fpm-alpine   "docker-entrypoint.s…"   2 days ago    Up 2 hours   9000/tcp              wordpress
5b588a7435ad   mysql:8.0                    "docker-entrypoint.s…"   2 days ago    Up 2 hours   3306/tcp, 33060/tcp   db

اتصالات الإنترنت النشطة (الخوادم فقط)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      418/systemd-resolve
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      462/sshd: /usr/sbin
tcp6       0      0 :::22                   :::*                    LISTEN      462/sshd: /usr/sbin
udp        0      0 127.0.0.53:53           0.0.0.0:*                           418/systemd-resolve

ليس لدي الكثير لأفعله هنا، هل يبدو أن nginx لا يزال يقوم بنفس الشيء، أم أن الخطأ قد تغير؟

يجب القيام بذلك بالاقتران مع إضافة القالب web.socketed.template.yml، هل قمت بذلك؟

إعجابَين (2)

نعم، لقد فعلت.

لقد حاولت إلغاء تثبيت وإعادة تثبيت NGIX وحذفت ملف التكوين. ومع ذلك، لا تزال المشكلة قائمة.

سأحاول البحث عن أخطاء NGIX المدرجة ومعرفة ما أجده.

لقد قمت بحل مشكلة NGIX! :grinning:

في مجلد /etc/nginx/sites-enabled/ كان هناك ملف غير منطقي “ysystemctl status nginx”. لقد قمت بحذفه.

الآن، NGIX يعمل :muscle:

سأتبع تعليمات riking وسأخبرك بالنتائج.

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

حسنًا، منتدى ديسكورس الخاص بي يعمل الآن!

للأسف، لا تذكر التعليمات كيفية تعديل إعدادات NGINX، الذي يقوم بتشغيل الموقع/ووردبريس.

تقول فقط هذا: قم بإنشاء مواقع NGINX أخرى، ثم قم بربطها وتمكينها، كما في الخطوة الأخيرة أعلاه.

سأكون ممتنًا جدًا لأي نصائح حول كيفية تحقيق ذلك.

لقد قمت بتثبيت ووردبريس وفقًا لهذا الدليل: كيفية تثبيت ووردبريس باستخدام Docker Compose

بخلاف ذلك، هل يمكنك تأكيد أو نفي استنتاجاتي؟

  1. NGINX (الذي ليس داخل الحاوية) يُستخدم كوكيل عكسي.
  2. يُشار إلى NGINX (الذي ليس داخل الحاوية) باسم “NGINX الخارجي”.
  3. يستخدم NGINX (الذي ليس داخل الحاوية) مقابس يونكس بدلاً من منافذ TCP للتواصل في الإعداد الحالي.
  4. ديسكورس هو تطبيق مستقل وبالتالي لا يحتاج إلى تثبيت خادم ويب NGINX الخاص به.

أعتذر إذا كنت أحاول التحقق من أشياء واضحة. أريد فقط أن أكون واضحًا بنسبة 100%.

هذا كل شيء تقريبًا.

يحتوي حاوية discourse على nginx و rails و postgres و redis.

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