주거용 인터넷 환경에서 Cloudflare Tunnel을 이용해 Discourse 설치하기

Discourse가 이제 Raspberry Pi에서 실행되도록 지원되고 있으므로, 홈 랩에서 작은 인스턴스를 실행하는 것이 일반적인 사용 사례가 될 것입니다. 그러나 많은 주거용 ISP는 Discourse에 필요한 80/443 포트에 대한 수신 트래픽을 차단합니다.

https://discourse-on-a-pi.falco.dev/ 의 데모 사이트에서는 Cloudflare Tunnel을 사용하여 이를 우회했으며, 여러분도 그렇게 할 수 있습니다!

터널 설정

먼저 다음 가이드를 따르세요:

필요한 유일한 변경 사항은 URL을 url: http://localhost:8000에서 url: http://localhost:80으로 변경하는 것입니다. 터널은 이미 백그라운드에서 실행 중이므로 그대로 두세요.

Rocket Loader 비활성화

Discourse가 올바르게 작동하려면 Cloudflare Rocket Loader를 비활성화해야 합니다.

https://community.cloudflare.com/t/how-can-i-remove-the-rocket-loader-script-from-the-header-tag-on-my-website/4229/2

Discourse 설치

How to install Discourse in production을 따르되, app.yml 파일이 생성되고 5초 카운트다운이 표시되면 CTRL+C를 누르세요.

이제 파일의 첫 번째 줄들을 다음과 같이 편집하세요:

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/cloudflare.template.yml"
#  - "templates/web.ratelimited.template.yml"
## Lets Encrypt(https)를 추가하려면 이 두 줄의 주석을 해제하세요
#  - "templates/web.ssl.template.yml"
#  - "templates/web.letsencrypt.ssl.template.yml"

그리고 env: 섹션 아래에 다음 줄을 추가하세요:

DISCOURSE_FORCE_HTTPS: true

그 다음 ./launcher rebuild app을 실행하세요.

기다리는 동안 터널/discourse 설정에서 사용한 도메인으로 항상 HTTPS로 리디렉션하도록 페이지 규칙을 설치하세요:

몇 분 안에 터널/discourse 설정에서 사용한 도메인으로 새로운 Discourse 인스턴스가 사용 가능해집니다 :tada:."

39개의 좋아요

포트에 대한 언급이 있는 것이 더 좋다고 생각합니다. 사용자가 argo tunnel을 사용하기로 결정하면, 터널 설정과 동일한 포트를 설정해야 합니다. 예를 들어:

-80:80
#-443:443

이 경우 터널이 다음 주소를 경청하도록 해야 합니다.
http://localhost:80

저는 유닉스 소켓을 사용하여 이들을 연결합니다.

5개의 좋아요

제가 여기서 언급한 내용과 다른가요?

?

7개의 좋아요

라파엘, 안녕하세요.

튜토리얼 감사합니다.

위 가이드에 따라 모든 과정을 진행했고 대부분은 잘 작동하지만, 문제가 하나 있습니다.

이메일의 링크를 클릭하여 계정을 활성화하려고 하면 활성화 버튼이 있는 올바른 웹페이지로 잘 이동하는데, 이 버튼이 작동하지 않습니다. 이 포럼에서 관련 안내를 찾아보니 도메인에서 IP로 인한 문제인 것 같습니다.

config에서 force_https가 true로 설정되어 있는지 확인했습니다.

이 문제에 대해 의견이 있으신가요? 또는 이 문제를 겪어보셨나요? (버튼이 아무 반응도 없는 화면 캡처 첨부했습니다)

3개의 좋아요

아무튼, 이 문제를 해결했습니다.

단, 로켓 로더(rocket loader)가 비활성화되어 있는지 확인하세요 :wink:

감사합니다!

6개의 좋아요

드디어 라즈베리파이에서 Discourse를 설치했습니다. 하지만 Cloudflare Tunnels에서 문제가 발생하고 있습니다.

도메인으로 Discourse 사이트에 접근할 수 없는데, config.yml 설정에 이상한 부분이 있을까요?

url: http://localhost:80
tunnel: 371dd57c-************
credentials-file: /home/pi/.cloudflared/371dd57c-*********.json
3개의 좋아요

tunnel 명령어의 출력은 무엇입니까? 설정에서 저지른 오류에 대해 명시적으로 알려야 합니다.

3개의 좋아요

cloudflared tunnel info 출력:

cloudflared tunnel info ******
2022-01-24T04:55:47Z INF 기본 오리지널 인증서 경로를 결정할 수 없습니다. [~/.cloudflared ~/.cloudflare-warp ~/cloudflare-warp /etc/cloudflared /usr/local/etc/cloudflared]에 cert.pem 파일이 없습니다. originCertPath=
2022-01-24T04:55:47Z ERR --origincert 옵션으로 오리지널 인증서 경로를 지정하거나, TUNNEL_ORIGIN_CERT 환경 변수를 설정해야 합니다. 자세한 내용은 https://developers.cloudflare.com/argo-tunnel/reference/arguments/을(를) 참조하세요. originCertPath=
터널 ID를 분석하는 중 오류: 터미널에서 실행할 때 클라이언트가 origincert 경로를 지정하지 않아 오리지널 인증서를 찾을 수 없음
2개의 좋아요

인증서 파일을 잘못된 위치에 두신 것 같습니다. root로 실행 중인 경우, 파일은

/root/.cloudflared/

아래에 있어야 하며,

처럼 설정하신 위치에 두시면 안 됩니다.

2개의 좋아요

이미 cert.pem 파일이 있습니다.

2개의 좋아요

그리고 터널을 pi 사용자로 시작하려는 건가요, 아니면 root로 시작하려는 건가요?

3개의 좋아요

pi 사용자로 이 명령어를 사용 중입니다

cloudflared tunnel run <UUID or NAME>

2개의 좋아요

안녕하세요, @bekircem,

Cloudflared가 Cloudflare의 엣지로 연결을 시작할 수 있었던 것으로 보입니다.

Cloudflare에서 Argo Tunnel ID로 CNAME 라우팅을 활성화하셨나요?

감사합니다,

Alex.

3개의 좋아요

@Stigin님, 답변 주셔서 감사합니다.

네, 저는 커맨드 라인에서 라우팅을 활성화했습니다.

2개의 좋아요

흥미로운 질문이네요 @bekircem - 음!!

웹사이트 주소를 방문할 때 현재 어떤 오류가 발생하나요? 단순히 일반적인 Cloudflare Argo Tunnel 오류 페이지인가요?

명령어 docker ps를 실행하여 실행 중인 컨테이너를, 그리고 cloudflared tunnel list를 실행하여 현재 실행 중인 터널을 보여주시겠어요? || Argo 루트/관련 없는 컨테이너는 흐리게 처리해 주세요! :wink:

Alex.

3개의 좋아요

현재 웹사이트 주소를 방문할 때 발생하는 오류는 무엇인가요? 단순히 일반적인 Cloudflare Argo Tunnel 오류 페이지인가요?

아니요, Cloudflare Argo Tunnel 오류 페이지는 아닙니다.

ERR_NAME_NOT_RESOLVED

docker ps

CONTAINER ID   IMAGE                 COMMAND        CREATED        STATUS        PORTS                                                                      NAMES
f1bde9b70f55   local_discourse/app   "/sbin/boot"   11 hours ago   Up 11 hours   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   app

루트 사용자로 이 명령을 사용할 때 cloudflared tunnel list

2022-01-24T15:55:03Z INF Cannot determine default origin certificate path. No file cert.pem in [~/.cloudflared ~/.cloudflare-warp ~/cloudflare-warp /etc/cloudflared /usr/local/etc/cloudflared] originCertPath=
2022-01-24T15:55:03Z ERR You need to specify the origin certificate path with --origincert option, or set TUNNEL_ORIGIN_CERT environment variable. See https://developers.cloudflare.com/argo-tunnel/reference/arguments/ for more information. originCertPath=
Error locating origin cert: client didn't specify origincert path when running from terminal

pi 사용자로 이 명령을 사용할 때 cloudflared tunnel list

You can obtain more detailed information for each tunnel with `cloudflared tunnel info <name/uuid>`
ID                                   NAME      CREATED              CONNECTIONS
371dd57c-**************** ze****2022-01-24T03:35:19Z

이것이 정상인가요?

config.yml 파일의 DISCOURSE_HOSTNAME에 서브도메인을 사용해야 하는 것이 맞나요?

업데이트: Cloudflared를 삭제한 후 루트 사용자로 다시 설치했고, 이제 작동합니다. 이전 시도에 정확히 어디에서 실수를 했는지 여전히 이해하지 못하겠습니다.

2개의 좋아요

어떤 식으로든 결국 라즈베리파이에서 사이트를 구동해서 라이브를 올렸습니다.

정확히 어떻게 된 건지 잘 모르겠습니다. Cloudflared를 제거한 뒤 root 사용자 계정으로 다시 설치했는데, 그랬더니 작동하네요…

질문이 두 가지 있습니다.

  1. SSL 인증서가 제대로 작동하지 않는 것 같아서 Discourse 관리자 계정에 로그인할 수 없습니다. (시크릿 탭에서 실행되는 것처럼 보입니다. 캐시 관련 문제일 수도 있겠네요.) full 설정을 사용 중이신가요, 아니면 full(strict)를 사용 중이신가요?

  1. cloudflared를 서비스로 실행하는 방법에 대해 질문이 있습니다. https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/run-tunnel/run-as-service

cloudflared tunnel run <UUID or NAME> 명령어로 터널을 실행했습니다. 그런데 터미널 창을 닫으면 터널이 멈추는 건가요?

이미 로그인했고 ~/.cloudflared/에 설정 파일이 있는 경우, 해당 파일이 /etc/cloudflared/로 복사됩니다.

설정 파일이 없는 경우, 위에 나열된 필드를 포함하는 config.yml 파일을 직접 생성해야 합니다. cloudflared --config CONFIG-FILE service install 명령을 실행하여 사용자 지정 파일을 전달할 수 있습니다.

확인해 보니 /etc/cloudflared/에 설정 파일이 없습니다. 이 경우 이 서비스를 자동으로 실행하려면 어떻게 해야 하나요?

감사합니다.

2개의 좋아요

Cloudflare 터널 서비스에 대해 더 구체적인 질문은 https://community.cloudflare.com/tag/cloudflaretunnel 에서 더 좋은 답변을 받을 수 있습니다.

3개의 좋아요

안녕하세요, @bekircem,

다시 설치했으면 cloudflared가 인증서를 찾지 못하는 문제가 해결되었을 것 같습니다…

Cloudflare를 서비스로 실행하는 것과 관련하여 - 수동으로 서비스를 실행할 때 생성했던 설정 파일을 /etc/cloudflared 디렉터리로 이동해야 합니다.

여기 개인 사이트를 링크하는 것이 적절한지 확신이 서지 않아서, 만약 삭제해야 한다면 알려주세요. 하지만 제 블로그 중 하나에서 ‘Cloudflared를 서비스로 설정 및 실행하는 방법’ 섹션에 이 내용을 다루어 두었습니다: ‘Setup and Run Cloudflared as a Service’

진행 상황 알려주세요!

Alex.

4개의 좋아요

답변 감사합니다.

좋은 블로그 게시물 공유해 주셔서 감사합니다.

Cloudflared를 서비스로 실행하기

sudo cloudflared service install

config.yml 파일이 자동으로 /etc/cloudflared/로 복사됩니다.

sudo systemctl start cloudflared

sudo systemctl enable cloudflared

잘 작동하고 있습니다. 아직 재부팅을 시도해 보지는 않았지만, 잘 작동할 것으로 기대합니다.

4개의 좋아요