부트스트래핑 실패

이것은 테스트 머신에서 발생한 문제입니다. 이전에 이 머신에서 Discourse를 실행하고 있었는데, 설치를 엉망으로 만들었고 최신 버전으로 업데이트하지 못했는데, 이는 제 실수라고 생각했습니다. Discourse 디렉터리 전체를 삭제하고 Docker를 정리한 후, 라이브 DB에서 백업을 가져오기 전에 완전히 새로운 설치를 시도했습니다.

이상하게도 해결할 수 없는 동일한 문제가 계속 발생하고 있습니다.

아래는 실패 출력 결과입니다. discourse-doctor를 이미 시도해 보았지만 도움이 되는 내용은 나오지 않았습니다.

...
I, [2022-06-04T18:42:29.087446 #1]  INFO -- : Terminating async processes
I, [2022-06-04T18:42:29.087672 #1]  INFO -- : Sending INT to HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main pid: 42
I, [2022-06-04T18:42:29.087881 #1]  INFO -- : Sending TERM to exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 103
2022-06-04 18:42:29.088 UTC [42] LOG:  received fast shutdown request
103:signal-handler (1654368149) Received SIGTERM scheduling shutdown...
2022-06-04 18:42:29.118 UTC [42] LOG:  aborting any active transactions
2022-06-04 18:42:29.123 UTC [42] LOG:  background worker "logical replication launcher" (PID 51) exited with exit code 1
2022-06-04 18:42:29.123 UTC [46] LOG:  shutting down
103:M 04 Jun 2022 18:42:29.154 # User requested shutdown...
103:M 04 Jun 2022 18:42:29.154 * Saving the final RDB snapshot before exiting.
103:M 04 Jun 2022 18:42:29.159 * DB saved on disk
103:M 04 Jun 2022 18:42:29.159 # Redis is now ready to exit, bye bye...
2022-06-04 18:42:29.201 UTC [42] LOG:  database system is shut down


FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 1102 exit 1>
Location of failure: /usr/local/lib/ruby/gems/2.7.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.
69cb25658efb6f16e4479bb98a2d0278d72e56028865730841ac1efacc5b8d9d
==================== END REBUILD LOG ====================

서버 자체는 문제없는 것 같습니다 - 디스크 공간이 충분하고 다른 리소스도 부족하지 않습니다. 혹시 아이디어가 있으신가요?

로그를 더 많이 확인해야 할 것 같습니다. 특히 그 rake 명령어에서 어떤 일이 일어났는지 확인하는 것이 중요합니다.

아래 명령어의 출력을 제공해 주세요.

free
df

로그에 WARNING overcommit_memory is set to 0! 메시지가 포함되어 있다면 관련이 있을 수도 있습니다.

실제로 포함되어 있습니다:

103:M 04 Jun 2022 18:40:07.369 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.

요청하신 나머지 내용은 다음과 같습니다:

root@testserver-2021:/var/discourse# free
              total        used        free      shared  buff/cache   available
Mem:       16005396      353200    13366988        1100     2285208    15316292
Swap:             0           0           0
root@testserver-2021:/var/discourse# free -h
              total        used        free      shared  buff/cache   available
Mem:           15Gi       343Mi        12Gi       1.0Mi       2.2Gi        14Gi
Swap:            0B          0B          0B
root@testserver-2021:/var/discourse# df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            7.7G     0  7.7G   0% /dev
tmpfs           1.6G  1.1M  1.6G   1% /run
/dev/sda1       226G   44G  173G  21% /
tmpfs           7.7G     0  7.7G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           7.7G     0  7.7G   0% /sys/fs/cgroup
/dev/sda15       61M  5.2M   55M   9% /boot/efi
overlay         226G   44G  173G  21% /var/lib/docker/overlay2/c9457cf1821fb558a92c79e55bd6a70153b8ae0388732aa5eef17237b6924c25/merged
overlay         226G   44G  173G  21% /var/lib/docker/overlay2/6d350b54871378d4b0e7ac5d30e236df3bdd1c45cd3b5fb2e9ab67ffe7a1bba1/merged
tmpfs           1.6G     0  1.6G   0% /run/user/0
overlay         226G   44G  173G  21% /var/lib/docker/overlay2/104be98cc5c33e73e4119d2186b6d9d08123ffc79df872f48425e94a66ca6749/merged

스왑이 0이기 때문에 overcommit 메시지가 나오는 것 같습니다. 이상하게도 이 서버가 존재한 이래로 스왑 값은 한 번도 변한 적이 없습니다…

음… 16GB RAM은 꽤 넉넉해서 스왑이 필요 없다고 생각할 수 있습니다. 하지만 저는 일부러 추가해도 해롭지 않다고 봅니다. 로그를 확인하지 못한 상태에서는 문제가 메모리 부족 때문이라고 단정할 수 없습니다. 하지만 만약 메모리 부족이 원인이라면, 스왑이 있든 없든 오버커밋(overcommit) 모드를 설정하는 것이 도움이 될 수 있습니다.

다음 명령도 시도해 볼 수 있습니다:
dmesg | egrep -i "oom|memory"
이 명령을 사용하면 메모리 부족(OOM)으로 인해 종료된 프로세스가 있는지 확인할 수 있습니다.

다시 한번 말씀드리자면, 로그를 더 많이 확인하는 것이 도움이 될 가능성이 큽니다.

수정: 실수로 -i 옵션을 추가했네요.

스왑을 생성하고 오버커밋 모드도 설정했습니다. 불행히도 아무런 변화가 없었습니다.

앱 빌드 전체 로그는 여기 있습니다: https://pastebin.com/raw/R2B8Wneu

포트가 사용 중이라는 Redis 실패 메시지가 몇 개 보이는데, 이것이 어디서 비롯되는지 파악이 되지 않습니다.

root@testserver-2021:~# sudo lsof -i -P -n | grep LISTEN
systemd       1            root   89u  IPv6  15961      0t0  TCP *:9090 (LISTEN)
systemd-r   573 systemd-resolve   13u  IPv4  10890      0t0  TCP 127.0.0.53:53 (LISTEN)
sshd        676            root    3u  IPv4  20387      0t0  TCP *:22 (LISTEN)
sshd        676            root    4u  IPv6  20389      0t0  TCP *:22 (LISTEN)
docker-pr   913            root    4u  IPv4  23665      0t0  TCP *:9100 (LISTEN)
docker-pr   921            root    4u  IPv6  21827      0t0  TCP *:9100 (LISTEN)
docker-pr   981            root    4u  IPv4  24732      0t0  TCP *:3003 (LISTEN)
docker-pr   989            root    4u  IPv6  22636      0t0  TCP *:3003 (LISTEN)
monitorix  1284       monitorix    3u  IPv4  27978      0t0  TCP *:8080 (LISTEN)

로그를 올려주셔서 감사합니다. S3 설정 문제인 것 같습니다. (저는 이 부분은 도움을 드릴 수 없지만, 다른 누군가는 도와줄 수 있을 겁니다.)

I, [2022-06-05T09:06:10.144445 #1] INFO – : > cd /var/www/discourse && su discourse -c ‘bundle exec rake db:migrate’
rake aborted!
Discourse::SiteSettingMissing: s3_upload_bucket
/var/www/discourse/lib/file_store/s3_store.rb:267:in `s3_bucket’

좋은 발견이었네요, Ed. 감사합니다. s3_bucket이 어느 시점에 s3_upload_bucket으로 변경된 것 같고, containers/app.yml 파일에 해당 항목이 존재하여 문제가 발생한 것으로 보입니다. 해당 파일의 DISCOURSE_S3_BUCKET을 DISCOURSE_S3_UPLOAD_BUCKET으로 변경한 후 빌드가 정상적으로 진행되었습니다.

이러한 변경 사항이 빌드 프로세스에 체크를 도입하여 이런 문제를 방지할 수 있기를 바랍니다 - 그리고 항상 테스트 머신에서 업데이트를 테스트하는 것이 좋겠습니다.