Discourse 설치 중 Bootstrap 오류: ENOENT - /etc/runit/1.d/letsencrypt

업데이트 사항을 공유합니다.

app.yml 하단의 run 섹션에 아래 내용을 추가하면 /usr/local/bin/letsencrypt가 DISCOURSE_HOSTNAME과 www.DISCOURSE_HOSTNAME에 대한 인증서를 요청하는 문제를 해결할 수 있습니다.

- exec: sed -i "s|-d \${DISCOURSE_HOSTNAME}|-d \${DISCOURSE_HOSTNAME} -d www.\${DISCOURSE_HOSTNAME}|g" /usr/local/bin/letsencrypt

이전에는 이 정도면 충분했지만(어떤 식으로든?), 이제는 http://www.HOSTNAME/.well-known…에 대한 요청이 들어오면 챌린지를 보내는 대신 non-www 사이트로 리디렉션됩니다. 다음과 같은 방식으로 시도해 보았지만:

server {
  listen 80;
  listen [::]:80;
  server_name nzarchitecture.net.nz www.nzarchitecture.net.nz;

  # ACME 챌린지 서빙 (Let's Encrypt)
  location ^~ /.well-known/acme-challenge/ {
    root /var/www/discourse/public;  # Let's Encrypt 웹루트와 일치하는지 확인하세요
    allow all;
  }

  # 나머지는 모두 HTTPS로 리디렉션
  location / {
    return 301 https://$host$request_uri;
  }
}

아직 완전히 해결하지는 못했습니다.

팀에서 이 내용을 보고 계신 분이라면, after_letsencrypt에서 이 작업을 호출할 수 있도록 letsencrypt 훅이 있으면 좋겠습니다. 이러한 변경 사항을 하기 전에는 after_ssl에서 작동했지만, 이제는 그렇게 하면 ssl 이후에 실행되지만 letsencrypt 이전에는 실행되지 않는 것 같습니다.