jlgarnier
(Jean-Luc GARNIER)
9월 13, 2022, 7:58오전
1
커뮤니티 여러분께,
공식 문서(discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub )의 지시에 따라 Discourse 프라이빗 인스턴스를 설치하려고 시도했습니다. 스크립트가 매우 복잡해 보였지만, 제 설정을 적용하기 위해 container.yml과 discourse-setup 파일을 수동으로 수정해야 했습니다…
첫 번째 문제: 설치가 복잡한데도 불구하고 설치 스크립트에서는 노출된 포트를 수정할 수 없습니다! 제 서버에서는 nginx가 80/443 포트를 사용하고 있어 이 포트를 사용할 수 없습니다. 그래서 다시 한 번 설정 스크립트를 조정하여 Discourse에 접근하는 데 필요한 포트인 3080/3443을 설정했습니다.
그 후 모든 컨테이너를 실행하는 데 성공했습니다. Portainer로 스택을 확인해 보니, 애플리케이션이 시작되었다가 조용히 멈추는 것을 발견했고, 로그에는 원인에 대한 정보가 거의 나오지 않았습니다. redis와 postgres가 포트를 공개하지 않으므로, 이 구성 요소에 연결할 수 없어 discourse 앱이 실패하는 것은 아닌지 궁금합니다. 제가 놓친 것이 있거나 잘못한 부분이 있을까요?
_discourse-app_logs.txt (10,4 KB)
도움 주시면 감사하겠습니다!
RGJ
(Richard - Communiteq)
9월 13, 2022, 8:09오전
2
Caused by:
Errno::EADDRNOTAVAIL: Cannot assign requested address - connect(2) for [::1]:6379
즉, IPv6 루프백 주소의 Redis에 연결할 수 없다는 뜻입니다.
jlgarnier
(Jean-Luc GARNIER)
9월 13, 2022, 8:33오전
3
리처드 씨, 빠른 답변 감사합니다! 저는 IT 전문가가 아니라 도구들을 가지고 노는 걸 좋아하는 사람인데요: 이 문제를 해결하려면 어떻게 해야 하나요?
선언 조언에 감사드립니다!
RGJ
(Richard - Communiteq)
9월 13, 2022, 9:20오전
4
Redis와 Postgres를 각각 별도의 컨테이너로 설정하면서 표준 설치 방식에서 벗어난 것 같네요. 그래서 바로 답변을 드리기 어렵습니다. Discourse 내에서 Redis 설정을 어떻게 구성하셨나요?
또 다른 점도 있습니다. redis:4-alpine을 확인했습니다. Discourse는 Redis 6.20 이상을 요구하므로, 더 새로운 버전의 Redis로 전환해야 할 것 같습니다. 다만, 이것이 현재 문제의 원인이라고 생각하지는 않습니다.
pfaffman
(Jay Pfaffman)
9월 13, 2022, 9:53오전
5
설치 스크립트는 표준 설치 환경에서만 작동합니다. 더 복잡한 구성을 하려면 yml 파일을 수동으로 편집해야 합니다. 스크립트를 수정하는 것보다 훨씬 간단합니다.
Discourse는 비표준 포트에서는 작동하지 않습니다. 앞에 리버스 프록시를 구성해야 합니다. Discourse와 동일한 머신에 다른 웹사이트 실행 과 같은 주제를 참고하세요.
제공된 postgres와 redis를 사용하지 않을 경우, 본인의 환경이 작동하지 않는 이유를 알아내는 것은 전적으로 본인의 몫입니다. 원인이 될 수 있는 요소가 너무 많아 추측하거나 유추할 수 없습니다. 매우 복잡한 설치를 시도하기 전에, 어떻게 작동하는지 확인하기 위해 별도의 VM에 표준 설치를 권장합니다.
jlgarnier
(Jean-Luc GARNIER)
9월 13, 2022, 11:45오전
6
저는 어떤 ‘비표준’ 설치도 하지 않았습니다! 실제로 문서에 설명된 대로 Github에서 전체 파일을 다운로드하고, 노출된 포트만 변경한 뒤 스크립트를 실행했습니다.
redis 설정이나 postgres 설정을 변경하지 않았습니다.
redis 버전도 변경하지 않았습니다.
이 소프트웨어들은 정통 discourse-setup 스크립트에 의해 설치되었습니다.
@pfaffman "yml 파일을 수동으로 편집한다"는 것은 무슨 의미인가요? 어떤 yml 파일을 말씀하시는 건가요? “containers” 폴더에는 .yml 파일이 정말 많거든요…
참고로, 저는 해당 서버에 리버스 프록시를 사용하고 있는데, 설정이 단순해 보입니다. 여러 개의 subdomain.conf 파일이 하위 도메인:80 → 포트 XXX로 리다이렉트하도록 정의되어 있습니다. 이것이 필요한 구성인가요?
매우 복잡한 설정을 시도하기 전에, 어떻게 작동하는지 확인하기 위해 별도의 VM에 표준 설치 를 해보시는 것을 추천합니다.
복잡한 설정을 원하지는 않습니다 . Docker가 설계된 목적대로, 다른 컨테이너들과 함께 Discourse를 실행할 수 있으면 됩니다…
도움 주셔서 다시 한번 감사합니다!
RGJ
(Richard - Communiteq)
9월 13, 2022, 12:03오후
7
일반적으로 discourse-setup는 별도의 postgres와 redis 인스턴스를 설치하지 않으며, 특히 버전 12와 4는 설치하지 않습니다.
container.yml과 스크립트에 적용한 설정과 변경 사항을 게시해 주시겠습니까? 기밀 설정은 반드시 삭제(마스크 처리)해 주세요.
또한 현재 discourse_docker 저장소의 커밋이 어느 것인지도 알려주세요.
pfaffman
(Jay Pfaffman)
9월 13, 2022, 12:19오후
8
당신은 discourse-setup와 discourse-docker 업데이트 시 덮어쓰기되는 파일을 모두 수정했습니다. app.yml을 제외한 다른 파일을 변경하는 것은 명백히 비표준적인 방법입니다.
왜 그랬나요? 그리고 거기서 변경해야 했던 것이 무엇이든, 그것이 올바른 방법이 아닙니다. 해당 변경 사항은 app.yml에 적용해야 합니다.
Discourse는 비표준 포트에서는 작동하지 않으므로, 이는 표준 설치가 아닙니다.
표준 설치에는 단일 컨테이너에 postgres와 redis가 포함되어 있습니다. 지적된 바와 같이, 당신은 redis와 postgres의 지원되지 않는 버전을 사용하고 있습니다. 또한 여기에서 설명된 대로 두 컨테이너 설치를 수행할 수도 있습니다. 단일 컨테이너에서 웹 및 데이터 컨테이너 분리 환경으로 이동 (./discourse-setup --two-container를 사용하면 discourse-setup이 데이터 컨테이너와 웹 컨테이너를 별도로 생성하지만, 유지보수가 다소 복잡합니다(데이터 컨테이너를 업데이트해야 하는 시점을 알아야 하므로)).
RGJ
(Richard - Communiteq)
9월 13, 2022, 8:33오후
10
pfaffman
(Jay Pfaffman)
9월 14, 2022, 4:35오후
11
Jean-Luc GARNIER:
설치된 소프트웨어를 모두 지우
설치되는 것은 docker뿐입니다.
괜찮아 보입니다.
app.yml은 discourse-setup에 의해 생성됩니다. 포트에 접근할 수 없다면 discourse-setup를 실행할 수 없지만, 소스를 읽어보면 ./discourse-setup --skip-connection-test를 사용하여 연결 테스트를 건너뛰고 실행할 수 있음을 알 수 있습니다.
nginx가 let’s encrypt를 담당하게 되므로, let’s encrypt 템플릿을 주석 처리해야 합니다. 이는 위아래에 링크된 리버스 프록시 관련 주제에서 설명되어 있을 것으로 추정됩니다.
Jean-Luc GARNIER:
nginx 프록시를 설정
Using Nginx Proxy Manager to manage multiple sites with Discourse 또는 Run other websites on the same machine as Discourse (이미 링크된 내용)를 참고하세요.
jlgarnier
(Jean-Luc GARNIER)
9월 15, 2022, 7:37오전
12
@pfaffman 님, 안녕하세요.
Discourse와 같은 머신에 다른 웹사이트 실행하기 문서를 읽다가 몇 가지 확인이 필요합니다:
다른 서버가 포트 80 또는 443을 사용 중이라면 ./discourse-setup을 사용하여 Discourse를 설정할 수 없습니다. 좋아하는 텍스트 에디터로 samples/standalone.yml을 복사하고 편집해야 합니다.
그리고 서론 부분에 이미 언급된 내용과 마찬가지로, discourse-setup을 실행하기 전에 app.yml을 수정해야 한다는 것을 이해하고 있습니다.
다른 서버가 포트 80 또는 443을 사용 중이라면 ./discourse-setup을 사용하여 Discourse를 설정할 수 없습니다. 좋아하는 텍스트 에디터로 samples/standalone.yml을 복사하고 편집해야 합니다.
그러면 다음 프로세스가 올바른지 확인해 주실 수 있을까요?
Github에서 전체 파일을 다운로드합니다.
--skip-connection-test 옵션과 함께 discourse-setup을 한 번 실행합니다 → 이 과정에서 containers/app.yml이 생성됩니다.
위 문서에 설명된 대로 app.yml을 수정합니다.
/var/discourse/launcher rebuild app으로 소프트웨어를 업데이트합니다.
Discourse 소켓을 가리키는 nginx 사이트를 생성하고 nginx를 재시작합니다.
마지막으로 브라우저를 실행하여 https://discourse.mydomain.com에서 Discourse에 접근합니다. 이 주소는 단순히 서버 IP를 가리키도록 설정되어 있습니다.
조언을 미리 감사드립니다!
jlgarnier
(Jean-Luc GARNIER)
9월 15, 2022, 9:15오전
13
업데이트:
Github에서 전체 파일을 다운로드: 완료
--skip-connection-test 옵션으로 discourse-setup을 한 번 실행: 끝까지 잘 진행되었으나, 마지막에 스크립트가 다음을 반환했습니다.
docker: Error response from daemon: driver failed programming external connectivity on endpoint app (784361985c928eb26b149d829f37882056562d9b1e77ef4ce71fbfe30c5d80b1): Error starting userland proxy: listen tcp4 0.0.0.0:443: bind: address already in use.
기존 웹서버와 동일한 포트에 접근하려는 시도이므로 저에게는 정상적인 것처럼 보입니다. 하지만 docker container ls 결과로 보아 discourse 컨테이너가 생성되지 않았으므로, nginx 설정을 계속 진행하기 전에 이 부분을 확인해 주실 수 있을까요?
도움 주셔서 감사합니다!
jlgarnier
(Jean-Luc GARNIER)
9월 15, 2022, 11:25오전
15
“discourse-setup를 실행하기 전에”라는 뜻인가요? 그렇다면 스크립트를 실행하기 전에 app.yml 파일이 존재하지 않는데, 어떤 파일을 수정해야 하나요? 컨테이너 1개짜리 앱을 설치하려고 하는데, 동일한 discourse-setup 스크립트를 다시 실행해야 하는지, 아니면 /var/discourse/launcher rebuild app 명령을 실행해야 하는지 궁금합니다.
참고로, 위 과정이 올바른가요?
pfaffman
(Jay Pfaffman)
9월 15, 2022, 12:41오후
16
기존 파일을 nano 또는 유사한 편집기로 열고 포트 부분을 주석 처리하세요. ./launcher rebuild app을 실행합니다.
아마도 당신의 경우, --skip-rebuild 옵션도 사용할 수 있으므로 다음과 같이 실행할 수 있습니다.
./discourse-setup --skip-connection-test --skeip-rebuild
nano containers/app.yml
./launcher rebuild app
jlgarnier
(Jean-Luc GARNIER)
9월 15, 2022, 1:23오후
17
죄송하지만, 저는 전문가가 아니므로 100% 확실해야 합니다 :
이전 실행에는 --skip-rebuild 옵션이 없었었는데, 이번에는 ./discourse-setup --skip-connection-test --skip-rebuild를 다시 한 번 실행합니다. 이전 실행으로 설치된 내용을 삭제할 필요는 없습니다.
그런 다음 기존 app.yml 파일을 편집하여 포트 부분을 주석 처리합니다(이미 주석 처리되어 있음).
마지막으로 ./launcher rebuild app를 실행합니다.
다시 한번 시간을 내주셔서 감사합니다!
pfaffman
(Jay Pfaffman)
9월 15, 2022, 4:58오후
18
discourse-setup을 다시 실행할 필요가 없습니다(물론 RAM 용량을 변경하여 메모리 설정을 기본 권장값으로 업데이트하고 싶다면 예외입니다).
포트만 수정하고 다시 빌드하면 됩니다.
jlgarnier
(Jean-Luc GARNIER)
9월 16, 2022, 7:52오전
19
제이님,
이번 아침 리빌드 결과를 공유드립니다:
NPM은 안정적이지 않은 도구라고 읽고, discourse 설정에는 IP가 하드코딩되어 있다고 해서 설치하고 싶지 않습니다: 그래도 설치해야 할까요?
도움 주시면 감사하겠습니다!
RGJ
(Richard - Communiteq)
9월 16, 2022, 7:56오전
20
이것은 Discourse 설치 앞에 있는 리버스 프록시 nginx에서 발생하는 문제인 것 같습니다.
잠깐…? 왜요? 그리고 왜 컨테이너 외부에서 NPM을 설치해야 하는 건가요?