CloudPanel에 Discourse 설치하기

위키로 만들어 두었습니다. 모든 것을 더 자세히 설명하도록 OP를 업데이트해 주시면 감사하겠습니다. 이 분야에 전문 지식이 있으시니, 이 토픽을 지켜보시면서 같은 길을 걸으려는 다른 분들에게 도움을 주실 수 있기를 바랍니다.

현실은 이 곳의 정규 기여자 중 Cloud Panel을 사용하는 사람이 없다는 것입니다. 또한 가이드를 만든 사람은 해당 가이드에 대한 지원을 하지 않고 있습니다. 잘못될 일이 거의 없는 표준 설치만 지원하는 것도 상당히 시간이 많이 걸립니다.

:+1: 반대하는 사람이 없다면, 시간이 날 때 제 제안들을 반영하겠습니다. 자연스럽게 흘러가도록(그리고 실제로 작동하도록) 확인하겠습니다. 적어도 discourse-setup를 --skip-connection-test 옵션과 함께 실행해야 할 것임을 알고 있습니다.

이것은 아마도 불공정하다고 생각합니다. 해당 사용자는 피드백에 기반하여 가이드를 업데이트해 왔고, 아마도 다른 사람들이 먼저 질문에 답했을 가능성이 높기 때문입니다.

5개의 좋아요

아마도 맞을 겁니다. 이 글이 올라온 지 하루 정도밖에 안 됐으니까요. 이 경우에는 제가 아무 말도 하지 않고 다른 사람들이 알아서 해결하는 게 더 나을 수도 있겠네요.

5개의 좋아요

안녕하세요!! 여기 있습니다. 도와드릴 수 있어서 기쁩니다! 바로 튜토리얼을 만들고 피드백을 요청한 이유이기도 합니다!

unsupported-install 태그를 추가하고, 위쪽에는 약간의 주의를 주는 문구와 함께 표준 설치 방식으로 돌아가도록 유도하는 고지를 넣었습니다. :slight_smile:

#here-be-dragons 태그도 제안은 했지만, 아직 검토 중입니다… :slight_smile:

5개의 좋아요

하지만 결국, 여기서 보고된 내용을 더 자세히 따르고 다른 포럼에서 몇 가지 검색을 해본 끝에 모든 것을 설치하는 데 성공했습니다. 도움을 주신 모든 분께 감사드립니다.

2개의 좋아요

찾아보신 내용이 현재 튜토리얼에 유용한 정보가 될까요?

2개의 좋아요

그때는 앱의 app.yml 파일에서 메일 서버와 같은 다른 항목들도 변경해야 한다는 사실을 몰랐습니다. 여기의 가이드는 전문가들을 위해 작성되었기 때문에, 전문가들에게는 가장 명백한 사항들만 안내되어 있었고, 저처럼 경험이 없는 사람들을 위한 내용도 함께 제공되지 않았습니다. 이후 메일 설정에서 어려움을 겪었는데, 제 제공업체는 TLS로 포트 587을 사용하기 때문입니다.

3개의 좋아요

@denvergeeks 님, 안녕하세요 :blob_wave:

이 가이드를 검토하고 있습니다. :slight_smile:

다음 부분에서 Cloudflare를 사용하는 것이 필수인가요?

도메인 준비 및 SSL 설정

비슷한 서비스를 사용해야 하는지, 아니면 이러한 제3자 서비스 없이도 SSL이 작동할 수 있는지 궁금합니다.


다음과 같은 부분에서:

왜 이렇게 해야 하는지 간단히 설명해 주시면 좋겠습니다 (각주로도 괜찮습니다) :slight_smile:

@Canapin 내장된 CloudPanel SSL 사용 방법은 여기에서 확인하실 수 있습니다…

네임서버와 SSL 모두 Cloudflare를 사용하는 것은 제 개인적인 선호입니다.

많은 분들이 Cloudflare를 사용하시죠. 제 워크플로우에서 Cloudflare를 사용하기 때문에, Cloudflare를 사용하시거나 사용하시길 원하시는 분들을 위해 튜토리얼에 Cloudflare 관련 내용을 제공했습니다.

Cloudflare를 사용할 필요는 없습니다. 도메인을 CloudPanel IP 주소로 가리키기 위해 평소 사용하시던 네임서버를 자유롭게 사용하시면 됩니다. 저는 평소 Cloudflare를 사용하곤 합니다.

또한 Cloudflare 대신 또는 Cloudflare와 함께 다른 SSL 제공업체를 사용하실 수도 있습니다.

원하시면 다른 네임서버 및 SSL 제공업체에 대한 사용 방법도 추가하실 수 있습니다.

이 설명이 도움이 되셨기를 바랍니다!

3개의 좋아요

테스트 도메인 canapin.ovh를 사용하여 Cloudflare를 리버스 프록시로 설정하는 방법에 대해 작성하신 가이드를 꼼꼼히 따라 진행했는데, 현재 Cloudflare 오류가 발생하고 있습니다:

https://canapin.ovh

가이드를 따르는 것 외에도, Cloudflare의 다른 설정들은 모두 기본값으로 두었고 가이드에서 언급한 부분만 수정했습니다.

고급 설치에 대해 잘 모르기 때문에 이 오류가 가이드와 관련이 없을 수도 있습니다. 다만 가이드에 누락된 부분이 있는 것이 아니라면요. 다른 사용자가 성공적으로 설정했으므로, 제 환경 쪽에 문제가 있을 가능성이 더 높아 보입니다. :slight_smile:

3개의 좋아요

@Canapin (마지막으로) 다음을 실행하셨는지 기억하시나요?

./launcher start app

(이것은 가능한 원인 중 하나입니다.)

:grey_question: 더 많은 정보를 제공해 주시면 더 도움을 드릴 수 있습니다.:grey_question:

1개의 좋아요

네, 제 컨테이너는 실행 중이고 문제가 될 수 있는 부분은 여러 가지일 수 있습니다… 하지만 지원되지 않는 설치 환경에 익숙하지 않은 제가 여러분의 토픽에 불필요한 정보를 남기는 것은 피하고 싶어서요 :stuck_out_tongue:

1개의 좋아요

저는 fastpanel을 사용하는데, discourse를 사용하려면 하나의 설정만 있으면 됩니다. fastpanel은 wordpress보다 더 복잡한 애플리케이션을 설치하기 위해 더 많은 기능(포스트그레SQL, 클라우드 자동 백업, apache/nginx 등)을 제공합니다. Discourse는 fastpanel에서 매우 잘 작동합니다!

1개의 좋아요

안녕하세요, 올바르게 설정하는 법을 배우면 제 프로젝트에 상당한 비용 절감을 가져다줄 수 있는 훌륭한 튜토리얼을 올려주셔서 감사합니다. 일단 제대로 설정을 완료하고 나면 일석이조의 효과를 볼 수 있을 것 같습니다. 요즘 경기가 좋지 않아서 어디에서든 비용 절감이 시급한 상황입니다.

튜토리얼을 살펴보니 단계가 그렇게 많지 않아서, 한번 시도해 볼 만하다고 생각했고 지금은 거의 성공 직전이라고 생각합니다.

하지만 bootstrap 단계에서 실패했습니다.

Status: Downloaded newer image for discourse/base:2.0.20250129-0720
docker.io/discourse/base:2.0.20250129-0720
2.0.20250129-0720: Pulling from discourse/base
Digest: sha256:01b8516e5504c0e9bc3707773015ff4407be03a89154194ff3b5b8699291bc26
Status: Image is up to date for discourse/base:2.0.20250129-0720
docker.io/discourse/base:2.0.20250129-0720
/usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups.rb
/usr/local/bin/pups --stdin
I, [2025-02-05T01:45:55.552861 #1]  INFO -- : Reading from stdin
I, [2025-02-05T01:45:55.600413 #1]  INFO -- : File > /etc/runit/1.d/remove-old-socket  chmod: +x  chown:
I, [2025-02-05T01:45:55.612817 #1]  INFO -- : File > /etc/runit/3.d/remove-old-socket  chmod: +x  chown:


FAILED
--------------------
Errno::ENOENT: No such file or directory @ rb_sysopen - /etc/nginx/conf.d/discourse.conf
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/replace_command.rb:11:in `read'
replace failed with the params {"filename"=>"/etc/nginx/conf.d/discourse.conf", "from"=>"/listen 80;/", "to"=>"listen unix:/shared/nginx.http.sock;\nset_real_ip_from unix:;\n"}
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.
70d853c5066a283a84838676ef16a243cc6f418cee8802eb34b1edfc598a7bd9
root@Vultr2409:/var/discourse# 

이 문제를 해결해 달라고 Deepseek에게 물어봤는데, 다음 내용으로 /etc/nginx/conf.d/discourse.conf 파일을 수동으로 생성하라고 제안했습니다:

server {
    listen 80;
    server_name <mydomain.com (replaced by my domain)>;
    location / {
        proxy_pass http://unix:/shared/nginx.http.sock;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
root@Vultr2409:/var/discourse# ./launcher rebuild app
x86_64 arch detected.
Ensuring launcher is up to date
Launcher is up-to-date
2.0.20250129-0720: Pulling from discourse/base
Digest: sha256:01b8516e5504c0e9bc3707773015ff4407be03a89154194ff3b5b8699291bc26
Status: Image is up to date for discourse/base:2.0.20250129-0720
docker.io/discourse/base:2.0.20250129-0720
/usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups.rb
/usr/local/bin/pups --stdin
I, [2025-02-05T02:21:24.487508 #1]  INFO -- : Reading from stdin
I, [2025-02-05T02:21:24.505619 #1]  INFO -- : File > /etc/runit/1.d/remove-old-socket  chmod: +x  chown:
I, [2025-02-05T02:21:24.510777 #1]  INFO -- : File > /etc/runit/3.d/remove-old-socket  chmod: +x  chown:


FAILED
--------------------
Errno::ENOENT: No such file or directory @ rb_sysopen - /etc/nginx/conf.d/discourse.conf
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/replace_command.rb:11:in `read'
replace failed with the params {"filename"=>"/etc/nginx/conf.d/discourse.conf", "from"=>"/listen 80;/", "to"=>"listen unix:/shared/nginx.http.sock;\nset_real_ip_from unix:;\n"}
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.
1c7c2a9d055439d23b9300f77e4bc6e912d4db5cf372ea1261e7b8bccb1be3ee

GPT가 제안한 해결책 중 #- "templates/web.template.yml" 부분을 주석 처리하는 방법도 시도해 봤지만 작동하지 않았습니다. 도움을 주시면 정말 감사하겠습니다!

nginx 설정에서 상당한 변경 사항이 있었습니다. 이것이 테스트 통과를 의미하는 건지, 아니면 다른 건지 궁금합니다.

하지만 지금 한 번 더 시도해 보시는 것도 좋습니다.

최신 nginx 설정 파일의 위치를 알려 주실 수 있을까요? 현재 제 discourse는 기본 구성으로 fastpanel에 연결되어 있습니다. 모든 것이 정상적으로 작동하고 있지만, discourse가 최적의 상태로 작동하도록 더 정밀한 설정을 하고 싶습니다.