수. 8월 13th, 2025

D: 🚀 Supabase를 프로덕션 환경에서 Self-Hosting할 때 꼭 필요한 커스텀 도메인과 HTTPS 설정을 단계별로 알아보겠습니다!
(이 가이드는 Ubuntu 20.04+ 기준으로 작성되었습니다)


🔍 왜 커스텀 도메인이 필요한가요?

  • 기본 localhost나 IP 주소로 접근하면 ❌ 보안 이슈 발생
  • 모바일 앱/웹에서 CORS 문제 ⚠️
  • 브라우저가 안전하지 않은 연결로 차단 🚫
  • 전문적인 서비스 이미지 구축 ✨

📦 전제 조건

  1. 도메인 구매 완료 (ex: yourdomain.com)
  2. 서버에 Docker & Docker-Compose 설치
  3. 이미 Supabase가 기본 설정으로 실행 중
# Supabase 실행 확인
docker ps

🛠 STEP 1: DNS 설정 (Cloudflare 예시)

  1. Cloudflare 대시보드에서 DNS 레코드 추가
    • A 레코드: api.yourdomain.com → 서버 IP
    • CNAME 레코드: supabase.yourdomain.comapi.yourdomain.com
🌐 예시 설정: Type Name Content
A api 123.123.123.123
CNAME supabase api.yourdomain.com

🔐 STEP 2: SSL 인증서 발급 (Certbot)

# Certbot 설치
sudo apt install certbot python3-certbot-nginx

# 인증서 발급 (Nginx 사용 시)
sudo certbot certonly --nginx -d api.yourdomain.com -d supabase.yourdomain.com

성공 시 경로:
/etc/letsencrypt/live/api.yourdomain.com/
(privkey.pem, fullchain.pem 파일 확인)


⚙️ STEP 3: Supabase 구성 수정

docker-compose.yml 파일에서 환경 변수 수정:

services:
  kong:
    environment:
      - KONG_HTTP_HOST=supabase.yourdomain.com
      - KONG_HTTPS_HOST=supabase.yourdomain.com
      - KONG_ADMIN_LISTEN=0.0.0.0:8001
  studio:
    environment:
      - STUDIO_PG_META_URL=http://kong:8000
      - SUPABASE_PUBLIC_URL=https://supabase.yourdomain.com

🌐 STEP 4: Nginx 리버스 프록시 설정

/etc/nginx/sites-available/supabase 파일 생성:

server {
    listen 80;
    server_name api.yourdomain.com supabase.yourdomain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name api.yourdomain.com supabase.yourdomain.com;

    ssl_certificate /etc/letsencrypt/live/api.yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/api.yourdomain.com/privkey.pem;

    location / {
        proxy_pass http://localhost:3000; # Supabase 기본 포트
        proxy_set_header Host $host;
    }
}
# Nginx 재시작
sudo systemctl restart nginx

🔥 STEP 5: Supabase 재배포 & 테스트

# 변경 사항 적용
docker-compose down && docker-compose up -d

# HTTPS 연결 테스트
curl -I https://supabase.yourdomain.com/rest/v1/

🟢 성공 응답: HTTP/2 200


🚨 주의사항

  1. 포트 충돌 확인: Nginx와 Supabase가 동일 포트 사용하지 않도록
  2. 방화벽 설정: ufw allow 443/tcp
  3. 인증서 자동 갱신: sudo certbot renew --dry-run

💡 고급 설정 팁

  • 로드 밸런싱 필요 시: AWS ALB/Nginx upstream 사용
  • HTTP/2 활성화: Nginx 설정에 http2 추가
  • HSTS 헤더 추가: 보안 강화
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

이제 여러분의 Supabase 인스턴스는 완벽한 프로덕션 환경에서 운영될 준비가 되었습니다! 🎉
문제 발생 시 Supabase 공식 Discord 커뮤니티에서 도움을 받으세요.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다