플러그인 설치 후 사이트가 손상되어 재구성을 실행할 수 없습니다

포맷 플러그인을 설치하려고 했는데, 코드를 잘못된 위치에 넣어서 다시 빌드하고 사이트를 로드했을 때 플러그인이 초기화되지 않았습니다. 그래서 실수를 알아차리고 코드를 제거했는데, 특정 라인에서 오류가 발생한다는 메시지가 떴습니다. 해당 라인에서 오류를 찾아 yamllint로 확인하고, 코드를 일치시킨 뒤 플러그인을 제거했는데… 지금은 빌드가 작동합니다. 하지만 지속적인 오류가 계속 발생하며, 사이트의 첫 페이지는 로드할 수 있지만 주제나 그 외 어떤 페이지도 로드할 수 없습니다.

아래는 빌드와 doctor 실행 결과입니다.

요약
실패(FAILED)
--------------------
NoMethodError: undefined method `each' for nil:NilClass
실패 위치: /pups/lib/pups/config.rb:99:in `run_commands'
dfd33a9a3be65ddb9a1fd19c19e5034a44c39f46e330ccdf0533f4f66d7d0005
** 부트스트랩 실패(FAILED TO BOOTSTRAP) ** 위로 스크롤하여 이전 오류 메시지를 확인하십시오. 오류가 하나 이상 있을 수 있습니다.
./discourse-doctor가 문제를 진단하는 데 도움이 될 수 있습니다.
root:/var/discourse# ./discourse-doctor
DISCOURSE DOCTOR Thu Jul 16 07:53:05 UTC 2020
OS: Linux itsbx 4.15.0-99-generic #100-Ubuntu SMP Wed Apr 22 20:32:56 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux



==================== 심각한 문제(SERIOUS PROBLEM)!!!! ====================
앱이 실행되지 않고 있습니다!
재빌드 시도 중
==================== 재빌드 로그(REBUILD LOG) ====================
launcher가 최신 상태인지 확인 중
origin 가져오는 중
Launcher는 최신 상태입니다
이전 컨테이너 중지
+ /usr/bin/docker stop -t 60 app
app
cd /pups && git pull && /pups/bin/pups --stdin
Already up to date.
I, [2020-07-16T07:53:23.985444 #1]  INFO -- : Loading --stdin


실패(FAILED)
--------------------
NoMethodError: undefined method `each' for nil:NilClass
실패 위치: /pups/lib/pups/config.rb:99:in `run_commands'
2386f66f76d9c9ffbbcd02bfad9e0530683714d433bff8d70976cae6c4b8fc86
** 부트스트랩 실패(FAILED TO BOOTSTRAP) ** 위로 스크롤하여 이전 오류 메시지를 확인하십시오. 오류가 하나 이상 있을 수 있습니다.
./discourse-doctor가 문제를 진단하는 데 도움이 될 수 있습니다.
==================== 재빌드 로그 끝(END REBUILD LOG) ====================
앱 재빌드 실패.

도메인 이름 확인 중 . . .

yoursite로의 연결에 성공했습니다.
비표준 플러그인을 제거하고 재빌드하는 것이 좋습니다.
기존 컨테이너 재시작 시도 중 . . .

기존 컨테이너 시작 중
+ /usr/bin/docker start app
Error response from daemon: driver failed programming external connectivity on endpoint app (39c7d5a80e10058bc952825fccd073af0f2ff12857895aa1046a6615d879a5a0): Error starting userland proxy: listen tcp 0.0.0.0:443: bind: address already in use
Error: failed to start containers: app
컨테이너 재시작 실패.


==================== 플러그인(PLUGINS) ====================
          - git clone github.com/discourse/docker_manager.git

비공식 플러그인 감지되지 않음.

공식 목록은 thub.com/discourse/discourse/blob/master/lib/plugin/metadata.rb를 참조하십시오.

========================================
**myhost의 Discourse 버전: NOT FOUND**
**localhost의 Discourse 버전: NOT FOUND**


==================== 메모리 정보(MEMORY INFORMATION) ====================
RAM (MB): 2041

              total        used        free      shared  buff/cache   available
Mem:           1993         144        1237           0         611        1677
Swap:          2047          76        1971

==================== 디스크 공간 확인(DISK SPACE CHECK) ====================
---------- OS 디스크 공간 ----------
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        49G   11G   38G  22% /

==================== 디스크 정보(DISK INFORMATION) ====================
Disk /dev/vda: 50 GiB, 53687091200 bytes, 104857600 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 3980448C-AF15-4833-A022-C759F0D2D80A

Device      Start       End   Sectors  Size Type
/dev/vda1  227328 104857566 104630239 49.9G Linux filesystem
/dev/vda14   2048     10239      8192    4M BIOS boot
/dev/vda15  10240    227327    217088  106M Microsoft basic data

Partition table entries are not in disk order.

==================== 디스크 정보 끝(END DISK INFORMATION) ====================

지금 사이트가 완전히 망가져서 어떻게 해야 할지 전혀 모르겠습니다. 게시글당 링크를 3개만 사용할 수 있어서 링크를 제거했는데, 원래는 포함되어 있었습니다. 제가 완전히 잘못된 위치에 넣었던 플러그인을 제거하기 전까지는 재빌드가 정상적으로 작동했는데, 제거한 직후 모든 것이 멈췄습니다. 몇 줄이 엉망이 되었지만 수정이 완료되었음을 확인했습니다. 정말 막막합니다. 방금 setup을 다시 실행하여 모든 설정을 확인했는데, 설정은 정상적으로 진행되었지만 다시 재빌드에서 실패했습니다…

자, 몇 시간 동안 재실행하고 수정해 보다가 결국

./launcher start app을 실행해 봤는데 정상적으로 실행되고 있고, 플러그인도 설치되어 있더라고요(아까 제거했다고 생각했는데?). 어쨌든. 하지만 정확히 어떤 원인이었고, 무엇이 수정된 건지 모르다 보니 이제 리빌드나 추가 설치를 시도하는 게 두렵습니다. 그래도 어떤 통찰이나 조언이 주신다면 감사하겠습니다.

설명만으로는 어떤 문제가 있었을지 파악하기 어렵지만, 마지막 재구성이 성공했다면 다음 재구성도 성공할 가능성이 매우 높습니다.

아마도 ./launcher start app 명령어로 오래된 이미지를 시작했을 것 같습니다.

@Kartoon 재빌드를 시도해 볼 수 있습니다. 실패하더라도 같은 명령어로 마지막에 정상적으로 작동했던 이미지로 되돌릴 수 있습니다.

미안합니다. 긴급한 일이 있어서 이 주제를 확인하지 못했습니다.

재구축(rebuild)은 작동하지 않았으며, 오늘 다시 시도해 보았지만 역시 실패했습니다. “./launcher start app” 명령을 실행한 후에는 사이트가 정상적으로 작동하지만, 재구축을 시도할 때마다 실패하고 discourse doctor에서도 오류가 발생합니다. 도움이 된다면 로그를 게시할 수 있습니다. 하지만 분명히 여전히 문제가 있으며, 이로 인해 추후에 더 큰 문제가 발생할까 걱정됩니다.

yml 파일에 포맷 오류가 있는 것 같습니다.

이러한 오류를 찾아내고 인식하는 것은 어려울 수 있습니다. 이를 검사해 주는 도구가 있습니다.

보통 플러그인을 추가할 때는 기존 플러그인 줄을 복사/붙여넣기한 후 github URL만 수정합니다. 이렇게 하면 무언가를 깨뜨릴 가능성을 최소화할 수 있습니다.

제가 그렇게 생각했고, 처음에는 제 생각이 틀렸지만, 원래 플러그인 텍스트를 잘못된 위치에 배치하면서 발생한 오류를 수정하기 위해 http://www.yamllint.com/ 사이트를 참고했습니다. 그 사이트에서는 완전히 문제없다고 반환되었고, 저는 이 과정에서 여러 번(특정 부분과 전체를 모두 포함하여) 확인해 보았으며, 매번 올바르게 작성되었다고 알려주었습니다. 만약 그 사이트가 어떤 이유로든 부정확하다면, 저는 이 분야에 대해 그 정도 지식이 있지 않으므로 가능성은 배제할 수 없습니다.

재빌드(rebuild)를 시도했을 때 나타나는 결과이며, 아래는 5분 전에 discourse doctor를 실행했을 때의 출력입니다. 개인 정보는 제거했지만, 실제 로그에는 모두 정확히 기록되어 있습니다.

rebuild app

Ensuring launcher is up to date
Fetching origin
Launcher is up-to-date
Stopping old container

  • /usr/bin/docker stop -t 60 app
    app
    cd /pups && git pull && /pups/bin/pups --stdin
    Already up to date.
    I, [2020-07-23T22:58:14.812604 #1] INFO – : Loading --stdin

FAILED

NoMethodError: undefined method each' for nil:NilClass Location of failure: /pups/lib/pups/config.rb:99:in run_commands’
1a575aa2a169fcb4a9bbb0874c55d3fd01ee1e7368ff58e2099c9602f6c32109
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.

discourse-doctor

DISCOURSE DOCTOR Thu Jul 23 22:59:22 UTC 2020
OS: Linux itsbx 4.15.0-111-generic #112-Ubuntu SMP Thu Jul 9 20:32:34 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

Found containers/app.yml

==================== YML SETTINGS ====================
DISCOURSE_HOSTNAME=good
SMTP_ADDRESS=good
DEVELOPER_EMAILS=good
SMTP_PASSWORD=good
SMTP_PORT=587
SMTP_USER_NAME=good
LETSENCRYPT_ACCOUNT_EMAIL=good

==================== DOCKER INFO ====================
DOCKER VERSION: Docker version 19.03.8, build afacb8b7f0

DOCKER PROCESSES (docker ps -a)

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
343a1aa3c05c local_discourse/app “/sbin/boot” 7 days ago Exited (5) About a minute ago app

==================== SERIOUS PROBLEM!!! ====================
app not running!
Attempting to rebuild
==================== REBUILD LOG ====================
Ensuring launcher is up to date
Fetching origin
Launcher is up-to-date
Stopping old container

  • /usr/bin/docker stop -t 60 app
    app
    cd /pups && git pull && /pups/bin/pups --stdin
    Already up to date.
    I, [2020-07-23T22:59:41.894064 #1] INFO – : Loading --stdin

FAILED

NoMethodError: undefined method each' for nil:NilClass Location of failure: /pups/lib/pups/config.rb:99:in run_commands’
439734a2cd69755d8351bbdadd9756cb573577d7f1b306aedaafa1c7d4bc29cf
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.
==================== END REBUILD LOG ====================
Failed to rebuild app.

Checking your domain name . . .

Connection to website succeeded.
You should probably remove any non-standard plugins and rebuild.
Attempting to restart existing container. . .

starting up existing container

  • /usr/bin/docker start app
    Error response from daemon: driver failed programming external connectivity on endpoint app (100c15324a128a2b007d8b89e29fe0f455585fd8c7d99855ef87bb4f17892b4b): Error starting userland proxy: listen tcp 0.0.0.0:443: bind: address already in use
    Error: failed to start containers: app
    Failed to restart the container.

==================== PLUGINS ====================
- git clone GitHub - discourse/docker_manager: Plugin for use with discourse docker image · GitHub

No non-official plugins detected.

See discourse/lib/plugin/metadata.rb at main · discourse/discourse · GitHub for the official list.

========================================
Discourse version at website: NOT FOUND
Discourse version at localhost: NOT FOUND

==================== MEMORY INFORMATION ====================
RAM (MB): 2041

          total        used        free      shared  buff/cache   available

Mem: 1993 140 1310 0 542 1695
Swap: 2047 72 1975

==================== DISK SPACE CHECK ====================
---------- OS Disk Space ----------
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 49G 13G 37G 26% /

==================== DISK INFORMATION ====================
Disk /dev/vda: 50 GiB, 53687091200 bytes, 104857600 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 3980448C-AF15-4833-A022-C759F0D2D80A

Device Start End Sectors Size Type
/dev/vda1 227328 104857566 104630239 49.9G Linux filesystem
/dev/vda14 2048 10239 8192 4M BIOS boot
/dev/vda15 10240 227327 217088 106M Microsoft basic data

Partition table entries are not in disk order.

==================== END DISK INFORMATION ====================

즉각적으로 눈에 띄는 점은 "심각한 문제, app이 실행되지 않음(serious problem, app not running)"이라고 표시되어 있다는 것입니다. 또한 "웹사이트 및 로컬호스트의 discourse 버전을 찾을 수 없음(discourse version at website and localhost not found)"이라고도 나와 있습니다. 제 (무지한) 추측으로는 이 메시지들이 무슨 의미든, 이것이 바로 문제의 원인일 것입니다.

또한 방금 재빌드(rebuild)를 실행했을 때 사이트가 크래시되었고, 이를 다시 수정하기 위해 "start app"을 실행했습니다.

음. 글쎄, 포맷 문제는 아닌 것 같은데, 뭐가 문제인지 알 수가 없네.

app.yml 파일 때문에 걱정이라면, 깨끗한 app.yml 파일로 새로 시작하는 것이 가장 좋습니다.

rm /var/discourse/containers/app.yml
cd /var/discourse
cp samples/standalone.yml containers/app.yml
nano containers/app.yml

모든 것이 확인된 후에 다시 빌드할 수 있습니다.

완벽하게 작동했습니다. 분명 yml 파일이 정상이라고 보고했지만… 실제로는 그렇지 않았습니다.

그 후로 이메일이 발송되지 않는 일시적인 문제가 발생했는데, 새 yml 파일을 다시 확인해 보니 이메일 주소를 잘못 입력한 것을 알게 되었습니다. (mailgun에서 @mg.로 설정해 둔 걸 항상 잊어버리거든요..) 그래서 5분 안에 수정했습니다.

정말 감사합니다. 이제 언제든 파괴가 일어날지도 모른다는 두려움 없이 지낼 수 있게 되었습니다.