매우 오래된 Discourse 사이트를 업그레이드하는 방법?

1. 가장 쉬운 방법으로 다시 구동하는 방법은 무엇인가요?
2. S3 백업을 했다면 이미지, 메타데이터 등 관련 데이터를 모두 포함하고 있었나요?

이 글을 찾았지만, 5년 동안 업데이트가 되지 않았습니다:

오늘 더 이상 불필요한 일을 하기 전에, 누군가가 몇 가지 유용한 팁을 줄 수 있는지 확인하고 싶습니다. 누군가에게 가상 맥 한 잔을 사거나, GitHub - shakacode/react_on_rails: Integration of React + Webpack + Rails including server-side rendering of React, enabling a better developer experience and faster client performance. · GitHub 또는 다른 것에 대해 무료 조언을 드릴 수도 있습니다.

누군가 이 작업에 함께 참여(pair)할 시간이 있나요? 저는 그 과정을 문서화하겠습니다.

제가 아는 것은 다음과 같습니다:

  1. 제 discourse 디렉토리는 /var/discourse가 아니라 /var/docker입니다.
  2. S3에 최근 백업이 있습니다.
  3. ["templates/postgres.template.yml"을 "templates/postgres.9.5.template.yml"로 변경](http://Change “templates/postgres.template.yml” TO “templates/postgres.9.5.template.yml”)을 시도했습니다.
  4. 그런 다음 데이터베이스가 호환되지 않는 오류가 발생했습니다:
2020-04-04 20:53:42.164 UTC [1601] FATAL:  database files are incompatible with server
2020-04-04 20:53:42.164 UTC [1601] DETAIL:  The data directory was initialized by PostgreSQL version 9.3, which is not compatible with this version 9.5.21.

관련 로그

Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-148-generic x86_64)
  System load:  0.08               Processes:              137
  Usage of /:   69.3% of 29.40GB   Users logged in:        0
  Memory usage: 77%                IP address for eth0:    192.241.224.165
  Swap usage:   24%                IP address for docker0: 172.17.0.1
187 packages can be updated.
19 updates are security updates.

*** System restart required ***

root@forum:~# cd /var/docker/
root@forum:/var/docker# git pull

Updating 67f34b8..b0c92ba

I, [2020-04-04T20:34:13.023086 #1]  INFO -- : > apt-get update && apt-get install -y postgresql-9.3 postgresql-client-9.3 postgresql-contrib-9.3
E: Unable to locate package postgresql-client-9.3
E: Couldn't find any package by glob 'postgresql-client-9.3'
E: Couldn't find any package by regex 'postgresql-client-9.3'
E: Unable to locate package postgresql-contrib-9.3
E: Couldn't find any package by glob 'postgresql-contrib-9.3'
E: Couldn't find any package by regex 'postgresql-contrib-9.3'
I, [2020-04-04T20:34:17.590352 #1]  INFO -- : Hit:1 http://deb.debian.org/debian buster InRelease

FAILED
--------------------
Pups::ExecError: apt-get update && apt-get install -y postgresql-9.3 postgresql-client-9.3 postgresql-contrib-9.3 failed with return #<Process::Status: pid 18 exit 100>
Location of failure: /pups/lib/pups/exec_command.rb:112:in `spawn'
exec failed with the params "apt-get update && apt-get install -y postgresql-9.3 postgresql-client-9.3 postgresql-contrib-9.3"
159a5389071c2e398c9f426ae0853f11f662503190b648f0390fdb14dd9a057e

WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
5fd4cef4498a5ad12efb2f27373e3950e83b106d8ab7095177862511b10a0366

Total reclaimed space: 1.494GB
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
Deleted Images:
untagged: local_discourse/app:latest

Total reclaimed space: 9.848GB
root@forum:/var/docker# df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            477M     0  477M   0% /dev
tmpfs           100M   11M   89M  11% /run
/dev/vda1        30G  9.6G   19G  35% /
tmpfs           497M     0  497M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           497M     0  497M   0% /sys/fs/cgroup
cgmfs           100K     0  100K   0% /run/cgmanager/fs
tmpfs           100M     0  100M   0% /run/user/0

LOG:  skipping missing configuration file "/shared/postgres_data/postgresql.auto.conf"
2020-04-04 20:53:42.164 UTC [1601] FATAL:  database files are incompatible with server
2020-04-04 20:53:42.164 UTC [1601] DETAIL:  The data directory was initialized by PostgreSQL version 9.3, which is not compatible with this version 9.5.21

FAILED
--------------------
Pups::ExecError: su postgres -c 'psql discourse -c "alter schema public owner to discourse;"' failed with return #<Process::Status: pid 1627 exit 2>
Location of failure: /pups/lib/pups/exec_command.rb:112:in `spawn'
exec failed with the params "su postgres -c 'psql $db_name -c \"alter schema public owner to $db_user;\"'"
e5ea7eeecd58ef02a19254a299700fe2146b447c6eda637a4fe64df373348953

자스틴, 안녕하세요! 다시 만나서 반갑습니다. 디스코스를 아주~ 오랫동안 사용해 주셨으니, 예의 차원에서 @pfaffman 님에게 비용을 지불하고 여기서 도와드리게 해주세요. :hugs:

그분께 연락해서 결제 관련해서 연락해달라고 말씀해 주세요.

안녕하세요, @justin_gordon. 사이트가 이제 복구되었나요? 아직이라면 S3 정보를 알려줄 수 있을까요?

Redirecting… 주소를 통해 비교적 안전하게 전달해 주실 수 있습니다.

긴급한 상황이 아니라면 월요일에 시작해도 괜찮을 것 같네요. 만약 시급하다면 메시지에 그렇게 말씀해 주시면 최대한 빨리 진행하겠습니다.

여기서 이메일 주소를 포함한 개인 메시지(PM)를 보내셔도 됩니다.

@codinghorror, 정말 감사해요! 덕분에 하루가 즐거웠어요!

@pfaffman, 네, 급한 건 아니에요. talksurf.com의 헤더가 그렇게 예쁘게 생긴 방법을 알려달라는 요청을 도우려고 업그레이드를 진행했어요.

talksurf.com이 다시 정상 작동하면, 다른 분들에게 도움이 될 수 있도록 몇 가지 참고사항을 여기에 남길게요.

저스틴, 이제 죄책감이 듭니다 :slightly_frowning_face:
디스코스를 사용하게 된 지 3일밖에 안 됐는데 벌써 이렇게 난리를 치고 있네요!

Hi @Paul-Reed and @codinghorror,

@pfaffman 님 덕분에 다시 정상적으로 돌아올 수 있었습니다… 정말 훌륭하게 도와주셨어요! 사이트가 새것처럼 깔끔해졌고, 필요한 모든 것이 백업에 있었기 때문에 Discourse는 정말 놀라웠습니다!

Discourse의 기술력이 정말 대단하네요!

@pfaffman 님이 다음과 같이 알려주셨습니다:

  1. 2개 컨테이너 설치 방법 (여기서 설명되어 있습니다: described here).
  2. 오래된 설치 환경의 경우, 새 설치에서 백업으로 복원하는 것이 가장 적은 저항의 경로인 것 같았습니다.
  3. 백업 파일 외에 유용한 파일은 실제로 하나뿐인데, 바로 /var/discourse/containers/app.yml 파일입니다. 그리고 저는 7일마다가 아니라 매일 백업을 해야 합니다!

제가 알고 있었지만 기억해야 했었던 중요한 교훈:

10분이면 끝날 거라고 생각해도, 때로는 그렇지 않은 법입니다. @Paul-Reed 님에게 헤더에 대해 좋은 조언을 해드리고 싶어서 이 업데이트를 시작했는데, 오호! 그리고 이건 제가 처음 배우는 것이 아니라, 우리가 종종 잊어버리는 것입니다. 제 전문 분야는 컨설팅 회사 https://www.shakacode.com 과 오픈소스 프로젝트 GitHub - shakacode/react_on_rails: Integration of React + Webpack + Rails including server-side rendering of React, enabling a better developer experience and faster client performance. · GitHub 를 통해 React와 Ruby on Rails로 만든 사이트의 성능을 향상시키는 것입니다.

Docker 기반의 DevOps는 할 수 있지만, 제가 달성하려는 목표에서 많은 시간을 빼앗아 갑니다!

그래서 이런 모든 상황 때문에, 제 홈페이지 https://forum.shakacode.com/ 의 일부 업데이트를 @pfaffman 님이 도와주도록 고려하고 있습니다.

모든 도움에 대해 @codinghorror 님과 @pfaffman 님께 진심으로 감사드립니다!


관심 있으신 분들을 위해, 이 오래된 Discourse 사이트 업데이트를 유발한 커스텀 헤더 수정 방법을 공유합니다.

커스텀 헤더

우선, 이 문제를 직접 해결하기보다 (yak shaving) https://support.literatecomputing.com/ 의 @pfaffman 님에게 연락하는 것을 권장합니다. 사실, 이 영역에서 더 멋진 것을 만들고 싶다면 @pfaffman 님이 도와주실 것입니다!

하지만, 직접 해보고 싶은 분들을 위해, 유용한 부분들은 모두 여기에 있다고 생각합니다:

제가 아는 한, 나머지는 모두 비어 있습니다.

CSS

#top-navbar-container {
    background: black;
    height: 25px;
}

#top-navbar-links .spacer {
    display: inline-block;
    margin-left: 12px;
    margin-right: 12px;
}


#top-navbar-links, #top-navbar-links a:visited, #top-navbar-links a {
    color: white;
}

header.d-header {
    background: black;
    background-image: url(/uploads/default/63/873a733a013f8208.jpg);
    padding-top: 0;
    box-shadow: none;
    top: 25px;
    height: 63px;
}

.ember-view > #main-outlet {
    padding-top: 97px;
}

header > .container {
    background-image: url(/uploads/default/63/873a733a013f8208.jpg);
    max-width: 1200px;
    padding-right: 50px;
}

header.d-header > .container > .contents {
    margin: 0;
}

header.d-header #site-logo, header.d-header .logo-small {
    max-height: 53px;
}

body #main .extra-info > a.star {
    color: #A5ACDD;
}

header .extra-info-wrapper h1 {
    margin-top: 18px;    
}

@media screen and (min-width: 1140px)  {
    header .extra-info-wrapper {
        max-width: 780px;
    }
}

@media screen and (min-width: 967px) and (max-width: 1139px)  {
    header .extra-info-wrapper {
        max-width: 647px;
    }
}

#user-notifications, #search-button, #site-map  {
    color: #AAA; 
}

@media screen and (max-width: 966px) {
    .extra-info-wrapper {
        max-width: 620px;
    }
}

header .current-username .username > a {
    color: white;
}

header.d-header .icons .icon:hover {
    background-color: #000000;
}

HEADER

<div id="top-navbar-container" class="d-header">
<div id="top-navbar" class="wrap">
<span id="top-navbar-links" style="height:20px;">
  <a href="http://forum.talksurf.com">Home</a><span class="spacer"> | </span>
  <a href="http://forum.talksurf.com/category/surfing/doug-silva">Doug Silva</a><span class="spacer"> | </span>
  <a href="http://forum.talksurf.com/category/surfing">Surfing</a><span class="spacer"> | </span>
  <a href="http://forum.talksurf.com/category/kitesurfing">Kitesurfing</a><span class="spacer"> | </span>
  <a href="http://forum.talksurf.com/category/standup-paddling">SUP</a><span class="spacer"> | </span>
  <a href="http://forum.talksurf.com/category/windsurfing">Windsurfing</a><span class="spacer"> | </span>
  <a href="http://forum.talksurf.com/t/pros-instructors-equipment-travel/264">Pros</a><span class="spacer"> | </span>
  <a href="http://forum.talksurf.com/t/what-is-talksurf-com/265">About</a><span class="spacer"> | </span>
  <a href="http://forum.talksurf.com/faq">FAQ</a>
</span>
</div>
</div>

네, 여기서 그걸 봤습니다만, 코드에서 talksurf 이미지가 어디에 포함되는지 모르겠습니다.

배경 이미지의 원천은 확인할 수 있지만, 배경 이미지 위에 떠 있는 왼쪽의 ‘talksurf’ 이미지는 확인이 안 됩니다.

설정 > 브랜딩 > 로고에 'talksurf’를 이미지로 추가하면, Discourse가 원래 높이 120px를 31px로 축소하기 때문에 이미지가 훨씬 작아집니다. talksurf 이미지는 31px 높이보다 훨씬 큽니다.

@Paul-Reed @pfaffman을 고용해서 도움을 요청해 보면 어떨까요? 저는 이걸 설정해 본 적이 없어서 전혀 모르겠습니다.

CSS를 조금만 추가하면 헤더를 더 높일 수 있습니다. 도와드릴 수 있지만, 여기서는 약간 오프토픽이라 #support에 새 주제를 만들어 주시는 것을 권장합니다.

며칠 전에 시작한 기존 토픽이 있습니다 - Image not filling header container
거기에서 계속 진행해도 될까요?