업그레이드 실패: 지원되지 않는 Docker 버전

자, 이렇게 문제를 해결했습니다 (신경이 약한 분들에게는 적합하지 않습니다)

  1. Docker 20+를 지원하는 버전으로 Ubuntu를 업그레이드합니다.
    우리는 Ubuntu 16을 사용 중이었기 때문에 최소한 Ubuntu 20으로 업그레이드해야 했으며, 이를 위해 두 번의 업그레이드를 수행했습니다.
RELEASE_UPGRADER_ALLOW_THIRD_PARTY=1 do-release-upgrade
  1. Ubuntu 20으로 업그레이드한 후에는 Docker를 업데이트해야 했는데, Ubuntu는 이를 자동으로 수행하기를 거부했습니다.
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
  1. 이를 통해 docker 28로 업그레이드되었습니다.
  2. 다음을 실행합니다.
./launcher rebuild app
  1. 이 과정에서 postgress가 13에서 15로 업그레이드됩니다. 관련 링크:
    PostgreSQL 15 update
  2. DB 업그레이드가 성공적으로 완료된 후 다음을 실행합니다.
./launcher rebuild app
  1. 이로 인해 컬럼 누락 오류가 발생했습니다.
2025-05-18 14:58:28.208 UTC [1455] discourse@discourse ERROR:  column "require_message" does not exist at character 72
2025-05-18 14:58:28.208 UTC [1455] discourse@discourse STATEMENT:  SELECT id, name, name_key, description, notify_type, auto_action_type, require_message, applies_to, position, enabled, score_type FROM "flags" ORDER BY "flags"."position" ASC
** PLUGIN FAILURE **

You are unable to start Discourse due to this error during plugin
initialization:

PG::UndefinedColumn: ERROR:  column "require_message" does not exist
LINE 1: ..._key, description, notify_type, auto_action_type, require_me...
                                                             ^
  1. 이 시점에서는 컨테이너를 시작할 방법이 없었기 때문에, app.yml로 가서 모든 플러그인을 비활성화한 후 다시 rebuild를 실행했습니다.
  2. 마침내 앱이 재빌드되었고, rails 콘솔에 접속하여 위에서 언급한 컬럼을 수동으로 추가할 수 있었습니다.
./launcher enter app
rails db
ActiveRecord::Base.connection.execute("ALTER TABLE flags ADD COLUMN require_message BOOLEAN DEFAULT FALSE;")
exit
exit 
  1. 컬럼이 존재하는 것을 확인한 후 app.yml로 돌아가 모든 플러그인을 활성화하고 다시 rebuild를 수행했습니다.
  2. Rebuild가 성공했습니다… 그리고 서버가 정상적으로 작동하고 있습니다!

주말에도 신속하게 답변해 주신 @pfaffman님께 감사드립니다. 우리는 새로운 업데이트된 드롭렛을 만들고 데이터를 이전할 예정입니다. 이것은 웹 인터페이스를 통한 빠른 인플레이스 업그레이드로 예정되어 있었습니다. 하지만 스크립트가 docker 호환성을 테스트하지 않는 것 같습니다. discourse docker를 업그레이드했을 때 호환되지 않는 docker 오류가 발생했습니다.

이것은 완전히 우리의 책임입니다. Ubuntu 16이라는 매우 오래된 버전을 유지했기 때문이죠. 안정된 시스템의 장단점 중 하나는 시스템이 오래 유지되는 경향이 있다는 것입니다.