NGINX falha ao iniciar

Olá a todos!

Estou tentando instalar o Discourse em um subdomínio.
Meu domínio principal está rodando WordPress, que foi construído usando docker-compose.
O subdomínio e o domínio estão usando o mesmo servidor VPS.

Para a instalação, segui este guia: https://meta.discourse.org/t/run-other-websites-on-the-same-machine-as-discourse/17247

Infelizmente, o NGIX não consegue iniciar. Quando executo o comando systemctl status nginx, a seguinte mensagem aparece:

× nginx.service - Um servidor web de alto desempenho e um servidor proxy reverso
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; 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 Um servidor web de alto desempenho e um servidor proxy reverso...
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 Um servidor web de alto desempenho e um servidor proxy reverso.

Meu arquivo de site para o 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;
        #}
}

Eu verifiquei várias vezes, mas não consigo descobrir onde está o erro.
Desculpe, sou iniciante em coisas de Linux / NGINX / Docker. Qualquer conselho seria apreciado. Obrigado.

1 curtida

Existe outro servidor web nessa máquina que está ocupando a porta 80?

1 curtida

Você alterou as portas no app.yml para que o Discourse não esteja tentando usar as portas que o NGINX deseja?

Esta é uma configuração avançada que requer compreensão de DNS, https e certificados, nginx, proxies reversos, docker e roteamento.

1 curtida

Como mencionei, o WordPress está rodando no domínio principal.

Se entendi corretamente, o outro NGINX funciona no contêiner junto com o WordPress.

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

Se eu executar o comando netstat -tulnp, é isso que obtenho:

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

As instruções sugerem comentá-los, então eu o fiz:

## quais portas TCP/IP este contêiner deve expor?
## Se você quiser que o Discourse compartilhe uma porta com outro servidor web como Apache ou nginx,
## veja https://meta.discourse.org/t/17247 para detalhes
expose:
  # - "80:80"   # http
  # - "443:443" # https

Eu entendo registros DNS, https e certificados. Apenas o resto é novo para mim.

Não se preocupe, eu sei como pesquisar no Google e sou um aprendiz rápido :wink:

1 curtida

Antes de você começar isso, ele estava por trás de um proxy reverso NGINX funcionando ao qual você está adicionando o Discourse?

Ou se o Apache/WordPress estava rodando antes, é isso que está usando a porta 80?

Ah, parece que docker-proxy tem a porta 80, então talvez você tivesse seu WordPress atrás do docker-proxy?

Talvez docker ps para ver se você consegue ver o que o docker

1 curtida

Como eu disse, acredito que o outro NGINX (o do wordpress) funciona em um contêiner junto com o MySQL e o Wordpress.

É isso que obtenho ao executar o 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 isso que o nginx externo não consegue iniciar, pois as portas estão ocupadas pelo interno. Provavelmente, você precisa encerrar esse contêiner e transferir sua configuração para o WordPress para a camada externa do nginx.

Além disso, esses são contêineres separados, o nginx é separado do MySQL e do WordPress.

1 curtida

Desliguei o servidor web (contêiner NGIX) e tentei iniciar o NGIX externo. Ainda não está funcionando.

Você está certo. A culpa é minha. Eu pensei que todos os aplicativos mencionados estavam em um único contêiner.

Um contêiner = um aplicativo/programa :wink:

Como estão docker ps e netstat -tulnp agora?

CONTAINER ID   IMAGE                        COMMAND                  CREATED       STATUS       PORTS                 NAMES
6ca4cbec2c88   local_discourse/app          \"/sbin/boot\"             3 horas atrás   Up 2 horas                         app
42c4211a2fb6   wordpress:5.1.1-fpm-alpine   \"docker-entrypoint.s…\"   2 dias atrás    Up 2 horas   9000/tcp              wordpress
5b588a7435ad   mysql:8.0                    \"docker-entrypoint.s…\"   2 dias atrás    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

Não há muito mais que eu possa fazer aqui, o nginx parece estar fazendo a mesma coisa, ou o erro mudou alguma coisa?

Isso deve ser feito em conjunto com a adição do template web.socketed.template.yml, você fez isso?

2 curtidas

Sim, eu fiz.

Tentei desinstalar e reinstalar o NGIX e excluir o arquivo de configuração. No entanto, o problema persiste.

Vou tentar procurar os erros do NGIX listados e ver o que encontro.

Resolvi o problema do NGIX! :grinning:

Na pasta /etc/nginx/sites-enabled/ havia um arquivo sem sentido “ysystemctl status nginx”. Eu o deletei.

Agora, o NGIX está funcionando :muscle:

Seguirei as instruções do riking e avisarei como ficou.

1 curtida

Ok, meu fórum do Discourse está no ar!

Infelizmente, as instruções não mencionam como modificar as configurações do NGINX, que está executando o site/WordPress.

Ele apenas diz isto: Crie outros “sites” NGINX, depois vincule e ative-os, como na última etapa acima.

Eu realmente apreciaria qualquer dica sobre como conseguir isso.

Instalei o WordPress de acordo com este guia: Como Instalar o WordPress com Docker Compose

Além disso, você pode confirmar ou negar minhas conclusões?

  1. O NGINX (o que não está no contêiner) é usado como um proxy reverso.
  2. O NGINX (o que não está no contêiner) é referido como “NGINX externo”.
  3. O NGINX (o que não está no contêiner) usa soquetes Unix em vez de portas TCP para comunicação na configuração atual.
  4. O Discourse é um aplicativo independente e, portanto, não precisa instalar seu próprio servidor web NGINX.

Peço desculpas se estou tentando verificar coisas óbvias. Eu só quero ter 100% de clareza.

É basicamente isso.

O contêiner do discourse inclui nginx, rails, postgres e redis.

1 curtida