Install Discourse for development using Docker

안녕하세요,

d/boot_dev --init를 실행하려고 하면 다음과 같은 오류가 발생합니다.

Errno::EACCES: Permission denied @ dir_s_mkdir - tmp
/src/config/boot.rb:23:in `<top (required)>'
/src/config/application.rb:16:in `require'
/src/config/application.rb:16:in `<top (required)>'
/src/Rakefile:7:in `require'
/src/Rakefile:7:in `<top (required)>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
(See full trace by running task with --trace)

이를 해결하는 방법에 대한 아이디어가 있을까요? 여기저기 검색해 보았지만 해결책을 찾지 못했습니다.

수정: chmod -R 777 ~/discourse를 실행하여 문제를 해결했지만, 이제 다음과 같은 오류가 발생합니다:

gifsicle worker: gifsicle not found; please provide proper binary or disable this worker (--no-gifsicle argument or :gifsicle => false through options)

2개의 좋아요

그것은 문제가 아닙니다. 우리는 최근 사용을 제거했기 때문에 경고는 걱정할 필요가 없습니다. 구버전의 Discourse 코드를 사용 중이신가요?

4개의 좋아요

아니요, 최근 릴리스 버전이었습니다. 하지만 이 DigitalOcean 튜토리얼을 따라 했더니 지금은 완벽하게 작동하고 있습니다.

2개의 좋아요

이러한 설정에서 플러그인을 어떻게 사용해야 하나요?
Install plugins on a self-hosted site 링크를 따라보고 있는데, /var/discourse/containers/app.yml 파일에 대한 언급이 있습니다. 하지만 제 discourse 디렉터리에는 해당 파일이 없습니다.

Discourse 개발 환경을 구축해서 패치를 테스트할 수는 있게 됐는데, 이 패치를 프로덕션 인스턴스에 어떻게 적용해야 할까요? base를 빌드한 다음 ./launcher rebuild app --run-image discourse/base:build를 실행해 봤지만, 실행 중인 Discourse 인스턴스가 만들어지지 않습니다.

보통은 syslog 그룹이 없다는 오류가 발생했는데, 해당 부분을 주석 처리하고 나서도 여전히 실행 중인 사이트가 생성되지 않았습니다. 그리고 docker 로그에도 특이한 내용은 없습니다.

이런 종류의 작업은 실제로 문서화가 잘 되어 있지 않지만, “diff” 파일을 생성한 뒤 리포지토리를 클론한 후 훅에서 git으로 해당 diff를 적용하면 됩니다. app.yml은 훅을 지원합니다.

셀프 호스팅된 단일 컨테이너 환경에 대한 간단한 해결책은 코드를 해당 위치에 직접 수정한 후 sv restart unicorn를 실행하는 것입니다.

2개의 좋아요

이 문제가 여기서 질문해도 되는지 잘 모르겠지만, Apple M1 컴퓨터에서 Docker를 사용하여 Discourse 설치를 완료하지 못하고 있습니다.

d/boot_dev --init를 실행하면 모든 의존성이 눈에 보이는 문제 없이 설치되지만, Migrating database 단계에 도달하면 해당 단계에 머물러 있으며 코어 하나를 100% 사용하면서 진행이 되지 않는 것 같습니다.

Docker 컨테이너에 로그인해 보니 bundle migrate 작업이 100%로 실행 중이지만 postgresql 프로세스에는 눈에 띄는 활동이 없습니다.

어떤 아이디어라도 큰 도움이 될 것입니다!

1개의 좋아요

가상화 지원이 정말로 아주 새로운 기능인 것 같습니다. 그래서 조금 모험적이라는 것에 놀랍지 않아요.

@pmusaraj / @david m1에서 docker-dev를 실행하는 데 성공하셨나요?

5개의 좋아요

아직 시도해 보지 않았습니다.

2개의 좋아요

M1 Mac에서 docker를 사용해 Discourse를 실행할 수 있는 분이 계시다면 알려주세요. 그 사이 저는 다른 가이드를 따라 시도해 보겠습니다. 감사합니다!

1개의 좋아요

오늘 잠시 시도해 보았지만, 당신과 동일한 단계에서 막혔고, 다음과 같은 오류가 발생했습니다:

Invalid gemspec in [/usr/local/lib/ruby/gems/2.7.0/specifications/default/zlib-1.1.0.gemspec]: Malformed version number string specification_version
bundler: failed to load command: rake (/usr/local/bin/rake)

네, 그렇게 해 주세요. 저를 포함해 여러 팀 구성원이 매일 M1에서 Discourse를 사용하고 있으므로, 꽤 잘 작동합니다!

문제가 발생하면 알려 주세요.

2개의 좋아요

시간 내어 도와주셔서 정말 감사합니다! 적어도 이 문제로 고생하는 사람이 저만은 아니네요.

안녕하세요, 여기에서 Ember-CLI에 대한 설명을 추가하고, docker 컨테이너에 진입하지 않고도 아래 명령어를 실행할 수 있는 단축키를 만들어야 한다고 생각합니다.

또한, 컨테이너에서 위의 명령어를 실행해도 작동하지 않습니다. 컨테이너가 4200 포트를 노출하지 않은 것 같습니다.
Screenshot from 2021-05-02 15-48-51

d/boot_dev 파일을 편집하여 4200 포트를 수동으로 노출했습니다:

컨테이너를 재시작한 후 localhost:4200에 접근하니 다음과 같은 결과가 나타났습니다:

discourse@discourse:/tmp$ cat error.dump.cab4cc444229d44fc0fce2deb8695880.log 
=================================================================================

ENV Summary:

  TIME: Sun May 02 2021 08:01:12 GMT+0000 (Coordinated Universal Time)
  TITLE: ember
  ARGV:
  - /usr/bin/node
  - /src/app/assets/javascripts/node_modules/.bin/ember
  - server
  - --proxy
  - http://localhost:3000
  EXEC_PATH: /usr/bin/node
  TMPDIR: /tmp
  SHELL: /bin/bash
  PATH:
  - /tmp/yarn--1619942449179-0.1910991449592403
  - /src/app/assets/javascripts/discourse/node_modules/.bin
  - /home/discourse/.config/yarn/link/node_modules/.bin
  - /src/app/assets/javascripts/node_modules/.bin
  - /home/discourse/.yarn/bin
  - /usr/libexec/lib/node_modules/npm/bin/node-gyp-bin
  - /usr/lib/node_modules/npm/bin/node-gyp-bin
  - /usr/bin/node_modules/npm/bin/node-gyp-bin
  - /usr/local/sbin
  - /usr/local/bin
  - /usr/sbin
  - /usr/bin
  - /sbin
  - /bin
  PLATFORM: linux x64
  FREEMEM: 8603062272
  TOTALMEM: 41962496000
  UPTIME: 612639
  LOADAVG: 3.32177734375,2.19580078125,1.47900390625
  CPUS:
  - Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz - 3301
  - Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz - 3300
  - Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz - 3300
  - Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz - 3301
  ENDIANNESS: LE
  VERSIONS:
  - ares: 1.15.0
  - brotli: 1.0.7
  - cldr: 35.1
  - http_parser: 2.9.3
  - icu: 64.2
  - modules: 64
  - napi: 7
  - nghttp2: 1.41.0
  - node: 10.23.0
  - openssl: 1.1.1g
  - tz: 2019c
  - unicode: 12.1
  - uv: 1.34.2
  - v8: 6.8.275.32-node.59
  - zlib: 1.2.11

ERROR Summary:

  - broccoliBuilderErrorStack: [undefined]
  - code: ECONNREFUSED
  - codeFrame: [undefined]
  - errorMessage: connect ECONNREFUSED 127.0.0.1:3000
  - errorType: [undefined]
  - location:
    - column: [undefined]
    - file: [undefined]
    - line: [undefined]
  - message: connect ECONNREFUSED 127.0.0.1:3000
  - name: Error
  - nodeAnnotation: [undefined]
  - nodeName: [undefined]
  - originalErrorMessage: [undefined]
  - stack: Error: connect ECONNREFUSED 127.0.0.1:3000
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1107:14)

=================================================================================

bin/ember-cli 파일에서 PORT를 3000에서 9292로 수정하니 모두 정상 작동했습니다.
Screenshot from 2021-05-02 17-55-24

ember-cli bash 스크립트가 ENV["UNICORN_PORT"]와 함께 작동하지 않는 것 같습니다.

1개의 좋아요

Ember CLI는 새로운(그리고 치열한 논의 끝에 나온) 개발 결과물이며, @eviltrout가 곧 이에 대해 언급할 수 있을 것입니다.

3개의 좋아요

네, 이 부분은 업데이트가 필요합니다. 그 사이에 NO_EMBER_CLI 환경 변수를 1로 설정하여 해당 기능을 비활성화할 수 있습니다.

5개의 좋아요

당연한 질문일 수 있지만 @eviltrout 님, 환경 변수를 어디서 설정해야 하는지 명확히 설명해 주실 수 있을까요?

d/unicorn 파일에서 이렇게 시도해 보았는데요:

docker exec -it -u discourse:discourse discourse_dev /bin/bash -c "$CMD" -e NO_EMBER_CLI=1

…하지만 작동하지 않았습니다 (localhost:9292에서 여전히 “Ember CLI is Required in Development Mode” 메시지가 표시됩니다).

d/boot_dev -e NO_EMBER_CLI=1

오늘 직접 시도해 보았는데, 저도 같은 문제를 겪었습니다. 제가 확인한 오류의 원인은 Docker의 아키텍처 에뮬레이션이 inotify(Discourse 개발에서 많이 사용)를 지원하지 않기 때문이었습니다. 당분간, x86_64가 아닌 아키텍처가 감지되면 d/boot_dev에 경고 메시지를 추가했습니다:

❯ d/boot_dev 
WARNING: Docker architecture is not x86_64.
Discourse development is unlikely to work using Docker's architecture emulation.
Please try a native development installation.

이제 d/ember-cli 헬퍼를 추가하고 기본적으로 포트 4200을 전달하도록 설정했습니다. 이 토픽 상단의 정보도 업데이트되었습니다. 업데이트 후, 하나의 터미널에서 d/rails s를 실행하고 다른 터미널에서 d/ember-cli를 실행하십시오. 또한 NO_EMBER_CLI를 Docker에 전달되는 변수 중 하나로 설정하여 필요 시 사용할 수 있도록 했습니다.

6개의 좋아요

@david 아마도 사소한 문제일 수 있지만 참고로 말씀드립니다: Docker 없이 실수로 실행했을 때…(하지만 ‘Docker 데몬이 실행 중인지’ 부분은 정확합니다)… x86_64 체크에서 잘못된 오류가 출력되는 것을 확인했습니다.

WARNING: Docker architecture is not x86_64.
Discourse development is unlikely to work using Docker's architecture emulation.
Please try a native development installation.
  ...(snip)...
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
1개의 좋아요

이미지와 매우 명확한 설명 감사합니다!

d/boot_dev --init를 실행할 때 psql: error: FATAL: Peer authentication failed for user "postgres" 오류가 발생했습니다.

data/postgres/에 있는 pg_hba.conf에는 모든 인증 방법이 "trust"로 설정되어 있었지만, /etc/postgresql/13/main/에는 기본값(“peer” / “md5”)이 설정된 다른 파일이 있었습니다.

/etc/postgresql/13/main/pg_hba.conf를 편집하여 모든 방법을 trust로 변경한 후, d/shell을 실행하고 sv restart postgres를 실행하여 변경 사항을 적용했습니다. 이후 d/bundle install; d/rake db:migrate RAILS_ENV=development; d/rake admin:create를 수동으로 실행하여 계속 진행할 수 있었습니다.

다른 분들에게 도움이 될 수 있기를 바라며 여기에 남겨둡니다!

1개의 좋아요