Set up Let’s Encrypt with multiple domains / redirects

Hi @pfaffman, 원본 게시물에 대한 수정 사항에서 to: 줄에 잘못된 + 기호가 포함되어 있어 정규식(regex)이 깨지는 문제가 있습니다. 이 기호는 제거되어야 합니다.

또한, 다음 단락은 더 이상 의미가 없으므로 수정이 필요합니다:

대체해야 할 두 가지 패턴이 있습니다. 하나는 --keylength로 끝나고, 다른 하나는 --fullchainpath로 끝납니다(실제 파일에서는 각 스위치 앞에 원래 도메인이 위치합니다). (서브)도메인(그리고 -d 로 시작하는 추가 서브도메인)을 입력한 다음, app.yml의 hooks 섹션(파일 끝부분)에 다음 내용을 추가하세요:

다음과 같이 수정하는 것을 제안합니다:

이 게시물에서 domain1과 domain2를 사용하여 필요한 코드를 생성하세요. domain1은 원래 도메인이고, domain2는 추가하려는 도메인입니다. 생성된 after_ssl: 블록을 app.yml의 hooks: 섹션에 추가한 후 launcher rebuild app을 실행하세요.

1개의 좋아요

아, 실수했어요. +를 제거하고 텍스트를 수정했어요. 나중에 컴퓨터에서 다시 확인할게요

@textkit님, 여기는 위키이니까 원하시면 추가 편집을 하셔도 돼요.

3.5.0.beta8-dev로 업데이트한 이후

/etc/runit/1.d/letsencrypt

파일이 docker 컨테이너에서 누락되었습니다. 이로 인해 빌드가 되지 않습니다. 임시 조치: https://www.forcewww.com/

따라서 다음 기능이 작동하지 않게 되었습니다:

## Add Let's Encrypt cert for non-www and www domain name
  after_ssl:
    - replace:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /--keylength/
        to: "-d example.de -d www.example.de --keylength"

Docker 컨테이너에서 이러한 도구/바이너리를 제거하기 전에 알림을 받을 수 있으면 좋겠습니다…

4개의 좋아요

이것은 Discourse가 LetsEncrypt를 처리하는 방식의 변경 사항인가요, 아니면 LetsEncrypt 자체의 변경 사항인가요?

현재 이 문제로 인해 서버가 문제를 겪고 있습니다. 당분간 app.yml의 해당 부분을 주석 처리하는 방식으로 임시 해결하고 있지만, 향후 이러한 추가 인증서를 설정에 추가할 수 있는 방법이 필요하다고 생각합니다.

2개의 좋아요

Discourse는 해당 기능을 다른 파일로 이동시켰습니다. 현재 작업이 진행 중입니다. 며칠 안에 여러 서브도메인을 지원할 수 있도록 필요한 사항을 확인해 보겠습니다.

2개의 좋아요

새 템플릿으로 OP를 수정했지만 아직 테스트하지 않았습니다.

1개의 좋아요

아니요, 작동하지 않습니다:

FAILED

Errno::ENOENT: No such file or directory @ rb_sysopen - /usr/local/bin/letsencrypt
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/lib/pups/replace_command.rb:11:in `read’
replace failed with the params {“filename”=>“/usr/local/bin/letsencrypt”, “from”=>“/-d spokes.nz/”, “to”=>“-d spokes.nz -d www.spokes.nz”}
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** 이전의 오류 메시지를 찾기 위해 위로 스크롤해 주세요. 오류가 하나 이상 있을 수 있습니다.

2개의 좋아요

아직은 이른 것 같습니다.

그 말이 무슨 뜻인지 모르겠지만, 혹시 ssh 관련 설정이 있던 하단의 스탠자에 replace를 넣어보는 건 어떨까요? (지금 핸드폰으로 보고 있으니, 내일 다시 확인해볼게요)

1개의 좋아요

안녕하세요, @nathank

추측이긴 하지만, app.yml 파일에서 제안된 스탠자의 각 줄 마지막 슬래시와 마지막 따옴표 앞에 공백이 누락된 것이 오류의 원인일 수 있다고 생각합니다.

오류 메시지로부터 해당 줄들이 (원문 그대로) 다음과 같을 것이라고 추론합니다.

from: /-d spokes.nz/
to: “-d spokes.nz -d www.spokes.nz”

이렇게 말하는 이유는, 제 경우 해당 줄들이 다음과 같기 때문입니다.

from: /-d nzarchitecture.net.nz /
to: "-d nzarchitecture.net.nz -d www.nzarchitecture.net.nz "

위와 같이 각 줄의 끝부분 바로 전에 공백이 있는 경우, 이제 Discourse를 재빌드할 때 해당 오류가 발생하지 않습니다. (이 스레드 시작 부분에 게시된 @pfaffman의 업데이트된 스탠자를 자세히 보시면, 그 추가 공백들이 표시되어 있는 것을 확인하실 수 있습니다.)

또한, 제 경우에도 (오류 메시지에 언급된 대로) usr/local/bin/ 디렉토리에 어떤 파일도 없었습니다. 이로 인해 letsencrypt 파일의 부재가 오류를 유발하는 것이 아니라고 의심하게 되었습니다.

그럼에도 불구하고, 제 경우 Discourse는 nzarchitecture.net.nz URL에서는 정상적으로 작동하지만, 브라우저에 www.nzarchitecture.net.nz를 입력하면 여전히 인증서 오류가 발생합니다. 이것이 해당 파일의 부재 때문인지 저는 알지 못합니다.

2개의 좋아요

현재 discourse_docker에서 직접 처리하기 위해 이를 환경 변수로 통합하는 작업을 진행 중이라는 점을 참고로 남깁니다. 호스트명 별칭의 쉼표로 구분된 목록과 같은 형식입니다. 직접 처리하기에 충분히 일반적인 사용 사례라고 생각합니다.

이 경우 설정을 더 쉽게 만들어 app.yml 파일을 수정할 필요가 없도록 할 것입니다.

현재 계획은 다음과 같습니다.
DISCOURSE_HOSTNAME: www.domain.com

다음과 같은 환경 변수를 허용합니다:
DISCOURSE_HOSTNAME_ALIASES: domain.com,other.domain.com

이렇게 하면 모든 호스트명에 유효한 인증서를 가져올 수 있습니다.

(그에 맞춰, Let’s Encrypt의 자동 갱신도 제대로 작동하지 않는 것 같아서 이것도 함께 수정할 것입니다.)

8개의 좋아요

정말 멋지네요! 정말 감사합니다. 분명히 훨씬 편해질 거예요!

3개의 좋아요

놓쳤네요! 말씀하신 대로 해 보았지만 여전히 부트스트랩 실패가 발생합니다:

FAILED

Errno::ENOENT: No such file or directory @ rb_sysopen - /usr/local/bin/letsencrypt
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/lib/pups/replace_command.rb:11:in `read’
replace failed with the params {“filename”=>“/usr/local/bin/letsencrypt”, “from”=>“/-d spokes.nz /”, “to”=>"-d spokes.nz -d www.spokes.nz "}
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.

정말 좋습니다!!!

3개의 좋아요

여기서 핵심 문제는 아닐 수 있지만, 여기저기 시도해 보던 중 Digital Ocean에서 실행 중인 Docker 버전을 20.0.4(라고 생각됩니다)에서 28.3.3으로 업데이트했습니다 - 적어도 이 오류에는 도움이 되었을 수도 있습니다. 만약 이 오류가 아니더라도, 재빌드 과정 초반에 계속 뜨던 Docker의 ‘비추천(depreciated)’ 경고는 사라졌습니다.

1개의 좋아요

lets encrypt 파일을 수정하려는 부분을 제거하고, PR이 승인될 때까지 기다려야 합니다.

2개의 좋아요

그렇구나! 다행히도 저는 컨테이너 2개를 설치한 환경이라 큰 문제가 되지 않습니다.

이 부분에 대해 지금까지 진전이 있었나요?

1개의 좋아요

네, 검토를 기다리는 PR을 하나 열었습니다:

4개의 좋아요

여러분, 후속 안내드립니다. 멀티 도메인 기능이 이제 통합되었습니다. discourse_docker의 최신 버전에서는 SSL 및 Let’s Encrypt 템플릿을 포함하고 DISCOURSE_HOSTNAME_ALIASES: domain.com,other.domain.com 형태의 환경 변수를 설정하여 대체 호스트 이름을 구성할 수 있습니다.

추가 설정 변경 없이도 인증서 요청 시 구성한 호스트 이름이 자동으로 포함됩니다.

4개의 좋아요

무식한 질문을 용서해 주십시오. 이것은 어딘가의 사이트 설정을 통해 편집할 수 있는 건가요, 아니면 app.yml에서 무언가를 편집해야 하나요?

전자의 경우라면 최신 버전으로 업데이트한 후에도 찾을 수 없었고, 후자의 경우라면 app.yml에서 구체적으로 무엇을 조정해야 하나요?

app.yml에 입력해야 합니다. 이는 Discourse가 처리하는 것이 아니라 컨테이너 내의 NGINX가 처리하며, NGINX는 Discourse 데이터베이스에 접근할 수 없습니다.

ENV 섹션에 입력합니다.

env:
   DISCOURSE_HOSTNAME_ALIASES: domain.com,other.domain.com

사람들이 링크를 통해 접근할 수 있도록 하고 사이트의 실제 호스트 이름으로 리디렉션되기를 원하는 추가 도메인만 포함하면 됩니다.

3개의 좋아요

완벽합니다 - 모두 작동합니다. 감사합니다!

관리자가 제공한 별명을 다음 업데이트 시 discourse가 app.yml 파일 자체에 기록하거나, app.yml 명령어가 정보를 읽을 수 있는 위치에 남겨두는 똑똑한 방식이 있다면 더 좋겠습니다.

2개의 좋아요