안녕하세요,
권장 설치 가이드를 따라 Fedora 31 서버에 Discourse를 설치했습니다. 다만 컨테이너 실행에는 docker 대신 podman을 사용했습니다. 오늘 아침 처음 설정했을 때는 모든 것이 완벽하게 잘 진행되었지만, 호스트의 Nginx로 일반 HTTP를 연결하는 데 문제가 생겨 nginx 인스턴스 양쪽에 SSL 인증서를 사용해야 했습니다. Discourse를 구성한 후에는 모든 것이 정상적으로 작동했습니다.
이후 SSL을 끄고 비루트(non-root) 사용자 계정으로 Discourse를 다시 빌드하기로 결정했습니다. 호스트로의 일반 HTTP는 정상적으로 작동했지만, 흰색 화면이 표시되었습니다(제목은 정상, 파비콘은 작동).
root@xena-app:/var/www/discourse# ls public/assets -al
total 15640
drwxr-xr-x. 2 discourse discourse 10 Jan 11 13:54 .
drwxr-xr-x. 3 discourse discourse 29 Jan 11 13:57 ..
-rw-r--r--. 1 discourse discourse 595 Jan 11 13:49 _activate-account-7a1f8d46287194007ee607f79af56217e6e6238e4ca159c5da6974005a1254c5.js
-rw-r--r--. 1 discourse discourse 250 Jan 11 13:54 activate-account-7a1f8d46287194007ee607f79af56217e6e6238e4ca159c5da6974005a1254c5.js.br
-rw-r--r--. 1 discourse discourse 420 Jan 11 13:54 activate-account-7a1f8d46287194007ee607f79af56217e6e6238e4ca159c5da6974005a1254c5.js.gz
-rw-r--r--. 1 discourse discourse 695 Jan 11 13:54 activate-account-7a1f8d46287194007ee607f79af56217e6e6238e4ca159c5da6974005a1254c5.js.map
-rw-r--r--. 1 discourse discourse 990519 Jan 11 13:50 _admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js
-rw-r--r--. 1 discourse discourse 83903 Jan 11 13:54 admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js.br
-rw-r--r--. 1 discourse discourse 106465 Jan 11 13:54 admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js.gz
-rw-r--r--. 1 discourse discourse 366446 Jan 11 13:54 admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js.map
drwxr-xr-x. 2 discourse discourse 4096 Jan 11 13:54 admin-login
...
요청된 파일들은 실제로 존재하지 않으며, Nginx 로그에도 그렇게 표시되고 있습니다:
2020/01/11 13:59:49 [error] 60#60: *20 open() "/var/www/discourse/public/assets/plugins/poll-57c9059384e3daeaee3d974c985d85a2b8462bb2629eb0b1834451056d1e1459.js" failed (2: No such file or directory), client: 10.0.2.2, server: _, request: "GET /assets/plugins/poll-57c9059384e3daeaee3d974c985d85a2b8462bb2629eb0b1834451056d1e1459.js HTTP/1.0", host: "idlerpg.xyz", referrer: "https://idlerpg.xyz/"
이것은 제 설치 환경의 문제일 것이라고 생각했습니다. 왜냐하면 오늘 아침 호스트의 루트 계정으로 실행하던 이전 설치에서는 해당 파일들이 존재했기 때문입니다. 공유 폴더를 지우고 비루트 계정으로 다시 빌드했지만, 동일한 결과가 반복되었습니다. 그 후 이번에는 오늘 아침과 동일한 설정으로 루트 계정을 사용해 다시 시도해 보았지만, 동일한 문제가 발생했습니다.
비루트 설치에서는 항상 “Congratulations, you have installed Discourse!”(축하합니다, Discourse를 설치했습니다!) 페이지가 표시되지만, 설치를 완료한 후에는 에셋 파일이 없어 빈 화면이 나타납니다.
음, 테스트를 좀 해본 결과, 재빌드할 때마다 항상 빈 페이지가 표시되는 걸 확인했습니다. RAILS_ENV=production bin/rake assets:precompile을 실행하면 그 후에는 항상 정상적으로 작동합니다. 왜 그런지 모르겠는데, 재빌드 시에도 애셋을 컴파일해야 하는 거 아닌가요?
I, [2020-01-12T20:58:31.800117 #1] INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake assets:precompile'
임시 파일 삭제 중
에셋 번들링 중
I, [2020-01-12T20:58:38.208107 #758] INFO -- : /var/www/discourse/public/assets/vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js 파일 작성 중
I, [2020-01-12T20:59:02.428630 #758] INFO -- : /var/www/discourse/public/assets/admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js 파일 작성 중
I, [2020-01-12T20:59:02.447192 #758] INFO -- : /var/www/discourse/public/assets/preload-store-d32dcf974dddcac742f8a7a6aa7fcd686185920b201029d0ecb2b85527ef9034.js 파일 작성 중
I, [2020-01-12T20:59:02.707559 #758] INFO -- : /var/www/discourse/public/assets/browser-update-1741a2ed67a367faeb0a582af064457e8b1b1354e52e6efcf8bf26301166dec8.js 파일 작성 중
I, [2020-01-12T20:59:02.753632 #758] INFO -- : /var/www/discourse/public/assets/break_string-cc617154cd957804f2f6a1f3bc68258c9cdca3d4b9a322bf777d145fed04790e.js 파일 작성 중
I, [2020-01-12T20:59:04.073148 #758] INFO -- : /var/www/discourse/public/assets/ember_jquery-c2cca4a19fd4c70eabc95b010a6d7643955ec2a2251aeb1d70f625773eebea21.js 파일 작성 중
I, [2020-01-12T20:59:06.303026 #758] INFO -- : /var/www/discourse/public/assets/pretty-text-bundle-fa6ea00e2000bf2f9ed3f069be9253477fed5e7290b5d109a3e2d9498ac70e81.js 파일 작성 중
... [생략]
108798.339928812 압축 중: vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js
uglifyjs '/var/www/discourse/public/assets/_vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js' -m -c -o '/var/www/discourse/public/assets/vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js' --source-map "root='/assets',url='/assets/vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js.map'" --output '/var/www/discourse/public/assets/vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js'
gzip -f -c -9 /var/www/discourse/public/assets/vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js > /var/www/discourse/public/assets/vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js.gz
brotli -f --quality=11 /var/www/discourse/public/assets/vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js --output=/var/www/discourse/public/assets/vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js.br
vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js 압축 완료 : 3.33초
108801.669283898 압축 중: admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js
uglifyjs '/var/www/discourse/public/assets/_admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js' -m -c -o '/var/www/discourse/public/assets/admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js' --source-map "root='/assets',url='/assets/admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js.map'" --output '/var/www/discourse/public/assets/admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js'
gzip -f -c -9 /var/www/discourse/public/assets/admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js > /var/www/discourse/public/assets/admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js.gz
[...]
흥미롭네요. 파일은 정상적으로 생성되는데, 영속성(persistence)만 실패하는 건가요?
podman 볼륨이 어떻게 작동하는지, 그리고 그 볼륨을 뒷받침하는 드라이버가 무엇인지 살펴보는 것이 좋습니다. Docker 환경에서는 지난 몇 년간 스토리지 드라이버와 관련된 수많은 이상한 문제가 발생하여, 저희도 런처 스크립트에서 “권장(blessed)” 드라이버 목록을 따로 유지하고 있을 정도입니다.
저는 overlay2와 동일한 overlayfs를 사용 중입니다.
재미있는 점은, 플러그인을 추가하려고 시도했을 때 몇 번의 빌드에서 에셋 누락 문제가 발생하다가, 이후 다시 빌드했을 때 에셋 누락 없이 정상적으로 빌드가 완료되었다는 것입니다. 플러그인 없이 다시 빌드했을 때는 매우 원활하게 작동했습니다. 이게 무슨 일일까요?
수정: 제 환경에서는 잘 작동했고, 이제 에셋이 여기에 캐시되었습니다. 하지만 실행 중 다른 사용자들에게는 작동을 멈췄습니다.
수정 2: 다시 빌드하자 이전처럼 에셋이 깨지는 문제가 발생했고, 해결책은 이전과 동일한 방식으로 다시 빌드하는 것이었습니다.