업데이트할 때마다 오류가 나요

업데이트를 여러 번 시도해 보았지만, 브라우저로 업데이트할 때마다 항상 죄송합니다. Discourse 업데이트 중 오류가 발생했습니다. 아래 로그를 확인해 주세요.라는 오류 메시지가 표시됩니다. 결국 터미널을 통해 업데이트해야 하는데, 이렇게 하면 포럼을 약 30분 동안 중단해야 하므로 좋지 않습니다.

도움을 주실 수 있는 분이 계신다면 감사하겠습니다.

오류 내용:

요약
********************************************************
*** Please be patient, next steps might take a while ***
********************************************************
Cycling Unicorn, to free up memory
Restarting unicorn pid: 603
Waiting for Unicorn to reload.
Waiting for Unicorn to reload..
Waiting for Unicorn to reload...
Waiting for Unicorn to reload....
Waiting for Unicorn to reload.....
Waiting for Unicorn to reload......
Waiting for Unicorn to reload.......
Waiting for Unicorn to reload........
Waiting for Unicorn to reload.........
Waiting for Unicorn to reload..........
Waiting for Unicorn to reload...........
Waiting for Unicorn to reload............
Waiting for Unicorn to reload.............
Waiting for Unicorn to reload..............
Waiting for Unicorn to reload...............
Waiting for Unicorn to reload................
Waiting for Unicorn to reload.................
Waiting for Unicorn to reload..................
Waiting for Unicorn to reload...................
Waiting for Unicorn to reload....................
Waiting for Unicorn to reload.....................
Waiting for Unicorn to reload......................
Waiting for Unicorn to reload.......................
Waiting for Unicorn to reload........................
Waiting for Unicorn to reload.........................
Waiting for Unicorn to reload..........................
Waiting for Unicorn to reload...........................
Waiting for Unicorn to reload............................
Waiting for Unicorn to reload.............................
Waiting for Unicorn to reload..............................
Waiting for Unicorn to reload...............................
$ cd /var/www/discourse && git reset --hard HEAD@{upstream}
HEAD is now at fe1b1edba FIX: removes + from RTE toggle tooltip (#33542)
$ bundle install --retry 3 --jobs 4
Bundle complete! 143 Gemfile dependencies, 190 gems now installed.
Gems in the groups 'test' and 'development' were not installed.
Bundled gems are installed into `./vendor/bundle`
3 installed gems you directly depend on are looking for funding.
  Run `bundle fund` for details
$ if [ -f yarn.lock ]; then yarn install; else CI=1 pnpm install; fi
Scope: all 16 workspace projects
Lockfile is up to date, resolution step is skipped
Already up to date

Done in 9.1s using pnpm v9.15.6
$ LOAD_PLUGINS=0 bundle exec rake plugin:pull_compatible_all
discourse-adplugin is already at latest compatible version
discourse-categories-suppressed is already at latest compatible version
discourse-doc-categories is already at latest compatible version
Invalid version list in /var/www/discourse/plugins/discourse-landing-pages
discourse-landing-pages is already at latest compatible version
discourse-solved is already at latest compatible version
docker_manager is already at latest compatible version
$ SKIP_POST_DEPLOYMENT_MIGRATIONS=1 bundle exec rake multisite:migrate
Multisite migrator is running using 1 threads

Migrating default
Seeding default
*** Bundling assets. This will take a while *** 
$ bundle exec rake themes:update assets:precompile
Updating themes with concurrency: 10
[db:default] 'New Topic Header Button' -  checking...
[db:default] 'New Topic Header Button' -  up to date
[db:default] 'Category Banners' -  checking...
[db:default] 'Category Banners' -  up to date
[db:default] 'Clickable Topic' -  checking...
[db:default] 'Clickable Topic' -  up to date
[db:default] 'Tag Banners' -  checking...
[db:default] 'Tag Banners' -  up to date
[db:default] 'Breadcrumb Links' -  checking...
[db:default] 'Breadcrumb Links' -  up to date
[db:default] 'Welcome Link Banner' -  checking...
[db:default] 'Welcome Link Banner' -  up to date
[db:default] 'Tag Icons' -  checking...
[db:default] 'Tag Icons' -  up to date
[db:default] 'Social Share' -  checking...
[db:default] 'Social Share' -  up to date
[db:default] 'Navigation Menu Display Control' -  checking...
[db:default] 'Navigation Menu Display Control' -  up to date
[db:default] 'DiscoTOC' -  checking...
Node.js heap_size_limit is less than 2048MB. Setting --max-old-space-size=2048 and CHEAP_SOURCE_MAPS=1
Existing build is not reusable.
- Existing: {"ember_env"=>"production", "core_tree_hash"=>"c71c1ad482ff7f24c3ad3a76d5a521861f29e1fb"}
- Current: {"ember_env"=>"production", "core_tree_hash"=>"d026d5621e9421eaf67123aab7361a44f0fa9c31"}
Running full core build...
Building
Environment: production
The setting 'staticAddonTrees' will default to true in the next version of Embroider and can't be turned off. To prepare for this you should set 'staticAddonTrees: true' in your Embroider config.
The setting 'staticAddonTestSupportTrees' will default to true in the next version of Embroider and can't be turned off. To prepare for this you should set 'staticAddonTestSupportTrees: true' in your Embroider config.
building...
...[ConfigLoader]
...[Babel: @embroider/macros > applyPatches]
...[Babel: pretty-text > applyPatches]
...[Babel: @ember/legacy-built-in-components > applyPatches]
...[Babel: ember-source > applyPatches]
[BABEL] Note: The code generator has deoptimised the styling of /var/www/discourse/app/assets/javascripts/discourse/ember/ember-template-compiler.js as it exceeds the max of 500KB.
[BABEL] Note: The code generator has deoptimised the styling of /var/www/discourse/app/assets/javascripts/discourse/ember/ember.js as it exceeds the max of 500KB.
...[Babel: @glimmer/component > applyPatches]
...[Babel: @ember/render-modifiers > applyPatches]
...[Babel: dialog-holder > applyPatches]
...[Babel: ember-this-fallback > applyPatches]
...[Babel: ember-buffered-proxy > applyPatches]
...[Babel: ember-cache-primitive-polyfill > applyPatches]
...[Babel: float-kit > applyPatches]
...[Babel: select-kit > applyPatches]
...[@embroider/compat/app]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
undefined
 ERR_PNPM_RECURSIVE_EXEC_FIRST_FAIL  Command was killed with SIGKILL (Forced termination): ember build -prod
/var/www/discourse/script/assemble_ember_build.rb:103:in `system': Command failed with exit 1: pnpm (RuntimeError)
	from /var/www/discourse/script/assemble_ember_build.rb:103:in `<main>'
Docker Manager: FAILED TO UPGRADE
#<RuntimeError: RuntimeError>
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:211:in `run'
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:112:in `upgrade'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:19:in `block in <main>'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:6:in `fork'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:6:in `<main>'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.2.2.1/lib/rails/commands/runner/runner_command.rb:44:in `load'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.2.2.1/lib/rails/commands/runner/runner_command.rb:44:in `block in perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/execution_wrapper.rb:91:in `wrap'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.2.2.1/lib/rails/commands/runner/runner_command.rb:70:in `conditional_executor'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.2.2.1/lib/rails/commands/runner/runner_command.rb:43:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.3.2/lib/thor/command.rb:28:in `run'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.3.2/lib/thor/invocation.rb:127:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.2.2.1/lib/rails/command/base.rb:178:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.3.2/lib/thor.rb:538:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.2.2.1/lib/rails/command/base.rb:73:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.2.2.1/lib/rails/command.rb:71:in `block in invoke'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.2.2.1/lib/rails/command.rb:149:in `with_argv'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.2.2.1/lib/rails/command.rb:69:in `invoke'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.2.2.1/lib/rails/commands.rb:18:in `<main>'
/usr/local/lib/ruby/3.3.0/bundled_gems.rb:69:in `require'
/usr/local/lib/ruby/3.3.0/bundled_gems.rb:69:in `block (2 levels) in replace_require'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/bootsnap-1.18.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require'
bin/rails:18:in `<main>'
Spinning up 1 Unicorn worker(s) that were stopped initially

더 큰 스왑 파일을 만들어야 합니다.
저도 같은 문제를 겪었는데, 이렇게 해결했습니다.

어떻게 하는 건지 설명해 주실 수 있을까요? 그 부분은 잘 모르겠어요. 누군가가 그 얘기를 하는 걸 들은 적은 있지만, 제가 직접 설정을 변경한 적은 없는 것 같아요(아마도 제가 변경하지 않아서 이런 문제가 생긴 것 같습니다).
감사합니다.

명령줄을 통해 업그레이드하는 것을 권장합니다.

cd /var/discourse
./launcher rebuild app

메모리 문제가 여전히 발생할 수 있습니다. 실패할 경우, 오류 메시지와 다음 명령의 출력을 포함해 주세요.

free -h

수정: 어, 죄송합니다. 충분히 자세히 읽지 못했습니다:

스왑을 추가하는 것이 해결책입니다. 제가 수행하는 방법은 다음과 같습니다.

cd /var/discourse
grep swap discourse-setup

이렇게 하면 discourse-setup이 스왑 공간을 생성하는 데 사용하는 명령을 확인할 수 있습니다.

그런 다음 다음과 같은 작업을 수행할 수 있습니다.

./launcher stop app # 수행하지 않으면 스왑을 끌 수 없을 가능성이 높습니다
swapoff /swapfile # 이제 파일 이름이 /swapfile인 것을 찾았습니다
fallocate -l -4GB /swapfile # 출력된 값에서 조정
mkswap /swapfile # 이 명령은 스왑 파티션을 "포맷"합니다

fstab에 추가하는 등의 나머지 작업은 건너뛰고, 그냥 다시 켜면 됩니다:

swapon /swapfile
./launcher start app

그런 다음 다음 명령으로 확인할 수 있습니다.

free -h

스왑 파일이 없다면 ./discourse-setup을 실행하면 자동으로 추가해 주며, 질문을 하기 시작하면 컨트롤+C를 눌러 중단할 수 있습니다.

Google 또는 YouTube를 사용하세요:
“Linux swap file”

DigitalOcean의 가이드입니다:

보통 RAM 용량만큼 스왑 공간을 추가해야 합니다.

https://meta.discourse.org/search?context=topic&context_id=373634&q=Node.js%20heap_size_limit%20is%20less%20than%202048MB&skip_context=true

업데이트
Claude와 몇 가지 대화를 나눈 후, 현재 상황은 다음과 같습니다:

처음에는 다음과 같은 상태였습니다.

sudo swapon --show
NAME      TYPE SIZE USED PRIO
/swapfile file   2G   1G   -2

이 상태에서도 여전히 오류가 발생했습니다.

그래서 4GB로 늘릴 수 있었습니다. 아마도 이렇게 된 것 같습니다:

sudo swapon --show
NAME      TYPE SIZE   USED PRIO
/swapfile file   4G 714.4M   -2

이제 이상한 점은 이렇습니다. 이 작업을 수행하는 동안 업데이트 페이지로 돌아갔는데, 놀랍게도 모든 것이 업데이트되어 있었습니다…
오류를 표시하고 있었는데 어떻게 이런 일이 가능한 걸까요? :confused:

어쨌든, 이제 적어도 스왑 파일(swapfile)이 RAM이 아니라 디스크 공간과 관련 있다는 것을 이해했습니다. 저는 DigitalOcean의 1GB RAM, 25GB 디스크를 가진 드롭렛(droplet)을 사용하고 있습니다.

그래서 지금은 4GB 스왑 파일이 괜찮을까요?
하지만 여전히, 오류를 표시한 후에 왜 업데이트가 된 것인지 궁금합니다.

스왑 파일은 디스크 공간의 일부를 매우, 매우 느린 RAM처럼 사용하는 방법입니다. 따라서 디스크 공간과 RAM 모두와 관련이 있습니다.

25GB는 겨우 충분한 용량입니다. 명령줄 업그레이드를 거의 매번 수행하기 전에 ./launcher cleanup을 실행해야 합니다.

제가 말한 것은, 스왑 파일에 대한 토론을 볼 때 사람들이 "2GB 스왑 파일을 생성하세요"라고 하면 RAM 용량과 관련이 있는 줄 알았다는 것입니다. 제 경우에는 RAM이 1GB밖에 없어서 그렇게 할 수 없었을 것입니다. 이제 스왑 파일이 실제로는 디스크 공간이며, 작은 파티션을 만드는 것과 비슷하다는 것을 이해했습니다. 따라서 필요할 때 서로 "소통"하기 때문에 관련이 있다고 볼 수 있지만, 제 코멘트는 더 문자 그대로였습니다.

현재 제가 감당할 수 있는 한도이며, 아직 실제 커뮤니티가 없으므로 이 정도면 충분합니다. 커뮤니티가 성장하면 업그레이드할 것입니다.

즉, 관리자 패널을 사용하여 업데이트를 하더라도 각 업데이트 전에 터미널에서 ./launcher cleanup를 실행해야 한다는 말씀이신가요?

아니요. 관리자 패널을 사용하면 Docker가 사용하지 않는 이미지를 더 많이 생성하는 것은 아닙니다. 다만, 관리자 패널을 통한 업그레이드를 수행하기에 메모리(RAM + 스왑)가 부족할 수 있습니다.

이 모든 게 좀 혼란스럽네요…
몇몇 사람이 저와 같은 문제를 겪고 있다고 했는데, 2GB 스왑파일을 만들었다니 해결되었다고 하더라고요. 저는 업데이트를 한 뒤에 4GB 스왑파일을 만들었기 때문에, 다음 업데이트를 기다렸다가 테스트를 해봐야 할 것 같습니다.

예를 들어, RAM을 2GB로 업그레이드하면 디스크 공간이 여전히 25GB인 상태에서도 충분한가요?

이런 것에 대해 아주 초보자인데, 대부분의 분들에게는 너무 당연한 질문일 수 있어서 죄송합니다. 제가 직접 해보면서 하나씩 알아가려고 노력 중입니다.

메모리 1GB에 스왑 4GB이면 충분할 것입니다.

개인적으로는 처음 시작할 때 최소 2GB에 스왑 2GB를 권장하지만, 표준 설치의 공개된 최소 요구 사항을 충족하고 있습니다.

계속 진행해서 사용해 보고, 너무 느리다고 느껴질 때만 업그레이드하는 것이 좋습니다.

이제 메모리 관련 문제는 없을 것입니다.

다만, 말씀하신 대로 HDD는 금방 가득 차고, RAM 용량이 얼마이든 cleanup은 반드시 수행해야 합니다.

감사합니다. 지금은 우선 콘텐츠를 추가하고 사용자를 늘려서 업그레이드가 필요할 때를 기다리려 합니다.

주제에서 약간 벗어나지만 디스크 공간과 관련된 내용입니다. 모든 것을 점검하던 중 약 18GB를 사용 중인 것을 확인했고, ChatGPT에 물어보니 Discourse가 그만큼의 공간을 차지하는 것이 정상이라고 하더군요.

만약 그렇다면, 제 25GB 서버는 설치에 18GB + 스왑 파일에 4GB를 사용하게 되어 남는 공간이 거의 없게 됩니다. 이 내용을 확인해 주실 수 있을까요?

당신의 로봇과 논쟁하진 않을 거예요.

4GB가 사용 가능한 디스크 공간에서 차감된다는 점은 맞아요 (물론이죠).

방금 모든 폴더를 확인해 보니 이 폴더가 12GB를 차지하고 있는 것을 발견했습니다:

/var/lib/docker/overlay2/

이 폴더는 무엇이며, 불필요한 파일을 삭제하는 등으로 용량을 줄이는 것이 가능한가요?

이전 스레드를 참고해 보세요.
25G 드롭렛에서 디스크 공간 부족으로 Discourse 업그레이드 실패

아래 스레드도 참고해 보세요.

아마 누군가가 다음과 같이 말할 수도 있겠죠:

추가적인 맥락 없이 그 첫 번째 코멘트는 저에게 큰 도움이 되지 않았습니다. phpBB와 같은 다른 플랫폼들은 훨씬 가볍다는 것을 알면서도, 디스코스가 18GB의 디스크 공간을 사용할 것이라고는 예상하지 못했거든요. (전문가는 아니지만, 왜 어떤 플랫폼이 다른 플랫폼보다 가벼운지는 전혀 모르지만, 분명히 서로 다른 것 같습니다.) 그래서 공식 설치 페이지에 디스코스가 약 NGB의 공간을 사용할 수 있다는 내용이 전혀 없는 상황에서, 단순히 25GB가 간신히 충분하다는 말만 했을 때, 저는 디폴트 Digital Ocean의 1GB RAM과 25GB 디스크 공간이 충분히 여유롭고, 아마도 더 큰 커뮤니티들만 25GB로는 힘들 거라고 생각했습니다. 제 커뮤니티는 이제 막 시작 단계라 디스크 공간을 문제점으로 보지 않았습니다.

이해가 되셨으면 좋겠습니다.