사이트가 다운되어 있을 때 정적 오류 페이지 표시

제가 하고 싶은 것은, 예를 들어 재빌드 과정 중에 사이트가 오프라인 상태가 되었을 때 "이 사이트는 유지보수 중입니다"라고 표시하는 페이지를 제공하는 것입니다.

이 토픽은 제가 하고 싶은 내용과 거의 일치하지만, 비표준 설정이 필요한 것 같습니다. 표준 설치 환경에서 더 쉬운 방법이 있을까요? 감사합니다!

아니요, 현재로서는 그런 방법이 없습니다.

실제로 이 절차는 “표준 설치”(즉, 공식 Discourse Docker 가이드 사용)를 기반으로 하며, Nginx를 컨테이너 외부에 다시 배포하는 방식으로 구성됩니다.

처음에는 무서워 보일 수 있지만, 실제로는 그렇지 않습니다. 원하시면 도와드릴 수 있습니다.

듣고 싶지 않았던 답변이지만, 명확한 답변을 주셔서 감사합니다.

프로세스 자체보다는, 향후 새로운 플러그인 설치와 같은 간단한 작업 시 이 설정이 추가적인 고려 사항이 필요할지 더 걱정됩니다. 아니면 한 번 설정해 두면 다시 신경 쓸 필요가 없는 것인가요?

2020년에 이 용도로 NGINX를 추가한 이후로 설정을 두 번만 수정했습니다. 두 번 다 Discourse에서 제한을 업데이트한 후 대용량 파일 업로드와 관련된 설정을 조정하는 것이었습니다.

외부 NGINX를 사용하여 정적 페이지를 제공하고 Discourse의 리버스 프록시로 사용하는 경우, 올바르게 설정해 두었다면 일반적으로 변경이 필요하지 않습니다.

외부 nginx가 정적 에러 페이지 외에도 IPv6 사용자의 소스 IP 주소를 올바르게 귀속시키는 또 다른 가치 있는 기능을 제공한다는 점을 유의하세요. 포럼이 IPv6를 통해 접근 가능하며 외부 nginx 구성을 사용하지 않는 경우, IPv6를 통해 사이트를 방문하는 모든 사용자는 172.x.y.z 로컬 주소에서 온 것으로 표시됩니다. 스팸러와 같은 악의적인 사이트 사용자를 처리하려고 할 때 이는 도움이 되지 않습니다!

새 플러그인을 추가하는 경우에도 _정확히 동일_합니다.

사용자가 유지보수에 대해 통지를 받고 완료까지 기다릴 것이라는 점을 알 수 있으므로 업데이트가 더 쉬워진다고 생각합니다.

확인해야 할 한 가지는 certbot이 인증서를 올바르게 갱신하고 있는지입니다. 외부 nginx를 사용하지 않는 기본 구성에는 이 기능이 내장되어 있지만, 외부 nginx를 사용하는 경우 외부 certbot도 사용해야 하며 인증서 갱신이 설정되어 있는지 확인해야 합니다. certbot 설치 방법 중 일부는 이를 처리하지 않습니다.

질문하신 문서에는 다음과 같이 나와 있습니다:

:alarm_clock: 패키지 저장소에서 certbot을 설치한 경우, 갱신이 자동으로 수행되는 것이 일반적입니다. 그렇지 않다면 인증서가 만료되기 전에 letsencrypt renew && systemctl reload nginx.service를 실행하도록 알림을 설정하세요!

그러나 알림을 설정하는 것은 좋은 방법이 아닙니다. 결국 잊어버리게 되고, letsencrypt에서 인증서 만료에 대한 경고 이메일을 놓치면 사이트가 작동하지 않게 됩니다. 다행히 이를 우회하는 쉬운 방법이 있습니다.

자동 갱신이 설정되어 있지 않다면, 다음과 같이 설정할 수 있습니다.

다음 내용을 포함하는 /etc/systemd/system/certbot.service 파일을 생성하세요:

[Unit]
Description=Certbot
Documentation=file:///usr/share/doc/python-certbot-doc/html/index.html
Documentation=https://letsencrypt.readthedocs.io/en/latest/
[Service]
Type=oneshot
ExecStart=/usr/bin/certbot -q renew
PrivateTmp=true

다음 내용을 포함하는 /etc/systemd/system/certbot.timer 파일을 생성하세요:

[Unit]
Description=Run certbot twice daily

[Timer]
OnCalendar=*-*-* 00,12:00:00
RandomizedDelaySec=43200
Persistent=true

[Install]
WantedBy=timers.target

그런 다음 systemd에 새 파일에 대해 알립니다.

# systemctl daemon-reload
# systemctl enable --now certbot.timer

두 개의 컨테이너를 사용하는 경우, 다운타임은 1분 미만이며 실제로는 그런 페이지가 필요하지 않습니다.

여기서 몇 가지 검색을 해본 결과, 두 개의 컨테이너를 유지보수하는 작업은 Nginx보다 훨씬 더 부담이 크다는 것이 명확해졌습니다. 제 기술 수준에서는 그렇다는 거죠.

아, 그렇군요. 제 관점에서는 거의 'she’와 비슷하지만, 날짜 컨테이너가 업데이트가 필요한 시점에 주의해야 한다는 점이 다릅니다. 그런 일은 드물지만, 그래도 주의를 기울여야 하죠. 그리고 그런 일이 발생하면 사이트가 잠시 동안 다운됩니다.

그 말도 맞아요. 늘 트레이드오프인 거죠 — 업데이트/업그레이드로 인해 포럼이 다운되는 시간과, 개별 컨테이너를 유지보수하는 데 걸리는 시간(특히 여러분(읽어주세요: 저)이 모든 것을 엉망으로 만들어 버리고 수정 방법을 찾으려 애쓰는 동안 포럼이 동시에 다운되는 경우 :rofl: ) 말이죠.