개발 목적으로 처음부터 새로운 Discourse 인스턴스를 만들고 있는데, 이 부트스트랩 오류가 다시 발생하고 있습니다:
FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 1002 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
exec failed with the params {"cd"=>"$home", "tag"=>"migrate", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
bootstrap failed with exit code 1
컨테이너 설정은 webonly와 dataonly(redis)를 위한 두 개의 컨테이너와 외부 PostgreSQL 데이터베이스로 구성되었습니다. maxmind 설정을 주석 처리해도 아무런 변화가 없습니다.
여기서 제가 할 수 있는 일이 있을까요?
Ed_S
(Ed S)
4월 18, 2025, 8:00오후
2
가장 유력한 추측은 메모리가 부족하다는 것입니다. 이 경우 스왑을 추가하거나 더 큰 RAM을 가진 인스턴스로 전환해 보세요. free -h 명령을 실행해 보세요.
음, 아니요, 우리는 4GB의 RAM과 충분한 하드디스크 공간(2 x 32GB)을 가지고 있으며, 빌드가 문제없이 실행되는 다른 도커 머신과 동일한 환경을 사용하고 있습니다.
메모리 상태:
root@docker3a:/var/discourse# free -h
전체 사용량 가용량 공유 버퍼/캐시 사용 가능
메모리: 3.8Gi 819Mi 1.4Gi 22Mi 1.9Gi 3.0Gi
스왑: 974Mi 52Mi 922Mi
Ed_S
(Ed S)
4월 19, 2025, 2:40오후
4
dmesg 출력에서 최근 발생한 관련 오류가 있나요?
Falco
(Falco)
4월 19, 2025, 2:42오후
6
좀 의외인 추측이네요. Discourse에서는 OoM(메모리 부족)으로 인해 마이그레이션 오류가 발생하는 경우를 일반적으로 보지 못합니다.
x86_64 아키텍처 감지됨.
런처가 최신 상태인지 확인 중
런처가 최신 상태입니다
2.0.20250226-0128: discourse/base에서 가져오는 중
Digest: sha256:6f18aa2cd22bba0deb91d69194e577d4f96130ad555ae8ec646a8792cbfe37db
Status: discourse/base:2.0.20250226-0128 이미지가 최신 상태입니다
docker.io/discourse/base:2.0.20250226-0128
/usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups.rb
/usr/local/bin/pups --stdin
18:C 19 Apr 2025 16:38:41.670 # oO0OoO0OoO0Oo Redis 시작 중 oO0OoO0OoO0Oo
18:C 19 Apr 2025 16:38:41.670 # Redis version=7.0.15, bits=64, commit=00000000, modified=0, pid=18, just started
18:C 19 Apr 2025 16:38:41.670 # Configuration loaded
18:M 19 Apr 2025 16:38:41.670 * monotonic clock: POSIX clock_gettime
18:M 19 Apr 2025 16:38:41.670 * Running mode=standalone, port=6379.
18:M 19 Apr 2025 16:38:41.670 # Server initialized
18:M 19 Apr 2025 16:38:41.671 * Loading RDB produced by version 7.0.15
18:M 19 Apr 2025 16:38:41.671 * RDB age 72606 seconds
18:M 19 Apr 2025 16:38:41.671 * RDB memory usage when created 0.82 Mb
18:M 19 Apr 2025 16:38:41.671 * Done loading RDB, keys loaded: 0, keys expired: 0.
18:M 19 Apr 2025 16:38:41.671 * DB loaded from disk: 0.000 seconds
18:M 19 Apr 2025 16:38:41.671 * Ready to accept connections
999:C 19 Apr 2025 16:39:59.006 # oO0OoO0OoO0Oo Redis 시작 중 oO0OoO0OoO0Oo
999:C 19 Apr 2025 16:39:59.006 # Redis version=7.0.15, bits=64, commit=00000000, modified=0, pid=999, just started
999:C 19 Apr 2025 16:39:59.006 # Configuration loaded
999:M 19 Apr 2025 16:39:59.006 * monotonic clock: POSIX clock_gettime
999:M 19 Apr 2025 16:39:59.006 # Warning: Could not create server TCP listening socket *:6379: bind: Address already in use
999:M 19 Apr 2025 16:39:59.006 # Failed listening on port 6379 (TCP), aborting.
18:signal-handler (1745080813) Received SIGTERM scheduling shutdown...
18:M 19 Apr 2025 16:40:13.541 # User requested shutdown...
18:M 19 Apr 2025 16:40:13.541 * Saving the final RDB snapshot before exiting.
18:M 19 Apr 2025 16:40:13.549 * DB saved on disk
18:M 19 Apr 2025 16:40:13.549 # Redis is now ready to exit, bye bye...
FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 1002 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
exec failed with the params {"cd"=>"$home", "tag"=>"migrate", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
bootstrap failed with exit code 1
** 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.
48b8aa6c912bbabc42d6b9373808088f5aa9079de1e1f7360fc858891a48556b
Falco
(Falco)
4월 19, 2025, 4:54오후
8
이것이 web_only 컨테이너라면 왜 여기에 redis가 있나요?
yml 컨테이너 정의를 공유해 주실 수 있나요? 그리고 왜 두 개의 컨테이너로 설치하나요?
팔코, 안녕
네, 맞아요. 내가 멍청했네요
수정할게요 …
좋아요, web_only와 redis의 분리를 수정했습니다. 현재 오류 메시지는 다음과 같습니다
FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 981 e
xit 1>
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
exec failed with the params {"cd"=>"$home", "tag"=>"migrate", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migra
te'"]}
bootstrap failed with exit code 1
** 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.
801049b69a89d38b1ae5c299d356fc5f8dc6a8f518b1260c2dde05e0b6081556
하지만 제 쪽에서 오해나 지식 부족으로 인한 문제일 수도 있습니다:
데이터베이스는 다른 lxc 컨테이너에 있는 postgresql 데이터베이스를 외부로 사용해야 합니다. 데이터베이스 사용자와 데이터베이스는 존재하지만, web_only의 첫 번째 bootstrap 전에 데이터베이스는 비어 있습니다. 스크립트가 첫 빌드 시 원격 시스템에서 데이터베이스를 스스로 생성합니까? 아니면 먼저 데이터베이스 컨테이너를 생성한 다음, 그 기본 스키마와 데이터를 외부 postgresql 데몬으로 수동으로 내보내야 하는 것입니까?
전체 구성 시각화
Ed_S
(Ed S)
4월 20, 2025, 8:11오전
11
도형을 올려주셔서 감사합니다. 꽤 정교한 설정이네요. 그럴 만한 이유가 있고 해당 영역에 대해 잘 알고 계실 때 그렇게 하시는 거죠.
아직도 아래 내용이 표시된다면, 그것이 문제의 원인을 가리키는 신호일 것입니다. Redis가 리스닝해야 할 포트를 열 수 없는 상황입니다.
Thomas_Rother:
999:C 19 Apr 2025 16:39:59.006 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
999:C 19 Apr 2025 16:39:59.006 # Redis version=7.0.15, bits=64, commit=00000000, modified=0, pid=999, just started
999:C 19 Apr 2025 16:39:59.006 # Configuration loaded
999:M 19 Apr 2025 16:39:59.006 * monotonic clock: POSIX clock_gettime
999:M 19 Apr 2025 16:39:59.006 # Warning: Could not create server TCP listening socket *:6379: bind: Address already in use
999:M 19 Apr 2025 16:39:59.006 # Failed listening on port 6379 (TCP), aborting.
18:signal-handler (1745080813) Received SIGTERM scheduling shutdown...
따라서 질문은 이 컨테이너에서 Redis가 그렇게 해야 하는지, 그리고 그렇다면 머신의 다른 어디에 또 다른 Redis가 실행 중인지에 관한 것입니다. lsof 도구가 여기서 유용할 수 있습니다.
@Ed_S 님, 안녕하세요.
누락된 포트에 대한 힌트 주셔서 감사합니다. 일단 Falco에게 외부 Postgres 데이터베이스를 사용한 Discourse의 일반적인 설정에 대해 제가 가진 질문에 대한 답변을 기다리고 싶습니다.
네, 표준 설정(앱 컨테이너 하나만 사용하는 경우)과 비교하면 설정이 다소 복잡한 편입니다. 저는 hetzner.de에서 Proxmox(https://p roxmox.com )를 가상화 환경으로 사용하는 전용 루트 머신에서 모든 것을 실행하고 있습니다.
pfaffman
(Jay Pfaffman)
4월 21, 2025, 6:48오후
13
이전 실패한 부분을 포함한 전체 로그를 공유해 주셔야 합니다. 오류를 공유하지 않으셨기 때문에 추측일 뿐이지만, AI 플러그인을 사용 중이고 데이터베이스에 필요한 추가 기능이 없는 것 같습니다.
아니요, AI 플러그인 없이 설치된 것입니다. 다만 이 인스턴스는 향후 AI 기능 실험을 위한 연습 공간으로 사용할 예정입니다.
./launcher bootstrap web_only >> web_only_bootstrap.log
그리고 redis 및 web_only에 대한 yml 파일이 첨부되어 있습니다. 비밀번호는 제거했습니다.
forum2_build.tar.gz (3.3 KB)
RGJ
(Richard - Communiteq)
4월 21, 2025, 10:18오후
15
Longshot:
links:
- link:
name: redis
alias: data
왜 alias: redis가 아닌 걸까요?
RGJ:
왜 alias: redis가 아닌가요?
/samples/web_only.yml 파일에는 다음과 같은 내용이 있습니다.
# 컨테이너를 연결하려면 'links' 키를 사용하세요. 즉, Docker --link 플래그를 사용하는 것과 같습니다.
links:
- link:
name: data
alias: data
제 경우 data 컨테이너는 redis 컨테이너입니다.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
NAMES
a27999b28a90 local_discourse/redis "/sbin/boot" 2 days ago Up 20 hours
따라서 name: redis이고 alias: data입니다.
Docker 문서에 따르면 이것은 레거시 기능이지만 여전히 사용 가능합니다. 참고: Legacy container links | Docker Docs
이제 더 나은 접근 방식은 먼저 표준 “올인원” 설정(app.yml)을 만드는 것이라고 생각합니다. 그리고 컨테이너의 초기 스키마와 데이터를 외부 postgres 머신으로 SQL 덤프하는 것입니다. @Falco 어떻게 생각하시나요?
pfaffman
(Jay Pfaffman)
4월 22, 2025, 4:35오후
17
하지만 로그가 단 28줄에 불과하므로 대부분의 내용이 누락되어 있습니다.
제 새로운 추측은 데이터베이스에 아예 연결을 시도하지 않는다는 것입니다. 다만, Redis에 연결하지 못하고 있을 수도 있습니다.
다음과 같이 시도해 보세요.
./launcher bootstrap web_only >> web_only_bootstrap.log 2>&1
Falco
(Falco)
4월 22, 2025, 4:52오후
18
설치 프로그램은 유효한 자격 증명을 제공하고 데이터베이스에 접근할 수 있는 한 필요한 모든 것을 자동으로 생성합니다. 이 내용은 Discourse를 별도 PostgreSQL 서버로 구성하기 문서에서 확인할 수 있습니다.
pfaffman
(Jay Pfaffman)
4월 22, 2025, 5:01오후
20
이것은 새로운 설치인지, 아니면 새 서버로 이전 중인 것인가요?
로그 파일을 열어 "migrate"를 검색하여 마이그레이션 오류를 찾아보려 합니다.
오류는 다음과 같습니다:
PG::DuplicateObject: ERROR: type "hotlinked_media_status" already exists
마이그레이션이 수행된 후 커밋이 되돌려진 것과 관련된 문제일 수 있습니다. 이는 관련이 있지만 해결책은 아닙니다: Restore fails with "hotlinked_media_status" already exists . 대신 이 링크가 도움이 될 수 있습니다: Upgrading 2.7 to 3.1 failing: "hotlinked_media_status" already exists - #5 by merefield
또한, 실제로는 큰 문제가 되지 않지만 다음 사항을 수정해야 합니다:
Plugin name is 'discourse-topic-voting', but plugin directory is named 'discourse-voting'
다시 시도할 때는 파일을 tar로 묶지 말고 파일 링크만 제공해 주세요.