NGINX kann nicht gestartet werden

Hallo zusammen!

Ich versuche, Discourse auf einer Subdomain zu installieren.
Meine Hauptdomain läuft mit WordPress, das mit docker-compose erstellt wurde.
Die Subdomain und die Domain verwenden denselben VPS-Server.

Für die Installation habe ich diese Anleitung befolgt: https://meta.discourse.org/t/run-other-websites-on-the-same-machine-as-discourse/17247

Leider kann NGIX nicht gestartet werden. Wenn ich den Befehl systemctl status nginx ausführe, erscheint folgende Meldung:

× nginx.service - Ein Hochleistungs-Webserver und Umkehrproxy
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Fri 2024-03-08 07:06:36 CST; 1h 14min ago
       Docs: man:nginx(8)
    Process: 27329 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 27330 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=1/FAILURE)
        CPU: 42ms

Mar 08 07:06:33 vmi1695712.contaboserver.net systemd[1]: Starting Ein Hochleistungs-Webserver und Umkehrproxy...
Mar 08 07:06:33 vmi1695712.contaboserver.net nginx[27330]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Unknown error)
Mar 08 07:06:34 vmi1695712.contaboserver.net nginx[27330]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Unknown error)
Mar 08 07:06:34 vmi1695712.contaboserver.net nginx[27330]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Unknown error)
Mar 08 07:06:35 vmi1695712.contaboserver.net nginx[27330]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Unknown error)
Mar 08 07:06:35 vmi1695712.contaboserver.net nginx[27330]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Unknown error)
Mar 08 07:06:36 vmi1695712.contaboserver.net nginx[27330]: nginx: [emerg] still could not bind()
Mar 08 07:06:36 vmi1695712.contaboserver.net systemd[1]: nginx.service: Control process exited, code=exited, status=1/FAILURE
Mar 08 07:06:36 vmi1695712.contaboserver.net systemd[1]: nginx.service: Failed with result 'exit-code'.
Mar 08 07:06:36 vmi1695712.contaboserver.net systemd[1]: Failed to start Ein Hochleistungs-Webserver und Umkehrproxy.

Meine Site-Datei für Discourse:

# Default server configuration
#
server {
        # listen 80 default_server;
        # listen [::]:80 default_server;

        # SSL configuration
        #
        # listen 443 ssl default_server;
        # listen [::]:443 ssl default_server;
        #
        # Note: You should disable gzip for SSL traffic.
        # See: https://bugs.debian.org/773332
        #
        # Read up on ssl_ciphers to ensure a secure configuration.
        # See: https://bugs.debian.org/765782
        #
        # Self signed certs generated by the ssl-cert package
        # Don't use them in a production server!
        #
        # include snippets/snakeoil.conf;

        root /var/www/html;

        # Add index.php to the list if you are using 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;
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                # try_files $uri $uri/ =404;
        }

        # pass PHP scripts to FastCGI server
        #
        #location ~ \.php$ {
        #       include snippets/fastcgi-php.conf;
        #
        #       # With php-fpm (or other unix sockets):
        #       fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        #       # With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #       deny all;
        #}
}

Ich habe es mehrmals überprüft, aber ich kann den Fehler nicht finden.
Entschuldigung, ich bin ein Anfänger mit Linux / NGINX / Docker. Jeder Rat wäre willkommen. Danke.

1 „Gefällt mir“

Gibt es einen anderen Webserver auf dieser Maschine, der Port 80 belegt?

1 „Gefällt mir“

Haben Sie die Ports in der app.yml geändert, damit Discourse nicht versucht, die Ports zu verwenden, die NGINX benötigt?

Dies ist eine erweiterte Einrichtung, die Kenntnisse von DNS, HTTPS und Zertifikaten, NGINX, Reverse Proxies, Docker und Routing erfordert.

1 „Gefällt mir“

Wie ich bereits erwähnt habe, läuft WordPress auf der Hauptdomain.

Wenn ich das richtig verstanden habe, läuft der andere NGINX zusammen mit WordPress im Container.

Ich habe diesem Tutorial gefolgt: How To Install WordPress With Docker Compose | DigitalOcean

Wenn ich den Befehl netstat -tulnp ausführe, erhalte ich Folgendes:

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

Die Anweisungen schlagen vor, sie zu kommentieren, also habe ich das getan:

## welche TCP/IP-Ports sollte dieser Container verfügbar machen?
## Wenn Sie möchten, dass Discourse einen Port mit einem anderen Webserver wie Apache oder nginx teilt,
## siehe https://meta.discourse.org/t/17247 für Details
expose:
  # - "80:80"   # http
  # - "443:443" # https

Ich verstehe DNS-Einträge, HTTPS und Zertifikate. Nur der Rest ist neu für mich.

Machen Sie sich keine Sorgen, ich weiß, wie man googelt und ich lerne schnell :wink:

1 „Gefällt mir“

Bevor Sie damit begonnen haben, lief es hinter einem funktionierenden NGINX-Reverse-Proxy, dem Sie Discourse hinzufügen?

Oder wenn Apache/WordPress zuvor lief, ist das das, was Port 80 hat?

Oh, es sieht so aus, als hätte docker-proxy Port 80, also hatten Sie vielleicht Ihr WordPress hinter docker-proxy?

Vielleicht docker ps, um zu sehen, ob Sie sehen können, was Docker

1 „Gefällt mir“

Wie ich bereits sagte, glaube ich, dass die andere NGIX (die für WordPress) zusammen mit MySQL und WordPress in einem Container läuft.

Das bekomme ich, wenn ich den Befehl docker ps ausführe:

CONTAINER ID   IMAGE                        COMMAND                  CREATED          STATUS          PORTS                                      NAMES
6ca4cbec2c88   local_discourse/app          „/sbin/boot“             51 Minuten her   Hoch 15 Minuten                                            app
4a3ebdd9f5b5   nginx:1.15.12-alpine         „nginx -g 'daemon of…“   20 Stunden her   Hoch 15 Minuten   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 Tage her       Hoch 15 Minuten   9000/tcp                                   wordpress
5b588a7435ad   mysql:8.0                    „docker-entrypoint.s…“   2 Tage her       Hoch 15 Minuten   3306/tcp, 33060/tcp                        db

Das erklärt, warum der externe Nginx nicht starten kann, da die Ports vom internen belegt sind. Sie müssen diesen Container wahrscheinlich herunterfahren und seine Konfiguration für WordPress auf die äußere Nginx-Schicht übertragen.

Außerdem sind das separate Container, der Nginx ist getrennt von MySQL und WordPress.

1 „Gefällt mir“

Ich habe den Webserver (NGINX-Container) heruntergefahren und versucht, den externen NGINX zu starten. Funktioniert immer noch nicht.

Du hast Recht. Es ist meine Schuld. Ich dachte, alle genannten Apps wären in einem Container.

Ein Container = eine Anwendung/ein Programm :wink:

Wie sehen docker ps und netstat -tulnp jetzt aus?

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

Aktive Internetverbindungen (nur Server)
Proto Recv-Q Send-Q Lokale Adresse           Fremde Adresse          Zustand       PID/Programmname
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

Ich kann hier nicht viel mehr tun. Sieht es so aus, als ob nginx immer noch dasselbe tut, oder hat sich der Fehler überhaupt geändert?

Dies sollte in Verbindung mit dem Hinzufügen der web.socketed.template.yml-Vorlage erfolgen. Haben Sie das getan?

2 „Gefällt mir“

Ja, das habe ich.

Ich habe versucht, NGIX zu deinstallieren und neu zu installieren und die Konfigurationsdatei gelöscht. Das Problem besteht jedoch weiterhin.

Ich werde versuchen, nach den NGIX-Fehlern zu suchen und zu sehen, was ich finde.

Ich habe das NGIX-Problem gelöst! :grinning:

Im Ordner /etc/nginx/sites-enabled/ befand sich eine unsinnige Datei „ysystemctl status nginx“. Ich habe sie gelöscht.

Jetzt funktioniert NGIX :muscle:

Ich werde die Anweisungen von riking befolgen und Sie wissen lassen, wie es ausgeht.

1 „Gefällt mir“

Ok, mein Discourse-Forum ist einsatzbereit!

Leider erwähnen die Anweisungen nicht, wie die Einstellungen für NGINX geändert werden können, das die Website/WordPress ausführt.

Es heißt nur: Erstellen Sie weitere NGINX-“Sites”, verknüpfen und aktivieren Sie diese, wie im letzten Schritt oben beschrieben.

Ich würde mich sehr über Tipps freuen, wie das erreicht werden kann.

Ich habe WordPress gemäß dieser Anleitung installiert: How To Install WordPress With Docker Compose

Bestätigen oder verneinen Sie außerdem bitte meine Schlussfolgerungen?

  1. NGINX (derjenige außerhalb des Containers) wird als Reverse-Proxy verwendet.
  2. NGINX (derjenige außerhalb des Containers) wird im aktuellen Setup als „äußeres NGIX“ bezeichnet.
  3. NGINX (derjenige außerhalb des Containers) verwendet Unix-Sockets anstelle von TCP-Ports für die Kommunikation im aktuellen Setup.
  4. Discourse ist eine eigenständige Anwendung und benötigt daher keinen eigenen NGINX-Webserver.

Ich entschuldige mich, wenn ich offensichtliche Dinge verifiziere. Ich möchte nur zu 100 % sicher sein.

Das ist so ziemlich alles.

Der Discourse-Container enthält nginx, Rails, Postgres und Redis.

1 „Gefällt mir“