NGINX ne démarre pas

Salut tout le monde !

J’essaie d’installer Discourse sur un sous-domaine.
Mon domaine principal fonctionne avec WordPress, qui a été construit en utilisant docker-compose.
Le sous-domaine et le domaine utilisent le même serveur VPS.

Pour l’installation, j’ai suivi ce guide : https://meta.discourse.org/t/run-other-websites-on-the-same-machine-as-discourse/17247

Malheureusement, NGIX ne démarre pas. Lorsque j’exécute la commande systemctl status nginx, le message suivant apparaît :

× nginx.service - Un serveur web haute performance et un serveur proxy inverse
     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 Un serveur web haute performance et un serveur proxy inverse...
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 Un serveur web haute performance et un serveur proxy inverse.

Mon fichier de site pour 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;
        #}
}

Je l’ai vérifié plusieurs fois, mais je n’arrive pas à trouver l’origine de l’erreur.

Désolé, je suis débutant avec Linux / NGINX / Docker. Tout conseil serait apprécié. Merci.

1 « J'aime »

Y a-t-il un autre serveur web sur cette machine qui monopolise le port 80 ?

1 « J'aime »

Avez-vous modifié les ports dans app.yml pour que Discourse n’essaie pas d’utiliser les ports que NGINX souhaite ?

Ceci est une configuration avancée qui nécessite une compréhension de DNS, https et certificats, nginx, proxys inverses, docker et routage.

1 « J'aime »

Comme je l’ai mentionné, WordPress fonctionne sur le domaine principal.

Si j’ai bien compris, l’autre NGINX fonctionne dans le conteneur avec WordPress.

J’ai suivi ce tutoriel : How To Install WordPress With Docker Compose | DigitalOcean

Si j’exécute la commande netstat -tulnp, voici ce que j’obtiens :

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

Les instructions suggèrent de les commenter, alors je l’ai fait :

## quels ports TCP/IP ce conteneur doit-il exposer ?
## Si vous souhaitez que Discourse partage un port avec un autre serveur web comme Apache ou nginx,
## consultez https://meta.discourse.org/t/17247 pour plus de détails
expose:
  # - "80:80"   # http
  # - "443:443" # https

Je comprends les enregistrements DNS, https et les certificats. Seul le reste m’est nouveau.

Ne vous inquiétez pas, je sais comment utiliser Google et j’apprends vite :wink:

1 « J'aime »

Avant de commencer, était-il derrière un proxy inverse NGINX fonctionnel auquel vous ajoutez Discourse ?

Ou si Apache/WordPress fonctionnait avant, c’est ce qui a le port 80 ?

Oh, il semble que docker-proxy ait le port 80, donc peut-être aviez-vous votre WordPress derrière docker-proxy ?

Peut-être docker ps pour voir si vous pouvez voir quel docker

1 « J'aime »

Comme je l’ai indiqué, je pense que l’autre NGIX (celui pour wordpress) fonctionne dans un conteneur avec MySQL et Wordpress.

Voici ce que j’obtiens en exécutant la commande 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

C’est pourquoi le nginx externe ne peut pas démarrer, car les ports sont occupés par celui interne. Vous devez probablement arrêter ce conteneur et transférer sa configuration pour WordPress vers la couche nginx externe.

De plus, ce sont des conteneurs séparés, le nginx est séparé de MySQL et WordPress.

1 « J'aime »

J’ai arrêté le serveur web (conteneur NGINX) et j’ai essayé de démarrer le NGINX externe. Toujours pas de fonctionnement.

Vous avez raison. C’est ma faute. Je pensais que toutes les applications mentionnées étaient dans un seul conteneur.

Un conteneur = une application/un programme :wink:

À quoi ressemblent docker ps et netstat -tulnp maintenant ?

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

Connexions Internet actives (serveurs uniquement)
Proto Recv-Q Send-Q Adresse locale           Adresse distante         État       PID/Nom du programme
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

Je n’ai pas grand-chose d’autre à faire ici, est-ce que nginx semble toujours faire la même chose, ou l’erreur a-t-elle changé ?

Cela devrait être fait en conjonction avec l’ajout du modèle web.socketed.template.yml, l’avez-vous fait ?

2 « J'aime »

Oui, je l’ai fait.

J’ai essayé de désinstaller et de réinstaller NGIX et j’ai supprimé le fichier de configuration. Cependant, le problème persiste.

Je vais essayer de rechercher les erreurs NGIX listées et de voir ce que je trouve.

J’ai résolu le problème NGIX ! :grinning:

Dans le dossier /etc/nginx/sites-enabled/, il y avait un fichier absurde “ysystemctl status nginx”. Je l’ai supprimé.

Maintenant, NGIX fonctionne :muscle:

Je vais suivre les instructions de riking et vous dirai comment ça se passe.

1 « J'aime »

Ok, mon forum Discourse est opérationnel !

Malheureusement, les instructions ne mentionnent pas comment modifier les paramètres de NGINX, qui exécute le site web/WordPress.

Il est seulement dit ceci : Créez d’autres “sites” NGINX, puis liez-les et activez-les, comme à la dernière étape ci-dessus.

J’apprécierais vraiment tout conseil sur la façon d’y parvenir.

J’ai installé WordPress selon ce guide : Comment installer WordPress avec Docker Compose

En dehors de cela, pouvez-vous s’il vous plaît confirmer ou infirmer mes conclusions ?

  1. NGINX (celui qui n’est pas dans le conteneur) est utilisé comme proxy inverse.
  2. NGINX (celui qui n’est pas dans le conteneur) est appelé “NGINX externe”.
  3. NGINX (celui qui n’est pas dans le conteneur) utilise des sockets Unix au lieu de ports TCP pour la communication dans la configuration actuelle.
  4. Discourse est une application autonome et n’a donc pas besoin d’installer son propre serveur web NGINX.

Je m’excuse si j’essaie de vérifier des choses évidentes. Je veux juste être sûr à 100%.

C’est à peu près tout.

Le conteneur Discourse inclut nginx, rails, postgres et redis.

1 « J'aime »