AI로 PoC를 많이 하다 보면, 여러 Cloud 기능을 쓰게 되는데 요즘은 Supabase와 Vecel을 많이 쓰게 되는 것 같다. Supabase는 개발자가 백엔드 인프라를 직접 구축하는 수고를 덜어주는 오픈소스 서비스형 백엔드(Backend as a Service, BaaS) 플랫폼이다. 'Firebase의 오픈소스 대안'으로 불리며, 다음과 같은 핵심 기능을 제공한다
- Database (PostgreSQL): 모든 프로젝트에는 전용 PostgreSQL 데이터베이스가 제공되며, SQL을 직접 작성하거나 편리한 대시보드를 통해 데이터를 관리할 수 있습니다.
- Authentication: 이메일, 비밀번호 기반 로그인뿐만 아니라 Google, GitHub 등을 이용한 소셜 로그인(OAuth) 기능을 쉽게 연동할 수 있습니다.
- Storage: 이미지, 비디오, 문서와 같은 대용량 미디어 파일을 저장하고 관리할 수 있는 환경을 제공합니다.
이 기능을 Web에서 Free 플랜으로 사용하면 프로젝트를 2개까지 사용가능하다. 다행히, Supabase를 Mini PC에서 사용할 수 있어 여기서 설정해 보자.
| 구분 | Supabase Cloud (무료) | Mini PC Self-hosting |
|---|---|---|
| 비용 | 용량/트래픽 초과 시 과금 | 0원 (전기세 제외) |
| 데이터 용량 | 보통 500MB 제한 | 내 SSD 용량 전체 |
| 동시 접속자 | 제한 있음 | 하드웨어 사양만큼 무제한 |
| 데이터 주권 | 외부 서버에 저장 | 내 미니 PC에 저장 |
1. 기본 가정 및 공통 인프라 설정 (0단계)
본격적인 설치 전, 서버의 기초 뼈대를 잡는다. 이 설정은 한 번만 수행하면 된된다.
- Linux OS: Ubuntu 24.04 등 안정적인 배포판 권장.
- Docker 환경:
docker-ce,docker-compose-plugin설치 완료. - 보안 (VPN & UFW):
- VPN: 내부망 접속을 위한 안전한 통로 확보 (ipTIME VPN 등).
- UFW: 기본 방화벽 활성화 및 기본 포트 허용 (
sudo ufw allow ssh,sudo ufw enable).
- 주소 (DDNS): 외부 접속용 고정 주소 확보 (예:
my-home.iptime.org).
2. 첫 번째 Supabase 프로젝트 구축 (Project A)
웹에서 '프로젝트 하나'를 만드는 것과 동일한 과정이이다.
1) 파일 준비 및 기본 설정
여기서 DDNS와 supabase의 port는 다르게 하면 된다.
# 프로젝트 A 전용 폴더 생성
mkdir -p ~/supabase/project-a && cd ~/supabase/project-a
git clone --depth 1 https://github.com/supabase/supabase .
cd docker
cp .env.example .env
2) .env 디테일 수정
- URL 설정:
API_EXTERNAL_URL=http://my-home.iptime.org:8000GOTRUE_EXTERNAL_URL=http://my-home.iptime.org:8000
- 보안 키:
JWT_SECRET,ANON_KEY,SERVICE_ROLE_KEY를 고유한 문자열로 변경. - DB 암호:
POSTGRES_PASSWORD를 강력한 비밀번호로 변경.
experimental이기는 하지만, 다음 명령을 사용하면 바로 .env의 주요 값을 생성해서 업데이트 해주는 명령도 있다.
sh ./utils/generate-keys.sh
3) 서비스 기동 및 포트 개방
- Docker 실행:
docker compose up -d - UFW 허용:
sudo ufw allow 8000/tcp - 포트 포워딩 (공유기):
외부 8000->미니 PC 8000 (TCP)설정 추가.
3. 두 번째 Supabase 프로젝트 추가 (Project B)
동일한 장비에서 완전히 분리된 별도의 프로젝트를 운영한다.
1) 인스턴스 격리 복제
# 프로젝트 B 전용 폴더 생성 (데이터와 설정의 완전한 분리)
mkdir -p ~/supabase/project-b && cd ~/supabase/project-b
git clone --depth 1 https://github.com/supabase/supabase .
cd docker
cp .env.example .env
2) 충돌 방지를 위한 디테일 수정
- 포트 차별화: 중복을 피하기 위해 다른 포트(e.g. 8001) 를 사용한다.
.env내KONG_HTTP_PORT=8001수정.- 모든 외부 URL 끝을
:8001로 변경 (예:http://my-home.iptime.org:8001).
- 프로젝트 이름 지정:
docker-compose.yml파일 최상단에name: supabase-b추가.- 이렇게 해야 컨테이너 이름(예:
supabase-b-db)이 첫 번째 프로젝트와 겹치지 않는다.
- 이렇게 해야 컨테이너 이름(예:
3) 서비스 기동 및 포트 개방
- Docker 실행:
docker compose up -d - UFW 허용:
sudo ufw allow 8001/tcp - 포트 포워딩 (공유기):
외부 8001->미니 PC 8001 (TCP)설정 추가.
🔒 4. 마무리 및 통합 관리
두 인스턴스가 독립적으로 운영되는 상태에서의 관리 포인트입니다.
- 상태 모니터링:
docker compose -p supabase-a ps: 첫 번째 프로젝트 상태 확인.docker compose -p supabase-b ps: 두 번째 프로젝트 상태 확인.
- 로그 관리: 특정 프로젝트의 에러 확인 시
-p옵션 사용 (docker compose -p supabase-b logs -f realtime). - 리소스 배분: 미니 PC의 사양에 따라
docker stats로 메모리 점유율을 확인하며 운영하자.
핵심 요약
- 하나의 인스턴스 = 하나의 프로젝트: 폴더별로
docker-compose를 실행하여 독립적인 환경을 구축한다. - 포트 포워딩은 건별로: 인스턴스마다 사용하는
KONG_HTTP_PORT가 다르므로, 공유기 설정도 그에 맞춰 하나씩 추가해야 한다. - 이름 격리의 중요성:
yml파일에 프로젝트name을 명시해야 컨테이너 이름 충돌로 인한 실행 실패를 막을 수 있다.
이 가이드는 로컬 개발 환경을 넘어, 실제 여러 서비스를 한 대의 서버에서 운영할 때 가장 표준적인 방법이다.
'Cloud Technology' 카테고리의 다른 글
| Mini PC - n8n 설치하기 (0) | 2026.03.04 |
|---|---|
| 20년 윈도우 유저의 OS 확장기: AI가 허물어뜨린 진입장벽 (0) | 2026.02.22 |
| Ubuntu 24.04 Docker 설정- 트러블슈팅 가이드 (1) | 2026.01.11 |
| [GCP Project1] 고가용 저비용 뉴스 요약 서비스 구현 (2) | 2025.09.10 |
| [GCP Project1] 고가용 저비용 뉴스 요약 서비스 설계 (0) | 2025.09.03 |
