도메인 제공업체와 포럼 도메인을 동시에 변경하려고 했는데, 먼저 업그레이드를 하는 것이 더 낫다는 것을 깨달았습니다… 나쁜 선택이었네요. 디스코urs 업그레이드가 50%는 실패한다는 사실을 잊고 있었습니다.
'gem ‘mini_racer’'와 관련된 문제일 수도 있고, 너무 오래된 디스트리뷰션/gcc에 대한 댓글들을 몇 개 찾았지만, 도메인 만료까지 9일밖에 남지 않은 상황에서 결국 콘솔을 통해 백업을 복구하기로 결정했습니다. 사이트가 현재 다운되어 있기 때문이죠(게다가 포럼 URL이 변경될 것이라는 메시지를 방금 올렸으니 사람들이 지금 바로 접속을 시도하고 있을 수도 있겠네요, 어머).
하지만 이것도 실패합니다. 또 어머, 사이트가 좀 더 길게 다운될 것 같습니다…
로그를 첨부합니다. (항상 그렇듯이) 전혀 감이 잡히지 않습니다. 몇 가지 볼일이 있어서 단순한 해결책만 바라고 있습니다.
맞아, 하지만 새 서버를 설정하고 소스 컨트롤을 함께 옮길지, 그리고 몇 년간 설치해 온 것들을 24/7 클라우드 드롭렛에 갖추는 것까지 고려해야 하니까… 이건 최소 하루 정도는 걸리는 작업이 좋을 텐데, 지금은 그런 시간이 없거든.
일단 당분간은 어젯밤 드롭렛을 복원하고 그 위에 백업을 덮어쓰는 방식으로 진행할 거야. 적어도 그 정도는 잘 되길 바라면서.
진심으로, 업그레이드가 실패하면 이전 상태로 자동 복구되는 안전장치가 있어야 해. 드롭렛 백업을 취하는 건 좀 과한 조치인 것 같고, 관리자에 따라 달라지는 문제이기도 하지. 편집증적으로 두 인스턴스를 두고 항상 활성 인스턴스를 가장 오래된 것으로 옮긴 뒤 그걸 업그레이드하는 방식으로 시작하는 거… 글쎄, 요즘에는 그렇게 해야 할 것 같아.
글쎄, 도메인 변경 때문에 app.yml을 업데이트해야 했고, Digital Ocean에서 스냅샷을 먼저 찍지 않은 채 실수로 재시작 대신 앱 재구성을 실행했어요. 그래서 결국 지금 업그레이드를 강제로 해야 하는 상황이 되었네요 :(.
결국 성공했습니다. 몇 가지 부딪힌 문제가 있었기 때문에(웃음 허용) 제가 겪은 (불)운의 여정을 여기에 공유하겠습니다. 누군가 정확히 동일한 오류 메시지를 만나서 이 글에서 도움을 받을 수 있기를 바랍니다.
소요 시간 3.5시간 (Digital Ocean의 1클릭 설업을 게을리하고 했어야 했는데, 업그레이드가 잘 될지 궁금해서 그랬습니다.)
*****Ubuntu 16.x → Ubuntu 18.x 업그레이드
*****Ubuntu 18.x → Ubuntu 20.x 업그레이드 (실제로 얼마나 잘 작동하는지 놀랐습니다. Windows보다 훨씬 낫네요 )
*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로 전송한 뒤 백업을 복구하는 하이브리드 방식도 사용합니다. 이 방법은 데이터베이스 업그레이드 단계를 생략할 수 있어 효율적입니다.