TELEPASI

검색하기 전에 통하다

Self-hosted Supabase Google 로그인 설정 (2/3)

강병우
2026.07.18 👁️ 83

Self-hosted Supabase Google 로그인 설정 (2/3) - 서버 설정

시리즈 목차
Self-hosted Supabase Google 로그인 설정 (1/3) - 개념과 Google Cloud 설정
Self-hosted Supabase Google 로그인 설정 (2/3) - 서버 설정 (현재 글)
Self-hosted Supabase Google 로그인 설정 (3/3) - Web 연동과 테스트

관련 문서
Self-hosted Supabase API 도메인 연결
Google 소셜 로그인 문제 해결 및 참고자료

1편 요약: Web, API, Server 개념을 이해하고 Google Cloud Console에서 OAuth 클라이언트를 생성했습니다.

**2편(현재 글)**에서는 Google에서 발급받은 Client ID와 Secret을 Self-hosted Supabase Backend 서버에 설정하고 Auth 컨테이너를 재생성합니다.


예시 환경

  • Web 애플리케이션: https://example.com
  • Supabase 외부 API: https://sb.example.com
  • Supabase 설치 서버 경로: /root/supabase/docker
  • Google Client ID: YOUR_CLIENT_ID.apps.googleusercontent.com
  • Google Client Secret: YOUR_GOOGLE_CLIENT_SECRET (실제 값으로 교체)

중요: 이 문서의 example.com은 예제 도메인입니다. 실제 설정할 때는 자신이 소유한 도메인으로 모두 바꿔야 합니다.

보안: Google Client Secret은 Backend 서버에만 저장하며, 공개 문서나 Git 저장소에 절대 포함하지 마세요.


사전 준비 확인

2편을 진행하기 전에 다음 사항을 확인합니다.

필수 완료 사항:

  • Self-hosted Supabase Docker가 정상 실행 중
  • 브라우저에서 https://sb.example.com 접속 가능 (HTTPS 인증서 정상)
  • Google Cloud에서 OAuth 클라이언트 생성 완료
  • Google Client ID와 Client Secret 발급 완료

인프라 설정이 필요한 경우:


1. Backend 서버의 Supabase Docker .env 설정

이제 Google에서 발급받은 값을 Self-hosted Supabase가 실행 중인 Backend 서버에 설정합니다.

1.1 파일 위치 확인

물리적 파일 경로:

/root/supabase/docker/.env

실행 주체:

Backend 서버의 Docker Compose → supabase-auth 컨테이너

이 파일은 서버 관리자만 접근해야 하며 브라우저로 전달되어서는 안 됩니다.

1.2 Web 주소와 API 주소 설정

다음 값은 Web 관련 URL을 포함하고 있지만 Frontend 환경 변수가 아니라 Supabase Backend 설정입니다.

# 외부에서 접근하는 Supabase/Kong API
SUPABASE_PUBLIC_URL=https://sb.example.com

# Supabase Auth가 OAuth 콜백 주소를 만들 때 사용하는 외부 API
API_EXTERNAL_URL=https://sb.example.com

# 로그인 완료 후 기본 Web 복귀 주소
SITE_URL=https://example.com

# Web 코드가 redirectTo로 요청할 수 있는 허용 목록
ADDITIONAL_REDIRECT_URLS=https://example.com/*,https://www.example.com/*

각 변수의 역할:

  • SUPABASE_PUBLIC_URL: 브라우저가 호출하는 Supabase API 기준 주소
  • API_EXTERNAL_URL: Auth가 외부 콜백 URL을 만들 때 사용하는 주소
  • SITE_URL: 별도 redirectTo가 없을 때 돌아갈 기본 Web 주소
  • ADDITIONAL_REDIRECT_URLS: Web에서 지정할 수 있는 추가 복귀 주소

중요: 이 네 변수는 /root/supabase/docker/.env에 작성합니다. Frontend .env에 복사하는 설정이 아닙니다.

1.3 Google Provider 설정

GOOGLE_ENABLED=true
GOOGLE_CLIENT_ID=YOUR_CLIENT_ID.apps.googleusercontent.com
GOOGLE_SECRET=YOUR_GOOGLE_CLIENT_SECRET

주의사항:

  • 값 앞뒤에 불필요한 공백을 넣지 않습니다.
  • 따옴표가 값에 포함되지 않도록 확인합니다.
  • 실제 Secret을 문서나 Git에 커밋하지 않습니다.
  • 서버 .env 파일의 접근 권한을 제한합니다.

1.4 로컬 개발 주소 (선택 사항)

로컬 개발 주소가 필요하면 명시적으로 추가합니다.

ADDITIONAL_REDIRECT_URLS=https://example.com/*,https://www.example.com/*,http://localhost:5173/*

운영 서버에서 로컬 주소가 필요 없다면 허용 목록에서 제거하는 편이 안전합니다.


2. Docker Compose에서 Auth 컨테이너로 전달

서버 .env에 값을 적었다고 해서 모든 컨테이너가 자동으로 읽는 것은 아닙니다. docker-compose.yml의 Auth 서비스에 환경 변수를 연결해야 합니다.

2.1 docker-compose.yml 수정

파일 위치:

/root/supabase/docker/docker-compose.yml

Auth 서비스의 environment 섹션에 다음 매핑을 추가합니다.

services:
  auth:
    environment:
      API_EXTERNAL_URL: ${API_EXTERNAL_URL}
      GOTRUE_SITE_URL: ${SITE_URL}
      GOTRUE_URI_ALLOW_LIST: ${ADDITIONAL_REDIRECT_URLS}

      GOTRUE_EXTERNAL_GOOGLE_ENABLED: ${GOOGLE_ENABLED}
      GOTRUE_EXTERNAL_GOOGLE_CLIENT_ID: ${GOOGLE_CLIENT_ID}
      GOTRUE_EXTERNAL_GOOGLE_SECRET: ${GOOGLE_SECRET}
      GOTRUE_EXTERNAL_GOOGLE_REDIRECT_URI: ${API_EXTERNAL_URL}/auth/v1/callback

2.2 각 GoTrue 변수의 의미

  • GOTRUE_EXTERNAL_GOOGLE_ENABLED: Google 로그인 활성화
  • GOTRUE_EXTERNAL_GOOGLE_CLIENT_ID: Google OAuth Client ID
  • GOTRUE_EXTERNAL_GOOGLE_SECRET: Google OAuth Client Secret
  • GOTRUE_EXTERNAL_GOOGLE_REDIRECT_URI: Google이 돌아올 Supabase 콜백
  • GOTRUE_SITE_URL: 로그인 완료 후 기본 Web 주소
  • GOTRUE_URI_ALLOW_LIST: 허용된 Web 복귀 주소 목록

3. Auth 컨테이너에 변경 내용 적용

환경 변수 변경 후 단순 재시작만 하면 기존 컨테이너 환경이 유지될 수 있습니다. Auth 컨테이너를 다시 생성합니다.

3.1 Auth 컨테이너 재생성

cd /root/supabase/docker
docker compose up -d --force-recreate --no-deps auth

명령 옵션:

  • --force-recreate: 기존 컨테이너를 삭제하고 새로 생성
  • --no-deps: Auth만 재생성하고 다른 서비스는 건드리지 않음

3.2 상태 확인

docker compose ps auth

정상 출력 예시:

NAME            STATE     PORTS
supabase-auth   running   9999/tcp

3.3 로그 확인

docker compose logs --tail=100 auth

정상적인 경우 Google provider 관련 오류가 없어야 합니다.

운영 환경 주의: Client Secret이 출력될 수 있는 과도한 디버그 로그를 사용하지 않습니다.


4. 선택 사항: 명령어로 Server 설정 확인

참고: 브라우저에서 Supabase 주소가 정상적으로 열리고 실제 Google 로그인까지 성공했다면 이 섹션의 명령어는 실행하지 않아도 됩니다. 화면이 열리지 않거나 Google provider가 활성화되지 않을 때만 확인용으로 사용합니다.

4.1 Google Provider 활성화 확인

Supabase 공개 anon key를 사용해 Auth 설정 API를 조회합니다.

cd /root/supabase/docker
set -a
. ./.env
set +a

curl -s \
  -H "apikey: $ANON_KEY" \
  https://sb.example.com/auth/v1/settings

응답의 external에 Google이 활성화되어 있어야 합니다.

{
  "external": {
    "google": true
  }
}

4.2 Auth 컨테이너 환경 변수 확인

Secret 값을 직접 출력하지 않고 설정 여부만 확인합니다.

docker exec supabase-auth sh -c '
  echo "enabled=$GOTRUE_EXTERNAL_GOOGLE_ENABLED"
  echo "redirect=$GOTRUE_EXTERNAL_GOOGLE_REDIRECT_URI"
  test -n "$GOTRUE_EXTERNAL_GOOGLE_CLIENT_ID" && echo "client_id=set"
  test -n "$GOTRUE_EXTERNAL_GOOGLE_SECRET" && echo "secret=set"
'

정상 출력 예시:

enabled=true
redirect=https://sb.example.com/auth/v1/callback
client_id=set
secret=set

4.3 외부 콜백 경로 확인

curl -I https://sb.example.com/auth/v1/callback

콜백을 직접 호출하면 정상 OAuth 요청이 아니므로 4xx 오류가 나올 수 있습니다. 중요한 것은 DNS, HTTPS, Nginx 오류가 아니라 Supabase Auth의 HTTP 응답을 받는지 여부입니다.


5. 일반적인 설정 오류

5.1 Unsupported provider: provider is not enabled

원인: Auth 컨테이너에 Google provider 설정이 전달되지 않았습니다.

해결:

  1. .envGOOGLE_ENABLED=true 확인
  2. docker-compose.ymlGOTRUE_EXTERNAL_GOOGLE_* 매핑 확인
  3. Auth 컨테이너 재생성
docker compose up -d --force-recreate --no-deps auth

5.2 Auth 컨테이너가 시작되지 않음

원인:

  • Client ID 또는 Secret 누락
  • 잘못된 URL 형식
  • Compose YAML 들여쓰기 오류
  • .env 변수가 Compose에 전달되지 않음

해결:

docker compose logs --tail=200 auth

로그에서 구체적인 오류 메시지를 확인합니다.

5.3 브라우저에서 Google 로그인 버튼이 보이지 않음

원인: Supabase Dashboard 또는 Web 애플리케이션이 아직 Google provider를 인식하지 못했습니다.

해결:

  1. Auth 설정 API에서 Google이 활성화되었는지 확인 (섹션 4.1)
  2. 브라우저 캐시 삭제 후 재접속
  3. Supabase Dashboard를 사용하는 경우 로그아웃 후 재로그인

6. 최종 설정 요약

Backend 서버 .env

SUPABASE_PUBLIC_URL=https://sb.example.com
API_EXTERNAL_URL=https://sb.example.com
SITE_URL=https://example.com
ADDITIONAL_REDIRECT_URLS=https://example.com/*,https://www.example.com/*

GOOGLE_ENABLED=true
GOOGLE_CLIENT_ID=YOUR_CLIENT_ID.apps.googleusercontent.com
GOOGLE_SECRET=YOUR_GOOGLE_CLIENT_SECRET

Docker Compose 환경 변수 매핑

GOTRUE_EXTERNAL_GOOGLE_ENABLED: ${GOOGLE_ENABLED}
GOTRUE_EXTERNAL_GOOGLE_CLIENT_ID: ${GOOGLE_CLIENT_ID}
GOTRUE_EXTERNAL_GOOGLE_SECRET: ${GOOGLE_SECRET}
GOTRUE_EXTERNAL_GOOGLE_REDIRECT_URI: ${API_EXTERNAL_URL}/auth/v1/callback

적용 명령

cd /root/supabase/docker
docker compose up -d --force-recreate --no-deps auth

다음 단계

Backend 서버 설정을 완료했다면 이제 Web 애플리케이션에서 Google 로그인을 연동합니다.

다음 글: Self-hosted Supabase Google 로그인 설정 (3/3) - Web 연동과 테스트

3편에서는 다음 내용을 다룹니다.

  • Frontend에서 Supabase Client 설정
  • signInWithOAuth() 호출
  • PKCE 세션 교환
  • 처음부터 끝까지 로그인 테스트
  • 보안 체크리스트

작성일: 2026-07-18
적용 환경: Docker 기반 Self-hosted Supabase + SvelteKit

주파수 소통방 (0)

로딩 중...