# Install Discourse for development using Docker

**URL:** https://meta.discourse.org/t/install-discourse-for-development-using-docker/102009
**Category:** Developer Guides
**Tags:** docker, dev-install, how-to
**Created:** [11월 16, 2018, 9:40오전 UTC](https://meta.discourse.org/t/install-discourse-for-development-using-docker/102009 "2018-11-16T09:40:04Z")
**Posts on this page:** 7
**Page:** 12

<div class="post-metadata">

### Author: ![singi2016cn](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/singi2016cn/32/532755_2.png) [@singi2016cn](https://meta.discourse.org/u/singi2016cn)
#### Post date: [2월 2, 2026, 6:50오전 UTC](https://meta.discourse.org/t/install-discourse-for-development-using-docker/102009/320 "2026-02-02T06:50:25Z")

</div>

근본 원인은 pg15에서 기본 인증 규칙이 변경되었기 때문일 수 있습니다.

설정 파일 경로: `/etc/postgresql/15/main/pg_hba.conf`

파일 내용은 다음과 같습니다:

```plaintext
# Database administrative login by Unix domain socket
local all postgres peer

# TYPE DATABASE USER ADDRESS METHOD

# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 0.0.0.0/0 md5
# IPv6 local connections:
host all all ::/0 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all peer
host replication all 127.0.0.1/32 scram-sha-256
host replication all ::1/128 scram-sha-256

```

백업 실행 명령은 다음과 같습니다:

`pg_dump --schema=public -T public.pg_* --file=‘/src/tmp/backups/default/2026-02-02-063003/dump.sql.gz’ --no-owner --no-privileges --verbose --compress=4 --username=postgres discourse_development`

`local all postgres peer` 규칙으로 인해 위의 명령에서 다음과 같은 오류가 발생했습니다: `Peer authentication failed for user "postgres"`

해결 방법: peer를 trust로 변경하여 로컬 환경의 모든 명령을 허용합니다. 즉, 모든 명령에 대해 인증(또는 비밀번호 입력)이 필요하지 않게 됩니다.

구체적인 단계:

1. 컨테이너의 `/etc/postgresql/15/main/pg_hba.conf`를 로컬로 복사합니다.

`sudo docker cp discourse_dev:/etc/postgresql/15/main/pg_hba.conf ~/discourse/data/pg_hba.conf`

권한을 `644`로 설정합니다.

`sudo chmod 644 ~/discourse/data/pg_hba.conf`

`data/pg_hba.conf` 설정을 수정합니다.

```plaintext
# Database administrative login by Unix domain socket
local all postgres trust

```

1. `d/boot_dev` 파일을 수정하여 `data/pg_hba.conf`를 컨테이너에 마운트하고, `pg`의 기본 설정 파일을 덮어씁니다.

```plaintext
docker run -d \
    -p $local_publish:8025:8025 \
    -p $local_publish:3000:3000 \
    -p $local_publish:4200:4200 \
    -p $local_publish:9292:9292 \
    -p $local_publish:9405:9405 \
    -v "$DATA_DIR:/shared/postgres_data:delegated" \
    # 아래 줄은 새로 추가된 것으로, 설정 파일을 컨테이너에 마운트하고 컨테이너에는 읽기 전용 권한만 부여합니다
    -v "$SOURCE_DIR/data/pg_hba.conf:/etc/postgresql/15/main/pg_hba.conf:ro" \
    -v "$SOURCE_DIR:/src:delegated" \
    -e UNICORN_BIND_ALL=true \
    $mount_plugin_symlinks \
    $ENV_ARGS \
    --hostname=discourse \
    --name=discourse_dev \
    --restart=always \
    discourse/discourse_dev:release /sbin/boot

```

1. 현재 컨테이너를 종료하고 삭제한 후, 새 컨테이너를 재구성합니다.

```plaintext
d/shotdown_dev
d/boot_dev

```

1. 재구성 후, 프론트엔드 및 백엔드 애플리케이션을 시작하여 백업이 정상적으로 작동하는지 테스트합니다.

```plaintext
d/rails s

# 다른 터미널에서 실행
d/ember-cli

```

백업 페이지에서 백업을 클릭하고 몇 초간 기다린 후, 백업 파일 목록을 확인합니다.

 ![image](https://global.discourse-cdn.com/meta/original/4X/2/b/0/2b08320012d1824b5b794487dffed14a39a6e14f.png)

---

<div class="post-metadata">

### Author: ![singi2016cn](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/singi2016cn/32/532755_2.png) [@singi2016cn](https://meta.discourse.org/u/singi2016cn)
#### Post date: [2월 4, 2026, 8:51오전 UTC](https://meta.discourse.org/t/install-discourse-for-development-using-docker/102009/321 "2026-02-04T08:51:34Z")

</div>

위 경험을 바탕으로, 이제 로컬 데이터베이스 클라이언트로 `Docker` 내 `postgreSQL` 데이터베이스에 연결할 수 있습니다.

# `d/boot_dev` 파일의 설정을 다음과 같이 수정합니다:

```plaintext
docker run -d \
    -p $local_publish:8025:8025 \
    -p $local_publish:3000:3000 \
    -p $local_publish:4200:4200 \
    -p $local_publish:9292:9292 \
    -p $local_publish:9405:9405 \
    # 새로운 포트 매핑 추가
    -p $local_publish:55432:5432 \
    -v "$DATA_DIR:/shared/postgres_data:delegated" \
    # 설정 파일 매핑 유지
    -v "$SOURCE_DIR/data/pg_hba.conf:/etc/postgresql/15/main/pg_hba.conf:ro" \
    -v "$SOURCE_DIR:/src:delegated" \
    -e UNICORN_BIND_ALL=true \
    $mount_plugin_symlinks \
    $ENV_ARGS \
    --hostname=discourse \
    --name=discourse_dev \
    --restart=always \
    discourse/discourse_dev:release /sbin/boot

```

# `pg`에 대한 모든 연결 요청을 허용합니다:

`data/pg_hba.conf` 파일에서 설정을 다음과 같이 수정합니다:

```plaintext
# IPv4 local connections:
host all all 0.0.0.0/0 trust
# IPv6 local connections:
host all all ::/0 trust

```

# 다시 빌드합니다

```plaintext
d/shutdown_dev
d/boot_dev

```

# 이제 로컬 데이터베이스 클라이언트로 연결할 수 있습니다

저는 `DBeaver`를 사용했습니다.

 ![image](https://global.discourse-cdn.com/meta/original/4X/8/7/8/878de41e489e963865bff5037558c8fc757a7652.png)

1. 데이터베이스 포트 번호 55432. `d/boot_dev`와 일치해야 하며, 여기서는 로컬에서 이미 존재하는 포트와의 충돌을 피하기 위해 55432를 사용합니다.
2. 데이터베이스 이름
3. "모든 데이터베이스 표시"를 선택하는 것이 좋습니다.
4. 사용자 이름
5. 연결이 가능한지 테스트해 봅니다.
6. 확인을 클릭하여 저장합니다.

드디어 로컬에서 데이터베이스 내 데이터를 편리하게 조회할 수 있게 되었습니다.

---

<div class="post-metadata">

### Author: ![pean](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pean/32/542427_2.png) [@pean](https://meta.discourse.org/u/pean)
#### Post date: [2월 7, 2026, 4:00오후 UTC](https://meta.discourse.org/t/install-discourse-for-development-using-docker/102009/322 "2026-02-07T16:00:54Z")

</div>

이 설치 프로그램에서 메뉴가 제대로 표시되지 않는 것이 정상인가요?

 ![Zrzut ekranu 2026-02-07 132306](https://global.discourse-cdn.com/meta/original/4X/5/0/a/50a8bc689cc1a8ac8ef87ab74b9cd2c945d1cfd4.png)

---

<div class="post-metadata">

### Author: ![manu-p](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/manu-p/32/553421_2.png) [@manu-p](https://meta.discourse.org/u/manu-p)
#### Post date: [5월 7, 2026, 4:45오후 UTC](https://meta.discourse.org/t/install-discourse-for-development-using-docker/102009/323 "2026-05-07T16:45:04Z")

</div>

안녕하세요, Ubuntu 26.04에서 이 튜토리얼을 따라 진행한 후 모든 것이 정상적으로 작동하는 것처럼 보이지만, 메일이 발송되지 않는 것 같습니다.

전용 터미널에서 d/mailhog를 정상적으로 실행했으며, 테스트 사용자 등록 후 전송된 메일의 HTML/CSS 코드를 확인했습니다. 그러나 해당 사용자에게는 제가 제공한 메일 주소로 아무것도 도착하지 않았습니다…

무엇을 놓쳤으며 어떻게 해결해야 할까요? 🙏

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [5월 7, 2026, 4:48오후 UTC](https://meta.discourse.org/t/install-discourse-for-development-using-docker/102009/324 "2026-05-07T16:48:11Z")

</div>

메일은 [http://localhost:8025](http://localhost:8025) (mailhog 포트)에 표시되어야 한다고 생각합니다.

이것은 프로덕션 설치가 아니므로 인터넷을 통해 이메일이 전송되지 않습니다. 이를 위해서는 완전한 프로덕션 설치 _그리고_ 호환되는 이메일 서비스(요즘에는 신뢰를 관리하는 데 실제 비용이 들기 때문에 보통 돈을 내야 합니다 💰)가 필요합니다.

---

<div class="post-metadata">

### Author: ![manu-p](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/manu-p/32/553421_2.png) [@manu-p](https://meta.discourse.org/u/manu-p)
#### Post date: [5월 7, 2026, 4:58오후 UTC](https://meta.discourse.org/t/install-discourse-for-development-using-docker/102009/325 "2026-05-07T16:58:23Z")

</div>

@merefield 님, 감사합니다. localhost:8025는 잘 보고 있었는데, 이유를 알 수 없는 이유로 작동하지 않더니 지금은 모두 정상적으로 작동합니다.

---

<div class="post-metadata">

### Author: ![dubwoc](https://avatars.discourse-cdn.com/v4/letter/d/b4bc9f/32.png) [@dubwoc](https://meta.discourse.org/u/dubwoc)
#### Post date: [5월 22, 2026, 5:35오전 UTC](https://meta.discourse.org/t/install-discourse-for-development-using-docker/102009/326 "2026-05-22T05:35:27Z")

</div>

이 해결책이 동작합니까? `d/boot_dev --init`까지밖에 진행하지 못했습니다.

업데이트:  
아, 개발자 UID가 1000이 아닌 경우, 예를 들어 discourse\_dev 컨테이너의 discourse 사용자와 같은 상황에서는 이 방식이 아예 동작하지 않는 것 같습니다.

업데이트 2:  
네, UID 1000인 사용자를 생성하니 모든 것이 정상적으로 동작했습니다. 따라서 이것이 확실히 문제의 원인이었습니다.

대안 UID로 이 환경을 실행하기 위한 기본 단계를 만들어 보려고 했지만, 현재 이 방식은 호스트 사용자로 프로세스의 다른 단계에서 디렉토리를 생성하는 동시에, 그 디렉토리를 활용하는 docker 명령을 실행하기 때문에, 잘못된 권한을 가진 새로운 디렉토리와 계속 싸워야 하는 상황이 됩니다. 코드에서 해결책을 찾아서 upstream에 제안할 가치가 있는지 확인해 보겠습니다. 문서에 UID 1000에서만 동작한다는 점을 명시하는 것이 가치가 있을 것 같습니다. PR을 보내서 upstream의 반응을 기다려 보겠습니다.

```plaintext
2026-05-22 05:48:13.857 UTC [347] FATAL: data directory "/shared/postgres_data" has wrong ownership
2026-05-22 05:48:13.857 UTC [347] HINT: The server must be started by the user that owns the data directory.

```

> **직접 겪은 여러 문제들**
>
> ```plaintext
> nastee@station ~/vendsrc/discourse > ./d/boot_dev --init
> Using source in: /home/nastee/vendsrc/discourse
> Using data in: /home/nastee/vendsrc/discourse/data/postgres
> release: Pulling from discourse/discourse_dev
> .....
> Digest: sha256:e118af085d4be0486d4d9bfa83ac1c519d9975bed9a08180d10d5ad7c508632c
> Status: Downloaded newer image for discourse/discourse_dev:release
> docker.io/discourse/discourse_dev:release
> f517752802e70b8a9110972bb3ddc0e9343d0c430603e4a9ae3eacc5ec69a2cf
> Installing gems...
> There was an error while trying to write to `/src/Gemfile.lock`. It is likely that you need to grant write permissions for that path.
> 
> ```
> 
> 감사합니다: [There was an error while trying to write to `/src/Gemfile.lock`. It is likely that you need to grant write permissions for that path - #2 by jacque006](https://meta.discourse.org/t/there-was-an-error-while-trying-to-write-to-src-gemfile-lock-it-is-likely-that-you-need-to-grant-write-permissions-for-that-path/334048/2)
> 
> 해당 파일을 777로 설정했습니다(조금 찝찝하긴 하지만), 그렇게 하니 적어도 Gems는 설치되지만, 다음 docker exec 프로세스가 소스 디렉토리에 쓰려고 하는데 제 사용자로는 실행되지 않아서 다음과 같은 에러가 발생합니다:
> 
> ````plaintext
> EACCES EACCES: permission denied, open '/src/_tmp_82_62be1aeb82e80c1d1054dac8bdbc5923'
> ```\n좋아요, 왜 안 되지. `d/`를 실행 중인 클론된 소스 디렉토리가 있는 위치에 `sudo chmod 4777 .`을 실행했습니다.
> 
> 그러자 다음 단계까지 도달합니다:
> 
> ````
> 
> EACCES Error while trying to symlink “../../../node\_modules/.pnpm/prettier@3.8.1/node\_modules/prettier” to “/src/docs/developer-guides/node\_modules/prettier”. The error happened while trying to create the parent directory for the symlink target. Details: Error: EACCES: permission denied, mkdir ‘/src/docs/developer-guides/node\_modules’
> 
> ```plaintext
> 또 다른 권한 문제를 만나고 결국 `chmod 777 -R .`을 실행했습니다.
> 
> 결국 다음 에러로 끝이 납니다:
> 
> ```
> 
> connection to server on socket “/var/run/postgresql/.s.PGSQL.5432” failed: No such file or directory
> 
> ```plaintext
> 
> ```

[이전 페이지](https://meta.discourse.org/t/install-discourse-for-development-using-docker/102009.md?page=11)
