업그레이드가 실패합니다 (다시 :) )

도메인 제공업체와 포럼 도메인을 동시에 변경하려고 했는데, 먼저 업그레이드를 하는 것이 더 낫다는 것을 깨달았습니다… 나쁜 선택이었네요. 디스코urs 업그레이드가 50%는 실패한다는 사실을 잊고 있었습니다. :frowning:

'gem ‘mini_racer’'와 관련된 문제일 수도 있고, 너무 오래된 디스트리뷰션/gcc에 대한 댓글들을 몇 개 찾았지만, 도메인 만료까지 9일밖에 남지 않은 상황에서 결국 콘솔을 통해 백업을 복구하기로 결정했습니다. 사이트가 현재 다운되어 있기 때문이죠(게다가 포럼 URL이 변경될 것이라는 메시지를 방금 올렸으니 사람들이 지금 바로 접속을 시도하고 있을 수도 있겠네요, 어머).

하지만 이것도 실패합니다. 또 어머, 사이트가 좀 더 길게 다운될 것 같습니다…

로그를 첨부합니다. (항상 그렇듯이) 전혀 감이 잡히지 않습니다. 몇 가지 볼일이 있어서 단순한 해결책만 바라고 있습니다.

discourse_upgrade_fails.txt (40.7 KB)

mini-racer에 문제가 발생하고 있다면, Ubuntu 설치 버전이 너무 오래되었을 가능성이 큽니다.

Dev에서 발생한 유사한 문제를 확인해 보세요:

네, 맞아요, 여기서 말하는 건 16.04.3 LTS입니다.

지금은 일단 이전 버전으로 돌아가고 싶어요.

그리고 시간이 되면 업그레이드를 ‘쉽게’ 할 수 있는지, 아니면 10년 만에 결국 처음부터 새 Ubuntu를 설치해서 데이터를 옮기는 게 나을지 확인해 볼 겁니다. 하지만 지난 몇 년간 제가 다른 작업들을 얼마나 많이 해왔는지 생각해보면… 아, 좀 불안하네요.

와, 새 서버로 옮기면 되잖아.

백업/복원을 사용하여 새 서버로 이전하고 app.yml의 변경 사항을 유지하면, 모든 것이 함께 이전되어야 합니다.

맞아, 하지만 새 서버를 설정하고 소스 컨트롤을 함께 옮길지, 그리고 몇 년간 설치해 온 것들을 24/7 클라우드 드롭렛에 갖추는 것까지 고려해야 하니까… 이건 최소 하루 정도는 걸리는 작업이 좋을 텐데, 지금은 그런 시간이 없거든.

일단 당분간은 어젯밤 드롭렛을 복원하고 그 위에 백업을 덮어쓰는 방식으로 진행할 거야. 적어도 그 정도는 잘 되길 바라면서.

진심으로, 업그레이드가 실패하면 이전 상태로 자동 복구되는 안전장치가 있어야 해. 드롭렛 백업을 취하는 건 좀 과한 조치인 것 같고, 관리자에 따라 달라지는 문제이기도 하지. 편집증적으로 두 인스턴스를 두고 항상 활성 인스턴스를 가장 오래된 것으로 옮긴 뒤 그걸 업그레이드하는 방식으로 시작하는 거… 글쎄, 요즘에는 그렇게 해야 할 것 같아.

표준 설치의 경우 컨테이너를 재시작해 보시면 됩니다.

OS가 EOL(지원 종료)된 지 4년이 지났다면 업그레이드가 정상적으로 작동할 것이라고 기대할 수 없습니다.

새로운 VM으로 이전하세요. 구 서버에 필요한 것이 남아 있을 가능성은 낮습니다. 말씀하신 버전 관리 시스템이 무엇인지 모르겠습니다.

그래, 거울을 볼 때가 온 것 같네 :smiley: .

  • 하지만 모든 홈 인스턴스를 WIN11로 업그레이드하는 데 2년이 걸렸어 (항상 시간이 부족하니까).
  • 핀란드는 이번 달 말에 HD 전용 TV로 전환할 예정이야 (실제로 모든 것을 넷플릭스로 보는 건 아니거든 = 맞) 그리고 몇 달째 그걸 준비하고 있어.
  • 아직 업그레이드하지 않은 W7/IIS7 웹 서버가 하나 남아있어 :slight_smile:
  • 아, 그리고 discourse는 이 목록의 맨 뒤에 있어… 아마 여름쯤에나 될 것 같아.
  • 해야 할 것과 할 수 있는 것이 따로 있어. 현실은 냉정해.

드롭렛 백업을 복원하는 동안 문제가 좀 있었지만 다시 세팅을 마쳤어. 후.

소란을 피워 미안해.

그래서 업그레이드를 준비할 때까지 기존 버전을 계속 사용하세요.

사실 PostgreSQL 15 업데이트를 수행하는 것보다 새 VM으로 이거하는 것이 거의 더 쉽습니다.

아니면 아무것도 업그레이드하지 않고 몇 년 더 기다리세요. :wink:

글쎄, 도메인 변경 때문에 app.yml을 업데이트해야 했고, Digital Ocean에서 스냅샷을 먼저 찍지 않은 채 실수로 재시작 대신 앱 재구성을 실행했어요. 그래서 결국 지금 업그레이드를 강제로 해야 하는 상황이 되었네요 :(.

결국 성공했습니다. 몇 가지 부딪힌 문제가 있었기 때문에(웃음 허용) 제가 겪은 (불)운의 여정을 여기에 공유하겠습니다. 누군가 정확히 동일한 오류 메시지를 만나서 이 글에서 도움을 받을 수 있기를 바랍니다.

소요 시간 3.5시간 (Digital Ocean의 1클릭 설업을 게을리하고 했어야 했는데, 업그레이드가 잘 될지 궁금해서 그랬습니다.)

*****Ubuntu 16.x → Ubuntu 18.x 업그레이드
*****Ubuntu 18.x → Ubuntu 20.x 업그레이드 (실제로 얼마나 잘 작동하는지 놀랐습니다. Windows보다 훨씬 낫네요 :smiley: )

*Welcome to Ubuntu 20.04.6 LTS (GNU/Linux 5.4.0-208-generic x86_64)*

*root@Discourse:~# cd /var/discourse/*
*root@Discourse:/var/discourse# ./launcher restart app*
*ERROR: Docker version 19.03.13 not supported, please upgrade to at least 20.10.0, or recommended 24.0.7*
*root@Discourse:/var/discourse# sudo apt-get install docker-ce --only-upgrade*
*Reading package lists... Done*
*Building dependency tree*
*Reading state information... Done*
*docker-ce is already the newest version (5:19.03.13~3-0~ubuntu-xenial).*

******(/(&(%%(&/()(=)/&/))&/*
******docker를 버리고 다시 설치하고 싶지 않았는데, 이제 더 이상 참을 수가 없네요...*

*root@Discourse:/var/discourse# sudo apt remove docker docker-engine docker.io containerd runc*
*root@Discourse:/var/discourse# sudo apt install apt-transport-https ca-certificates curl software-properties-common*
*root@Discourse:/var/discourse# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -*
*root@Discourse:/var/discourse# sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"*
*root@Discourse:/var/discourse# sudo apt update*

******이것도 실행하려 했지만 로그에서 찾을 수 없어서 아마 실행하지 않았나 봅니다 (명령은 표시되지 않지만 설치 명령은 보이네요, huh?):*
******sudo apt install docker-ce docker-ce-cli containerd.io*

*root@Discourse:/var/discourse# sudo docker --version*
*Docker version 28.0.1, build 068a01e*
*root@Discourse:/var/discourse# ./launcher rebuild app*

******몇 번 시도를 해야 했지만, 몇 번 재구성한 후에야 마침내 나아진 것 같습니다.*
******... 마침내 redis까지 왔네요, 우와... 아니면 아니네요*
*docker: Error response from daemon: failed to set up container networking: driver failed programming external connectivity on endpoint app (ea1a6cc790c13940435c2626a4e8b6169f04612f4be552be25564def7d5745eb): failed to bind host port for 0.0.0.0:80:172.17.0.2:80/tcp: address already in use*

******(/(&(%%(&/()(=)/&/))&/ (아니면 이미 말했나요?)*

*root@Discourse:/var/discourse# hostname -I*
*139.X.X.X 10.19.0.5 172.17.0.1*
*root@Discourse:/var/discourse# sudo lsof -i :80*
*COMMAND PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME*
*apache2 839     root    4u  IPv6  23477      0t0  TCP *:http (LISTEN)*
*apache2 844 www-data    4u  IPv6  23477      0t0  TCP *:http (LISTEN)*
*apache2 845 www-data    4u  IPv6  23477      0t0  TCP *:http (LISTEN)*

******기본적으로 Apache가 켜져 있나요? 언제부터요? 안 돼요!*

*root@Discourse:/var/discourse# sudo systemctl stop apache2*
*root@Discourse:/var/discourse# sudo systemctl disable apache2*
*Synchronizing state of apache2.service with SysV service script with /lib/systemd/systemd-sysv-install.*
*Executing: /lib/systemd/systemd-sysv-install disable apache2*
*Removed /etc/systemd/system/multi-user.target.wants/apache2.service.*
*root@Discourse:/var/discourse# ./launcher start app*

******드디어 성공! (평소처럼 느린 nginx 출력 메시지 후에)*

******부팅 후 당연히... 제가 기다리던 것이 나타났습니다... 음, 모든 것이 일주일 동안 잘 작동하면, 스냅샷과 백업을 한 후... ;) 계속 고생해도 되겠네요*
*New release '22.04.5 LTS' available.*
*Run 'do-release-upgrade' to upgrade to it.*

그렇게 하지 마세요. 그것은 지원되는 설치 방법이 아닙니다.

새로운 드롭렛을 생성한 뒤, 새로 설치하고 백업을 복사하거나 rsync를 사용하여 Discourse 사이트를 다른 VPS로 이동하는 방식을 선택했을 것입니다. 또한 SSL 인증서를 rsync로 전송한 뒤 백업을 복구하는 하이브리드 방식도 사용합니다. 이 방법은 데이터베이스 업그레이드 단계를 생략할 수 있어 효율적입니다.