수년 동안 Discourse를 사용해 왔습니다. 6개월마다 새 인스턴스를 설정합니다. 제 환경에는 Docker와 nginx 기반 프록시가 포함되어 있어 다소 비표준적인 구성입니다. 이 때문에 discourse-setup을 사용하지 않습니다.
6개월마다 이 과정을 반복할 때, Discourse를 git에서 새로 클론하고 ./launcher bootstrap app을 실행한 후 컨테이너가 시작되지 않습니다. 로그에는 다음과 같은 내용이 표시됩니다:
anacron: Can't chdir to /var/spool/anacron: No such file or directory
run-parts: /etc/runit/1.d/anacron exited with return code 1
run-parts: executing /etc/runit/1.d/00-ensure-links
run-parts: executing /etc/runit/1.d/00-fix-var-logs
run-parts: executing /etc/runit/1.d/01-cleanup-web-pids
run-parts: executing /etc/runit/1.d/anacron
anacron: Can't chdir to /var/spool/anacron: No such file or directory
이 과정이 무한히 반복됩니다.
그 후 보통 재부트스트랩, 재시작, 플러그인 제거 및 재추가 등 여러 단계를 거쳐 마침내 작동하게 만듭니다. 하지만 무엇이 실제로 문제를 해결했는지 알지 못한 채로요. 6개월이 지나면 같은 일이 다시 발생합니다. 문제를 해결하기 위해 여러 단계를 수행하지만, 그중 어떤 단계가 실제로 문제를 해결했는지 명확하지 않습니다.
하지만 이번에는 마침내 문제를 찾은 것 같습니다. 바로 ./launcher start app은 Discourse가 재클론되고 재부트스트랩되었더라도 app이라는 이름의 기존 컨테이너 인스턴스를 재시작한다는 점입니다.
누락된 단계는 docker remove app입니다. 요약하면 다음과 같습니다:
./launcher stop app
docker remove app
... 이제 재클론, 재부트스트랩 및 launcher start app이 작동합니다
제 실수는 ./launcher bootstrap app을 실행한 후 다음 ./launcher start app이 새로운 컨테이너 이미지를 시작할 것이라고 기대한 것이었습니다. 하지만 실제로는 그렇지 않은 것으로 보입니다. 당연히 /var/discourse/shared 경로가 재초기화되었기 때문에 기존 컨테이너에서는 문제가 발생합니다.
다른 분들도 동일한 로그 오류 메시지를 검색할 수 있도록 이 내용을 남겨둡니다.
가능한 개선 사항으로, 컨테이너가 /var/discourse/shared 디렉터리가 변경되었음을 감지할 수 있으면 좋겠습니다.