Jay @pfaffman 님, 감사합니다.
말씀하신 대로, 정말로 여기서는 최고급의 소중한 자원입니다!
제(아직은 제한적인) 이해를 바탕으로 한 이 다소 미친(?) 아이디어에 대해 어떻게 생각하시나요:
다음 튜토리얼에 따라 프론트엔드에서 nginx를 리버스 프록시로 설정합니다:
그런 다음 discourse_docker(스탠드얼론)이 설정된 두 개의 디렉터리/인스턴스를 만듭니다. 예를 들어:
- /var/discourse1
- /var/discourse2
이 두 인스턴스 모두에서 discourse_docker(스탠드얼론)을 서로 다른 소켓을 경청하도록 설정하며, 각 인스턴스에서 다음 템플릿을 수정합니다:
- "templates/web.socketed.template.yml"
즉, 요약하자면, 우리는 조용한 시간에 프로덕션 환경을 다시 빌드하여 다른 컨테이너에서 서로 다른 소켓(nginx.https.sock2)을 경청하도록 실행하므로 소켓 충돌이 발생하지 않습니다. 이를 통해 스탠드얼론 모드에서도 빌드할 수 있으며(두 컨테이너, 즉 data와 web-only의 필요성을 제거하는 것이 목표입니다).
예를 들어(논의/설명용), discourse1의 web.socketed.template.yml에서:
- replace:
filename: "/etc/nginx/conf.d/discourse.conf"
from: /listen 80;/
to: |
listen unix:/shared/nginx.http.sock;
set_real_ip_from unix:;
- replace:
filename: "/etc/nginx/conf.d/discourse.conf"
from: /listen 443 ssl http2;/
to: |
listen unix:/shared/nginx.https.sock ssl http2;
set_real_ip_from unix:;
discourse2에서는:
- replace:
filename: "/etc/nginx/conf.d/discourse.conf"
from: /listen 80;/
to: |
listen unix:/shared/nginx.http.sock2;
set_real_ip_from unix:;
- replace:
filename: "/etc/nginx/conf.d/discourse.conf"
from: /listen 443 ssl http2;/
to: |
listen unix:/shared/nginx.https.sock2 ssl http2;
set_real_ip_from unix:;
그러나 discourse 템플릿이 마법을 부리게 하는 대신, 우리는 단순히 /etc/nginx/conf.d/discourse.conf에서 소켓을 수동으로 전환하고 nginx를 재시작합니다. 따라서 web.socketed.template.yml 템플릿에서 replace: 지시문을 제거하게 됩니다.
이 제안된(아마도 미친) 구성에서는, 두 개의 스탠드얼론 컨테이너가 서로 다른 소켓(충돌 없음)을 경청하도록 하고, nginx를 원하는 소켓에 연결하도록 구성한 후 nginx를 재시작하면 됩니다.
이는 명확하고 쉬우며, 라이브 인스턴스에서 새 게시글이 없는 느린 기간 동안 유용할 수 있습니다. 단일 discourse 인스턴스(앱)당 두 개의 컨테이너(data와 web-only)의 복잡성을 원하지 않거나 필요로 하지 않는 사람들에게는 특히 그렇습니다.
물론, 데이터 관점에서 가장 견고한 구성, 특히 완벽함을 추구하는 바쁜 사이트의 경우, “두 컨테이너” 솔루션이 될 것입니다. 왜냐하면 우리는 data와 web-only 인스턴스(이제 두 개의 서로 다른 소켓, sock와 sock2를 경청)를 원할 것이기 때문입니다.
nginx 프론트엔드를 갖춘 "두 컨테이너 솔루션"에서 "표준 구성"은 두 개의 web-only 컨테이너가 동일한 소켓을 경청하도록 하는 것이므로, 두 컨테이너는 동시에 실행할 수 없습니다. 하지만(예를 들어) 서로 다른 소켓을 경청하도록 한다면, 두 컨테이너는 동시에 실행할 수 있고, 우리는 단순히 nginx 설정 파일(과 nginx 재시작)을 사용하여 두 컨테이너 사이를 전환할 수 있습니다.
이것이 올바른 이해인가요?
(천천히 하지만 확실히) 이해하기 시작하고 있는 건가요?
감사합니다!
후속 노트: 제 데스크톱 Mac 중 하나에서 “두 컨테이너” 구성이 작동하는 것을 확인했습니다:
![]()
설치 시 유일한 주의사항은, 스크립트가 어떤 이유에서인지 생성하지 않는 다음 디렉터리를 수동으로 생성하고(소유권과 권한을 설정) 해야 한다는 것입니다:
~discourse/discourse/shared/data
~discourse/discourse/shared/web-only
그리고 물론, 처음에는 데이터베이스에 빈 비밀번호를 사용해서 시도했는데, 그것은 작동하지 않았습니다(설명서에는 비밀번호를 설정하라고 되어 있지만, 저는 단순히 실험을 하고 있었기 때문입니다).
다음으로, nginx 프론트엔드를 설정하고 web-only 앱에 대해 websocket을 사용하여 해당 구성으로의 이동을 시도할 것입니다.