Install Discourse for development using Docker

Ubuntu VM에서 rubygems.org로 ping을 보낼 수 있었습니다. Docker 컨테이너에서도 이를 확인할 수 있는 방법이 있는지 모르겠습니다. 다만, https가 아닌 http 버전만 ping을 보낸 것 같습니다. 문제가 이 부분과 관련이 있을 수 있으니 언급합니다. (구글링 중에 https를 http로 변경하라는 제안을 본 적이 있지만, 정의된 동작이 Docker 컨테이너 내부에 있기 때문에 제가 직접 그렇게 변경할 수는 없습니다.)

1개의 좋아요

MacOS 옵션을 시도해 보았습니다.

먼저 옵션 2인 Homebrew를 사용했습니다. 하지만 이 가이드의 명령어로 모든 의존성이 설치되지 않아 문제가 발생했습니다. https://medium.com/@yutafujii_59175/a-complete-one-by-one-guide-to-install-docker-on-your-mac-os-using-homebrew-e818eb4cfc3 링크가 조금 더 진행하는 데 도움이 되었습니다.

현재 2단계 d/boot_dev --init에서 막혀 있습니다:

Migrating database...

rake aborted!

PG::ConnectionBad: could not connect to server: No such file or directory

Is the server running locally and accepting

connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

/src/lib/site_settings/db_provider.rb:61:in `table_exists?'

/src/lib/site_settings/db_provider.rb:16:in `all'

/src/lib/site_settings/defaults_provider.rb:29:in `db_all'

/src/lib/site_setting_extension.rb:277:in `block in refresh!'

/src/lib/site_setting_extension.rb:274:in `synchronize'

/src/lib/site_setting_extension.rb:274:in `refresh!'

/src/lib/site_setting_extension.rb:495:in `block in setup_methods'

/src/config/initializers/004-message_bus.rb:120:in `<main>'

/src/config/environment.rb:7:in `<main>'

/usr/local/bin/bundle:23:in `load'

/usr/local/bin/bundle:23:in `<main>'

Tasks: TOP => db:migrate => db:load_config => environment

(See full trace by running task with --trace)

이후 .dmg 파일을 다운로드했지만, 저는 Docker 초보자라 이후 어떻게 해야 할지 모르겠습니다. macOS 옵션에 대해 조금 더 자세한 설명이 있으면 좋겠습니다.

감사합니다.

1개의 좋아요

macOS에서 .dmg 파일을 통해 Docker를 설치한 후에는 실행 중인지 확인하십시오. macOS 도구 모음에 상태 확인에 사용할 수 있는 아이콘이 표시되어야 합니다. 그런 다음 첫 번째 게시물의 단계(클론 등)를 그대로 따르세요. 이 방법으로 진행하다가 문제가 발생하면 여기에 게시해 주세요.

참고로, 이전에 Homebrew를 사용하여 Docker를 설치한 적이 있다면, 해당 Docker를 먼저 제거하거나 적어도 실행 중이지 않은지 확인하는 것이 좋습니다. 저는 Homebrew로 Docker를 설치해 본 적이 없어 이에 대해서는 조언할 수 없습니다.

2개의 좋아요

감사합니다.

아이콘을 사용하고 Docker 대시보드를 열었습니다. 명령줄에서 여러 컨테이너가 실행 중인 것을 볼 수 있었지만, 대시보드에서는 실행 중인 컨테이너를 찾지 못했습니다. Docker 대시보드를 사용하려면 로그인해야 하는지 궁금했습니다. 아니면 Homebrew와 Desktop(.dmg)으로 Docker의 여러 버전이 설치되어 있어서 이런 현상이 발생하는 걸까요?

그동안 DigitalOcean에서 Discourse를 설정했는데, 문제없이 작동하며 제 용도에는 충분합니다.

1개의 좋아요

DMG는 docker를 설치하며, discourse는 설치하지 않습니다. 처음에는 컨테이너가 추가되지 않습니다.

그 후 docker 가이드를 따라 진행할 수 있습니다.

2개의 좋아요

위 명령을 실행하면 (Mac에서) 다음과 같은 오류가 발생합니다:

An error occurred while installing cppjieba_rb (0.3.3), and Bundler cannot continue.

Make sure that `gem install cppjieba_rb -v '0.3.3' --source 'https://rubygems.org/'` succeeds

before bundling.

어떤 제안이 있으신가요? 문제가 정확히 무엇인지 이해하지 못하겠습니다. 개별 gem 설치도 작동하지 않습니다 (sudo를 사용해도 마찬가지입니다).

또한, docker 이미지를 실행할 때 왜 gem을 설치해야 하는지 궁금합니다. 이미 완전히 사전 설치되어 있어야 하지 않나요?

업데이트: 해결됨

~/repos/discourse에 클론했지만, ~/discourse에 클론해야 했습니다. 이제 완벽하게 작동합니다.

3개의 좋아요

d/unicorn를 실행할 때 이 오류가 발생하면:

Could not find aws-partitions-1.284.0 in any of the sources
Run `bundle install` to install missing gems.

다음 명령을 실행하여 수정할 수 있습니다:

docker exec -it -u discourse:discourse discourse_dev /bin/bash -c "cd /src && USER=discourse RUBY_GLOBAL_METHOD_CACHE_SIZE=131072 LD_PRELOAD=/usr/lib/libjemalloc.so RAILS_ENV=${RAILS_ENV:=development} bundle install"

이후 d/boot_dev를 실행하면 성공적으로 동작합니다.

3개의 좋아요

더 간단합니다.

d/boot_dev
d/bundle install

모든 일반적인 작업에 대한 헬퍼를 제공합니다.

5개의 좋아요

원문에는 이렇게 나와 있습니다

Docker 개발 플로우에서는 plugins/ 디렉터리 아래에 심볼릭 링크를 지원합니다

이 컨텍스트에서 plugins 디렉터리를 무엇으로 심볼릭 링크하라는 건가요? 감사합니다!

1개의 좋아요
cd plugins
ln -s /full/path/to/your/plugin .
ln -s ~/src/my-great-plugin # 예를 들어
6개의 좋아요

아, 감사합니다. 이 맥락에서는 플러그인 디렉토리에 심볼릭 링크를 걸려는 뜻이었어요.

1개의 좋아요

일반적으로 이 워크플로우에서는 실행 시 범위에 포함할 플러그인에 대해 세밀한 제어가 필요하므로, 전체 디렉토리를 심볼릭 링크로 연결하지 않는 것이 좋습니다.

4개의 좋아요

안녕하세요, 이 가이드를 사용 중인데 정상적으로 작동합니다. 다만 d/boot_dev를 실행할 때마다 다양한 파일이 다운로드되는 것이 걱정됩니다. 필요한 파일만 한 번 다운로드하여 다음 부팅 시에도 유지하는 방법은 무엇인가요? 제 OS는 Ubuntu 20.04입니다.

1개의 좋아요

새로 설치한 Mint 20 시스템에서 설치를 시도했습니다. Docker는 사용 가능한 상태입니다:

terrapop@terrapop:/var$ docker version
Client: Docker Engine - Community
 Version:           19.03.12

terrapop@terrapop:/var/discourse$ sudo systemctl status docker
● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset>
     Active: active (running) since Mon 2020-08-24 19:03:48 CEST; 31min ago

그 후 Discourse를 클론했습니다:

sudo git clone GitHub - discourse/discourse_docker: A Docker image for Discourse · GitHub /var/discourse
cd /var/discourse

하지만 d/boot_dev --init을 실행하면 다음과 같은 결과가 나옵니다:

d/boot_dev --init

bash: d/boot_dev: No such file or directory

도움 주실 분 계신가요?

1개의 좋아요

업데이트: 이제 app.yml에 SendGrid API 키를 추가하고 ./launcher를 통해 앱을 부트스트랩한 결과 localhost에서 실행됩니다. OP(첫 게시물)에 있는 d/ 명령들이 모두 구식이 된 것일까요? 여전히 이해가 안 됩니다. 앱은 이제 Digital Ocean의 스테이징 환경과 마찬가지로 Ubuntu(Mint) 컴퓨터의 localhost에서 Docker로 실행되고 있습니다. 우리는 플러그인을 위해 심볼릭 링크를 사용하고 Docker로 앱을 실행하면서 localhost에서 개발하기를 원하지만, d/ 명령을 어떤 방식으로든 실행할 수 없어 현재 상태가 의도대로 준비된 것인지 확신이 서지 않습니다. 누군가 조언해 주실 수 있을까요? 감사합니다.

업데이트: 제 실수였습니다. 프로덕션용 git 링크를 사용했습니다:

git clone GitHub - discourse/discourse_docker: A Docker image for Discourse · GitHub /var/discourse

다음과 같은 링크를 사용해야 했는데:

git clone GitHub - discourse/discourse: A platform for community discussion. Free, open, simple. · GitHub

:cowboy_hat_face:

그런데…

새로운 문제에 직면했습니다. Ubuntu Mint 20(UID 0)에서는 루트/superuser 권한으로만 /var에 클론할 수 있습니다. 따라서 클론하고 d/boot_dev --init를 실행하면 모든 것이 정상적으로 다운로드되고 시작되지만, 스크립트가 나중에 UID 1000으로 무언가를 실행하기를 기대하면서 권한 오류를 발생시킵니다. UID 1000은 Mint에서 생성된 첫 번째 사용자, 즉 제 개인 계정(terrapop)이며 루트가 아닙니다. 이 문제를 어떻게 해결할 수 있을까요?

해결 방법: 생각보다 간단했습니다. var에 새로운 www 디렉터리를 생성하고, www 디렉터리의 chown과 chmod를 Mint의 첫 번째 사용자로 설정한 후 OP의 게시물대로 진행하면 됩니다. 이제 작동합니다. 기쁩니다.

2개의 좋아요

어떤 이유에서인지 플러그인 소스 디렉터리로 향한 심볼릭 링크가 작동하지 않아, 플러그인 소스 디렉터리를 plugins 디렉터리로 수동으로 이동/복사해야만 Docker 컨테이너를 재시작한 후 /admin/plugins에 표시되도록 할 수 있었습니다.

Docker에서 심볼릭 링크를 지원하는 방식이 변경되었을 수도 있습니다. 저는 Ubuntu에서 docker-ce 19.03.12를 실행 중입니다.

1개의 좋아요

저도 최근 Docker Desktop for Mac에서 이 문제를 경험했습니다.

1개의 좋아요

5달러짜리 DO 드롭렛에서 동일한 단계를 수행했습니다. 모든 것이 정상적으로 작동했습니다. 이제 제 사이트를 어떻게 노출해야 하나요? 접근할 수 있도록 말입니다.

참고: ngrok은 작동합니다. 아직 nginx 리버스 프록시를 9292 포트로 설정하는 것은 작동하지 않습니다.

이 덕분에 가능했습니다. 서버에서 이 작업을 수행하면 nginx 리버스 프록시를 설정할 필요가 없습니다. d/o docker + vscode 원격 설정을 즐기고 있습니다 :slight_smile:

서버를 시작해도 셸을 계속 사용할 수 있도록 d/unicorn -D를 사용하여 유니콘을 데몬으로 실행하세요.

또한 최소 10달러짜리 d/o 드롭렛이 필요합니다.

3개의 좋아요

macOS 환경에서 zsh (iTerm2)를 사용 중이며, 플러그인 개발을 위해 심볼릭 링크를 사용하려고 하면 다음과 같은 오류가 발생합니다:

readlink: illegal option -- f
usage: readlink [-n] [file ...]

이것은 Mac에서 구현된 readlink 명령어가 GNU 버전과 약간 다르기 때문입니다.

가장 간단한 해결 방법은 다음과 같습니다:

# brew install coreutils
# ln -s "$(which greadlink)" "$(dirname "$(which greadlink)")/readlink"

이렇게 하면 호환 가능한 readlink 버전을 사용할 수 있습니다.

dirname "$(which greadlink)" 값이 PATH에서 /usr/bin (보통 원래의 readlink가 위치한 곳)보다 앞쪽에 위치하도록 해야 한다는 점을 기억하세요. 제 경우 PATH는 /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:... 형태이며, greadlink에 대한 심볼릭 링크는 /usr/local/bin에 있습니다.

참고: Fixing "readlink: illegal option -- f" error on a Mac

5개의 좋아요

단일 플러그인 테스트 스위트를 실행하려면 다음과 같이 수행할 수 있습니다:

# d/rake "plugin:spec[PLUGIN_NAME]"
1개의 좋아요