Discourse 업데이트 실패

오늘 Discourse를 최신 버전으로 업데이트하려고 했는데 실패했습니다. 로그는 다음과 같습니다:

********************************************************
*** Please be patient, next steps might take a while ***
********************************************************
Cycling Unicorn, to free up memory
Restarting unicorn pid: 548
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.........
Stopping 3 Unicorn worker(s), to free up memory
Stopping job queue to reclaim memory, master pid is 2943724
$ cd /var/www/discourse && git fetch --tags --prune-tags --prune --force
$ cd /var/www/discourse && git reset --hard HEAD@{upstream}
HEAD is now at be4f1e335 PERF: Cache `hostname` in `DiscourseLogstashLogger` (#27442)
$ bundle install --retry 3 --jobs 4
Bundle complete! 141 Gemfile dependencies, 174 gems now installed.
Gems in the groups 'development' and 'test' were not installed.
Bundled gems are installed into `./vendor/bundle`
1 installed gem you directly depend on is looking for funding.
  Run `bundle fund` for details
$ yarn install
yarn install v1.22.19
[1/5] Validating package.json...
[2/5] Resolving packages...
warning Resolution field "unset-value@2.0.1" is incompatible with requested version "unset-value@^1.0.0"
[3/5] Fetching packages...
error ember-template-lint@6.0.0: The engine "node" is incompatible with this module. Expected version "^18.18.0 || ^20.9.0 || >=21.1.0". Got "18.16.0"
error Found incompatible module.
info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.
Docker Manager: FAILED TO UPGRADE
#<RuntimeError: RuntimeError>
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:210:in `run'
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:101: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.2.0/gems/railties-7.0.8.4/lib/rails/commands/runner/runner_command.rb:43:in `load'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/railties-7.0.8.4/lib/rails/commands/runner/runner_command.rb:43:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/thor-1.3.1/lib/thor/command.rb:28:in `run'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/thor-1.3.1/lib/thor/invocation.rb:127:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/thor-1.3.1/lib/thor.rb:527:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/railties-7.0.8.4/lib/rails/command/base.rb:87:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/railties-7.0.8.4/lib/rails/command.rb:48:in `invoke'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/railties-7.0.8.4/lib/rails/commands.rb:18:in `<main>'
<internal:/usr/local/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require'
<internal:/usr/local/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/bootsnap-1.18.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require'
bin/rails:18:in `<main>'
Spinning up 3 Unicorn worker(s) that were stopped initially

어떤 아이디어가 있으신가요?

명령줄 업그레이드를 수행해야 합니다.

./launcher rebuild app

제이, 안녕하세요.

해당 작업을 수행했습니다. 또한 ./launcher start app 명령도 실행해 보았어요.

하지만 이번에는 다른 오류가 발생했습니다. Nginx에서 발생한 Bad Gateway 오류입니다. 디스코스가 저장 공간 부족을 경고하는 것을 확인했는데, 일부 공간을 정리했습니다.

관련 정보를 첨부합니다.

공간을 확보한 후 시작(start)이나 재구축(rebuild)을 수행하셨나요?

컨테이너를 시작하면 1분에서 몇 분 정도 Bad Gateway 오류가 발생하는 것은 예상되는 현상입니다. 하지만 데이터베이스를 마이그레이션한 경우, 기존 컨테이너가 더 이상 작동하지 않을 수 있습니다.

그래서 ./launcher rebuild app나 ./launcher start app, ./launcher restart app를 실행할 때마다 항상 저장 공간 정리 여부를 묻는 번거로운 질문이 나타납니다. 매번 Y를 누르고 있습니다.

좋아요, 수동으로 공간을 정리했습니다. snap 디렉터리에는 쓸모없는 파일들이 있었던 것 같습니다.

그 후 ./launcher restart app 프로세스를 다시 실행해 보았습니다. 이번에는 오류가 사라졌습니다.

하지만 여전히 502 Bad Gateway 오류가 발생합니다.

사이트가 몇 분간 정상적으로 실행된 후에도 여전히 해당 문제가 발생한다면 /var/discourse/shared/standalone/logs/rails/production.log와 .../logs/var-log/nginx/* 파일을 확인해 보세요.

그러니까 PostgreSQL 문제네요. 이 문제를 어떻게 해결해야 할까요? PostgreSQL 서버를 수동으로 시작하는 것은 아니죠.

postgres_data 안의 파일들은 서버에서 제 사용자 이름으로 소유자가 설정되어 있고, 그룹은 crontab입니다.

왜 그런 건가요?

이게 표준 설치 방식이 아닌 건가요?

표준 설치를 사용했습니다.

그런 다음 업데이트 과정(관리자 대시보드를 통해)이 실패했습니다. 그래서 서버에 SSH로 접속하여 일부 공간을 정리했습니다. ./launcher rebuild (or restart) app을 실행했을 때 프로세스에서 에러가 발생하지는 않았지만, 502 Bad Gateway 오류가 발생했습니다.

따라서 postgres_data는 누가 소유해야 하나요? 루트(root)인가요?

이 모든 것은 root로 설치해야 합니다.

루트 권한으로 ./launcher rebuild (or restart) app를 실행했습니다. 먼저 sudo su를 입력했습니다. 어쨌든, 일반 사용자로 launcher를 실행할 수 없다고 생각합니다. (Docker가 오류를 발생시킬 것입니다.)

좋아요, 마침내 이 문제들을 해결했습니다.

  1. Discord에 여유 공간을 주기 위해 스토리지 크기를 조정했습니다. GCP에서 Discord VM에 스냅샷을 생성하고 더 큰 스토리지로 복원했습니다.
  2. containers/app.yml 파일의 내용을 다음과 같이 변경했습니다:

변경 전

templates:
  - "templates/postgres.template.yml"

변경 후

templates:
  - "templates/postgres.13.template.yml"

그 후 ./launcher rebuild app을 실행했는데 더 이상 문제가 발생하지 않았습니다.

감사합니다!