경고: 호스트 이름을 사용하여 컴퓨터의 포트 443에 액세스할 수 없는 것 같습니다

Discourse를 설치하기 위해 ./discourse-setup을 실행하고 있는데, 이미지와 같은 오류가 발생합니다.
이 오류를 어떻게 해결할 수 있을까요? 저는 Ubuntu 18.04를 사용 중입니다.

내 DNS 레코드:

제 sudo ufw status verbose:

입력하신 호스트네임에 인쇄할 수 없는 문자가 포함되어 있습니다:

image

다시 시도하되, 문자를 깨끗하게 입력하십시오. 복사/붙여넣기를 사용하는 경우, 소스에도 문제가 없는지 확인하십시오.

변화가 없었습니다.

해당 IP 주소에서 이미 WordPress가 실행 중인 것으로 보입니다.

네, WordPress가 설치되어 있습니다. 같은 서버에서 둘 다 사용할 수 없나요?

가능은 하지만 쉽지 않습니다. 또한 discourse-setup을 사용할 수 없습니다. 다른 서비스가 실행 중인 서버가 아닌 서버에서 먼저 시도해 보시는 것을 권장합니다.

Discourse와 동일한 머신에서 다른 웹사이트 실행.

해당 단계를 따랐지만 결과가 없었습니다. 현재 WEBMIN을 사용하고 있습니다.

다른 아이디어가 있는 분 있으신가요?

전에 링크한 주제의 안내가 여러분에게 작동하지 않는다면, 가장 쉬운 방법은 discourse를 별도의 서버에서 실행하는 것입니다.

webmin과 함께 작동하도록 만드는 것은 매우 어려울 것입니다.

어려울 것임을 알지만, 나는 나를 아마추어로 여기지 않습니다. 링크해 주신 설명서를 시도해 보았습니다. 읽어야 할 다른 링크가 있을까요?

해당 이슈에는 몇 가지 howto 주제가 있습니다.

@Murto 님 안녕하세요

참고로, Rails를 백엔드로 사용하는 Discourse의 경우, TCP/IP 포트 대신 Unix 도메인 소켓을 사용하도록 Rails를 구성하고 Discourse 애플리케이션을 리버스 프록시 뒤에 설치하면 설정이 훨씬 쉽다고 생각합니다.

이 방식은 TCP/IP 포트가 리버스 프록시를 통해서만 노출되고, Discourse 애플리케이션(및 컨테이너)은 Unix 도메인 소켓을 통해 노출되도록 합니다. 이렇게 하면 원하는 만큼의 Discourse 컨테이너 인스턴스를 실행하되, TCP/IP 소켓 충돌에 대해 걱정할 필요가 없습니다. 제 생각에 이는 Discourse를 실행하는 매우 깔끔한 방법입니다.

설치 과정에서 막히거나 방향을 조금 바꾸고 싶다면, 이 사이트에는 이 구성을 안내하는 HOWTO와 튜토리얼이 많이 있습니다. Discourse 배포판에는 “socket” 템플릿이 포함되어 있어 "구성 중 Discourse 부분"을 설정하는 데 사용할 수 있으며, 이후 리버스 프록시만 설정하면(그 방법에 대한 튜토리얼은 수없이 많습니다) "바로 끝"입니다.

도움이 되셨으면 좋겠습니다.

아직 문제를 해결하지 못했어요. 자세히 설명해 줄 수 있는 분 계신가요? :roll_eyes:

이렇게 시도해 보세요:

netstat -lnptu | grep :443

그리고 나서:

kill -9 PID (PID는 위 명령의 출력 번호로 교체)

인터넷에 노출된 서버에 리버스 프록시를 설정하고, 호스트에 따라 요청을 WordPress 또는 Discourse로 리다이렉트하도록 구성하는 것을 권장합니다.

예를 들어, 호스트에서 80과 443 포트를 사용하는 nginx 서비스를 실행하고, blog.yourdomain으로 들어오는 요청을 WordPress 서비스로 프록시하도록 설정할 수 있습니다. (Apache + WordPress인 경우 호스트의 내부 포트, 예를 들어 8080과 같은 Apache 포트로 리다이렉트하거나, fastcgi를 사용할 수 있습니다.)

그 다음 같은 서버에서 Discourse를 실행하되, app.yml의 포트를 호스트에서 사용되지 않는 포트(예: 8081)로 변경하거나, @neounix가 말한 대로 유닉스 소켓을 사용하도록 확인하십시오. 그런 다음 forum.yourdomain으로 들어오는 요청을 해당 포트나 소켓으로 프록시합니다. Discourse를 실행하려면 discourse 디렉터리(보통 /var/discourse입니다)에서 ./launch rebuild app 명령을 실행해야 합니다.

이 경우 2GB 스왑 파일(주로 업그레이드에 사용되며, 더 많은 메모리가 필요할 수 있지만 서버에 메모리가 충분하다면 필요하지 않을 수 있음)을 생성하고 app.yml 파일을 만드는 discourse-setup을 실행하지 않습니다. 대신 이 작업을 직접 수행해야 합니다. app.yml 파일에 무엇을 넣어야 할지 모르겠다면, Discourse에 더 익숙해지고 생성된 app.yml 파일을 확인하기 위해 별도의 서버에서 권장되는 설치 방법을 실행해 보는 것을 권장합니다. 이후 공유 서버에서 이 파일을 사용할 수 있으며(소켓 방식을 사용하는 경우 포트를 변경하거나 제거하는 것을 잊지 마십시오), 진행이 막힐 경우 관련 howto 토픽 중 하나를 따르는 것을 권장합니다.

리버스 프록시 과정을 어떻게 수행하는지 설명해 주실 수 있나요? 해야 할 일은 알지만, 어떻게 해야 하는지는 모르겠습니다.

프록시를 앞에 사용하지 않아서 예시가 바로 손에 있지 않지만, 예전에 구현해 본 기억은 있습니다. 어쨌든 비밀스러운 부분은 없으며, 다른 리버스 프록시와 마찬가지로 설정하면 됩니다. 다음은 포트(소켓이 아닌)를 사용하여 수행해야 할 사항에 대한 개요입니다:

  1. 80번과 443번이 아닌 포트(예: 8443)에서 정상적으로 실행 중인 WordPress 서비스가 있는지 확인하세요. 작동 여부를 확인하기 위해 먼저 인터넷에 노출해 볼 수 있습니다.

  2. Discourse도 동일한 작업을 수행하되, 다른 포트를 매핑하세요.

변경 전:

expose:
  - "80:80"   # http
  - "443:443" # https

변경 후 (예시):

expose:
  - "8081:80"   # http
  - "8444:443" # https

app.yml 파일에서 변경해야 합니다 (파일이 없다면, 공식 가이드를 따라 스탠드얼론 머신에서 Discourse를 실행하여 작동 방식을 확인하고 /var/discourse/containers/에 생성된 app.yml 파일을 살펴보는 것을 권장합니다). app.yml 파일의 예시는 다음과 같습니다: discourse_docker/samples/standalone.yml at master · discourse/discourse_docker · GitHub

  1. nginx를 설치하고 설정 파일에 프록시 지시문을 추가하세요. 아래 예제 발췌와 유사해야 합니다:
upstream blog {
    server localhost:8080;
}

server {
    server_name blog.barinaklar.com;
    server_tokens off;
    listen 80;

    location /.well-known/acme-challenge/ {
        root /var/www/certbot;
    }

    location / {
        return 301 https://blog.barinaklar.com$request_uri;
    }
}

server {
    server_name blog.barinaklar.com;
    server_tokens off;
    listen 443 ssl;

    location /.well-known/acme-challenge/ {
        root /var/www/certbot;
    }

    location / {
        proxy_pass           http://blog;
        proxy_redirect		 off;
        proxy_set_header	 Host $host;
        proxy_set_header	 X-Real-IP $remote_addr;
        proxy_set_header	 X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header	 X-Forwarded-Host $server_name;
        proxy_set_header	 X-Forwarded-Proto $scheme;
    }
}

upstream forum {
    server localhost:8081;
}

server {
    server_name forum.barinaklar.com;
    server_tokens off;
    listen 80;

    location /.well-known/acme-challenge/ {
        root /var/www/certbot;
    }

    location / {
        return 301 https://forum.barinaklar.com$request_uri;
    }
}

server {
    server_name forum.barinaklar.com;
    server_tokens off;
    listen 443 ssl;

    location /.well-known/acme-challenge/ {
        root /var/www/certbot;
    }

    location / {
        proxy_pass           http://forum;
        proxy_redirect		 off;
        proxy_set_header	 Host $host;
        proxy_set_header	 X-Real-IP $remote_addr;
        proxy_set_header	 X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header	 X-Forwarded-Host $server_name;
        proxy_set_header	 X-Forwarded-Proto $scheme;
    }
}

이것은 WordPress가 포트 8080에서, Discourse가 포트 8081에서 실행된다는 가정에 기반합니다. 이 포트에 대한 접근을 차단하기 위해 방화벽을 설정하는 것을 잊지 마세요 (클라우드 제공업체는 기본적으로 22번 포트를 제외한 모든 포트를 차단하므로, 방화벽 설정이 필요 없을 수도 있습니다).

이 경우 SSL/TLS 인증서를 생성하는 것은 본인의 책임입니다 (크론 작업을 통해 주기적으로 certbot을 실행하여 생성할 수 있으며, nginx 설정에 /.well-known/acme-challenge/ 경로를 이미 포함해 두었습니다).


위에서 언급했듯이, 이것은 단지 개요일 뿐 제가 놓친 부분이 있을 수 있습니다. 포트 변경으로 인해 기본 URL에 특별한 주의를 기울여야 합니다 (https://yourdomain 대신 https://yourdomain:8081으로 사용자가 리다이렉트되지 않는지 확인하고, 필요하면 작동하도록 수정하세요).

WordPress가 컨테이너 내부에서 포트 80 또는 443으로 실행되는 경우, 이 작업이 필요하지 않을 수 있습니다. Discourse의 경우에도 문제없을 것입니다. 발생할 수 있는 문제는 https 관련으로, 프록시에서 http 포트를 사용하기 때문에 http로 리다이렉트될 수 있으므로, 실제로 그런 일이 발생하는지 확인하고 해당 경우 수정해야 할 수 있습니다.

도와주셔서 감사합니다. 신청하고 거래를 알릴 예정입니다.