NGINX no se inicia

¡Hola a todos!

Estoy intentando instalar Discourse en un subdominio.
Mi dominio principal está ejecutando WordPress, que se construyó usando docker-compose.
El subdominio y el dominio están utilizando el mismo servidor VPS.

Para la instalación, seguí esta guía: https://meta.discourse.org/t/run-other-websites-on-the-same-machine-as-discourse/17247

Desafortunadamente, NGIX no se puede iniciar. Cuando ejecuto el comando systemctl status nginx, aparece el siguiente mensaje:

× nginx.service - Un servidor web de alto rendimiento y un servidor proxy inverso
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since vie 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 servidor web de alto rendimiento y un servidor proxy inverso...
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 servidor web de alto rendimiento y un servidor proxy inverso.

Mi archivo de sitio para 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;
        #}
}

Lo he revisado varias veces, pero no puedo encontrar dónde está el error.

Lo siento, soy un principiante en Linux / NGINX / Docker. Cualquier consejo sería apreciado. Gracias.

1 me gusta

¿Hay otro servidor web en esa máquina que esté acaparando el puerto 80?

1 me gusta

¿Cambiaste los puertos en app.yml para que Discourse no intente usar los puertos que NGINX desea?

Esta es una configuración avanzada que requiere comprensión de DNS, https y certificados, nginx, proxies inversos, docker y enrutamiento.

1 me gusta

Como mencioné, WordPress se está ejecutando en el dominio principal.

Si entendí correctamente, el otro NGINX funciona en el contenedor junto con WordPress.

Seguí este tutorial: How To Install WordPress With Docker Compose | DigitalOcean

Si ejecuto el comando netstat -tulnp, esto es lo que obtengo:

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

Las instrucciones sugieren comentarlos, así que lo hice:

## ¿Qué puertos TCP/IP debe exponer este contenedor?
## Si desea que Discourse comparta un puerto con otro servidor web como Apache o nginx,
## consulte https://meta.discourse.org/t/17247 para obtener detalles
expose:
  # - "80:80"   # http
  # - "443:443" # https

Entiendo los registros DNS, https y los certificados. Solo el resto es nuevo para mí.

No te preocupes, sé cómo buscar en Google y aprendo rápido :wink:

1 me gusta

Antes de que comenzaras con esto, ¿estaba detrás de un proxy inverso NGINX que funciona y al que estás agregando Discourse?

¿O si Apache/WordPress se estaba ejecutando antes, eso es lo que tiene el puerto 80?

Oh, parece que docker-proxy tiene el puerto 80, ¿así que tal vez tenías tu WordPress detrás de docker-proxy?

Tal vez docker ps para ver si puedes ver qué contenedor docker

1 me gusta

Como dije, creo que el otro NGIX (el de wordpress) funciona en un contenedor junto con MySQL y Wordpress.

Esto es lo que obtengo al ejecutar el comando 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

Por eso el nginx externo no puede arrancar, ya que los puertos están ocupados por el interno. Probablemente necesites apagar ese contenedor y transferir su configuración para Wordpress a la capa externa de nginx.

Además, esos son contenedores separados, el nginx está separado de MySQL y WordPress.

1 me gusta

Apagué el servidor web (contenedor NGIX) e intenté iniciar el NGIX externo. Todavía no funciona.

Tienes razón. Es mi culpa. Pensé que todas las aplicaciones mencionadas estaban en un solo contenedor.

Un contenedor = una aplicación/programa :wink:

¿Cómo se ven ahora docker ps y netstat -tulnp?

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

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      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

No hay mucho más que pueda hacer aquí, ¿nginx parece que todavía está haciendo lo mismo o el error ha cambiado en algo?

Esto debería hacerse junto con la adición de la plantilla web.socketed.template.yml, ¿lo hiciste?

2 Me gusta

Sí, lo hice.

Intenté desinstalar y reinstalar NGIX y eliminé el archivo de configuración. Sin embargo, el problema persiste.

Intentaré buscar los errores de NGIX listados y ver qué encuentro.

¡Resolví el problema de NGIX! :grinning:

En la carpeta /etc/nginx/sites-enabled/ había un archivo sin sentido “ysystemctl status nginx”. Lo eliminé.

¡Ahora NGIX está funcionando! :muscle:

Seguiré las instrucciones de riking y te haré saber cómo resulta.

1 me gusta

¡Ok, mi foro de Discourse está en funcionamiento!

Desafortunadamente, las instrucciones no mencionan cómo modificar la configuración de NGINX, que está ejecutando el sitio web/WordPress.

Solo dice esto: Crea otros “sitios” de NGINX, luego enlázalos y habilítalos, como en el último paso anterior.

Agradecería mucho cualquier consejo sobre cómo lograr esto.

Instalé WordPress según esta guía: Cómo instalar WordPress con Docker Compose

Además de eso, ¿puedes confirmar o negar mis conclusiones?

  1. NGINX (el que no está en el contenedor) se utiliza como proxy inverso.
  2. NGINX (el que no está en el contenedor) se denomina “NGINX externo”.
  3. NGINX (el que no está en el contenedor) utiliza sockets Unix en lugar de puertos TCP para la comunicación en la configuración actual.
  4. Discourse es una aplicación independiente y, por lo tanto, no necesita instalar su propio servidor web NGINX.

Me disculpo si estoy tratando de verificar cosas obvias. Solo quiero estar 100% claro.

Eso es prácticamente todo.

El contenedor de Discourse incluye nginx, rails, postgres y redis.

1 me gusta