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 발급 완료
인프라 설정이 필요한 경우:
- DNS, Nginx, Kong, Certbot 설정은 Self-hosted Supabase API 도메인 연결 문서를 참조하세요.
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 IDGOTRUE_EXTERNAL_GOOGLE_SECRET: Google OAuth Client SecretGOTRUE_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 설정이 전달되지 않았습니다.
해결:
.env에GOOGLE_ENABLED=true확인docker-compose.yml에GOTRUE_EXTERNAL_GOOGLE_*매핑 확인- 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를 인식하지 못했습니다.
해결:
- Auth 설정 API에서 Google이 활성화되었는지 확인 (섹션 4.1)
- 브라우저 캐시 삭제 후 재접속
- 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)
로딩 중...