Supabase Docker 설정에서 pgsodium 권한 오류 해결하기

SB신범
3분 읽기
조회수 로딩 중...

Supabase Docker 설정에서 pgsodium 권한 오류 해결하기

Supabase를 Docker로 자체 호스팅하면서 다음과 같은 오류 메시지를 만난 적이 있나요?

cat: /etc/postgresql-custom/pgsodium_root.key: Permission denied FATAL: invalid secret key

이 글에서는 이 문제가 발생하는 원인과 해결 방법, 그리고 이러한 설정이 Supabase에서 어떤 역할을 하는지 자세히 알아보겠습니다.

목차

  1. 문제 상황
  2. 해결 방법
  3. pgsodium이란 무엇인가?
  4. 왜 이 해결책이 작동하는가?
  5. 대안적 해결 방법들
  6. 결론 및 교훈

문제 상황

Supabase Docker 환경을 구성하거나 업데이트할 때, 다음과 같은 오류가 발생할 수 있습니다:

dependency failed to start: container supabase-db is unhealthy cat: /etc/postgresql-custom/pgsodium_root.key: Permission denied FATAL: invalid secret key

이 오류는 주로 Supabase의 데이터베이스 컨테이너가 pgsodium_root.key 파일에 접근할 수 없을 때 발생합니다. 이 파일은 PostgreSQL의 암호화 확장인 pgsodium이 사용하는 키 파일입니다.

내 Docker Compose 설정은 다음과 같았습니다:

yaml
1# ... 다른 설정들 ... 2 3db: 4 image: supabase/postgres:15.6.1.146 5 # ... 다른 설정들 ... 6 volumes: 7 # ... 다른 볼륨 설정들 ... 8 - db-config:/etc/postgresql-custom 9 10# ... 다른 서비스들 ... 11 12volumes: 13 db-config:

해결 방법

GitHub 이슈(#30834)에서 찾은 해결책은 매우 간단했습니다. Docker Compose 파일에서 pgsodium 관련 볼륨 마운트를 제거하는 것입니다:

  1. db 서비스의 volumes 섹션에서 다음 줄을 주석 처리하거나 제거:

    yaml
    1- db-config:/etc/postgresql-custom
  2. 파일 하단의 volumes 정의에서도 관련 볼륨을 제거:

    yaml
    1volumes: 2 db-config: # 이 줄을 주석 처리하거나 제거
  3. 기존에 생성된 볼륨이 있다면 삭제:

    bash
    1docker volume rm supabase_db-config
  4. Docker Compose 다시 시작:

    bash
    1docker compose down 2docker compose up -d

이 간단한 변경으로 Supabase가 정상적으로 시작되었습니다!

pgsodium이란 무엇인가?

이 문제를 이해하기 위해서는 먼저 pgsodium이 무엇인지 알아야 합니다.

pgsodium은 PostgreSQL을 위한 현대적인 암호화 도구로, libsodium 라이브러리를 기반으로 합니다. 이 확장 기능은 다음과 같은 기능을 제공합니다:

  1. 데이터 암호화: 민감한 데이터를 안전하게 저장할 수 있게 해줍니다.
  2. 키 관리: 암호화 키를 안전하게 관리합니다.
  3. 서명 및 검증: 데이터의 무결성을 검증할 수 있습니다.
  4. 암호학적 해싱: 안전한 해시 함수를 제공합니다.

Supabase에서는 주로 Vault 기능(암호화된 열 관리)을 구현하는 데 pgsodium을 사용합니다.

왜 이 해결책이 작동하는가?

이 문제는 주로 권한(Permission) 문제에서 발생합니다. 해결 방법이 작동하는 이유를 분석해보면:

  1. 볼륨 마운트 제거: /etc/postgresql-custom 경로로의 볼륨 마운트를 제거함으로써, PostgreSQL은 내부적으로 기본 위치에 자체 키를 생성하게 됩니다.

  2. 권한 문제 우회: Docker 볼륨의 권한 문제(일반적으로 소유자와 권한 설정 관련)를 우회합니다.

  3. 자동 키 생성: pgsodium 확장은 필요한 키 파일이 없을 경우, 자동으로 새 키를 생성합니다.

이 솔루션이 작동하는 이유는 기존의 손상된 또는 접근할 수 없는 볼륨 대신, PostgreSQL이 자체적으로 관리하는 경로에 새로운 키를 생성하도록 유도하기 때문입니다.

대안적 해결 방법들

GitHub 이슈에서 논의된 몇 가지 다른 해결 방법도 있습니다:

  1. 권한 수정 방법:

    bash
    1chmod 0644 /var/lib/docker/volumes/[volume-name]_supabase-db-config/_data/pgsodium_root.key

    이 방법은 볼륨을 유지하면서 키 파일의 권한만 수정합니다. 데이터 손실 없이 문제를 해결할 수 있습니다.

  2. 전체 재설정 방법:

    bash
    1docker compose down 2sudo rm -rf volumes/db/data 3docker volume rm supabase_db-config 4docker compose up -d

    이 방법은 모든 데이터를 삭제하고 처음부터 다시 시작합니다. 프로덕션 환경에서는 권장되지 않습니다.

결론 및 교훈

이 문제를 해결하면서 배운 몇 가지 중요한 교훈이 있습니다:

  1. Docker 볼륨 권한 이해하기: Docker 볼륨의 권한 설정은 컨테이너의 정상 작동에 중요한 요소입니다.

  2. 암호화 확장 기능의 중요성: pgsodium과 같은 암호화 확장은 보안에 중요하지만, 적절히 구성되어야 합니다.

  3. 최소 변경의 원칙: 문제 해결 시 가능한 한 최소한의 변경으로 시작하는 것이 좋습니다. 이 경우, 전체 데이터를 삭제하는 대신 볼륨 마운트만 제거하는 것으로 충분했습니다.

  4. 커뮤니티 활용하기: GitHub 이슈와 같은 커뮤니티 리소스는 문제 해결에 큰 도움이 됩니다.

pgsodium 관련 볼륨을 제거한 후에도 Supabase의 기본 기능은 정상적으로 작동합니다. 다만, 암호화된 열(Encrypted Columns)이나 Vault 기능을 사용하려는 경우에는 추가 설정이 필요할 수 있습니다.

이 해결책은 개발 환경이나 암호화 기능이 필요 없는 경우에 적합합니다. 프로덕션 환경에서 암호화 기능이 필요하다면, 볼륨 권한을 올바르게 설정하는 방법을 고려해보세요.

추가 자료