Destiny · 배포 구성

Destiny 배포 구성도

비공개 베타는 팀원 집 기기로 올리고, 공개할 때는 집 기기를 빼고 Oracle Cloud의 A1 서버 한 대로 옮깁니다. 어느 단계든 DB는 API와 같은 곳에 둡니다.

1 · 지금 비공개 베타 웹: 팀원 집 기기 · API와 DB: 집 기기 한 대
2 무료 공개 웹·API·DB 전부 Oracle A1 서버 한 대
3 유료 판매 같은 서버 + DB 시점 복구 (방식 미정)

지금 올릴 구성 · 비공개 베타

비용 없이 팀원 기기만으로 올립니다. 기본 인증을 걸고 초대한 사람만 씁니다.

방문자 브라우저 · HTTPS Cloudflare 엣지 HTTPS 처리 · 주소별 터널 선택 destiny.io.kr moon.destiny.io.kr counsel.destiny.io.kr 요청당 응답 대기 최대 125초 집 A · API 기기 예: 집 노트북 (Ubuntu 재설치 후) cloudflared 터널 A Caddy 127.0.0.1:18088 Host 보고 앱으로 web (메인) web-agent (moon) Kotlin API :7001 · 1대 Postgres 같은 기기 내부망 매일 pg_dump 암호화 후 업로드 백업 버킷 기기 밖 저장소 집 B · 웹 기기 예: 팀원 Mac cloudflared 터널 B Caddy 127.0.0.1:18088 web-counsel 청연당 Tailscale api:7001 · 웹 기기만 허용
방문자는 주소에 맞는 터널로 집 기기에 들어갑니다. 다른 집의 웹은 Tailscale로 API 기기에만 붙고, DB는 API와 같은 기기 안에서만 열립니다. 어느 앱을 어느 기기에 올릴지는 예시입니다.

옮겨 갈 구성 · 무료 공개와 유료 판매

공개할 때는 집 기기를 쓰지 않습니다. 웹 3개, API, DB를 Oracle Cloud의 A1 서버 한 대에 함께 올립니다. 기기 사이 연결이 없어지고, 배포 묶음은 서버 한 대 기준으로 만들어져 있어 거의 그대로 씁니다.

방문자 브라우저 · HTTPS Cloudflare 엣지 HTTPS 처리 · 터널 하나 destiny.io.kr counsel.destiny.io.kr moon.destiny.io.kr 요청당 응답 대기 최대 125초 Oracle Cloud · 홈 리전 (해외) 고정 공인 IP · 인바운드 포트는 열지 않음 A1 서버 · ARM 2코어 · 12GB · Always Free cloudflared 터널 Caddy Host 보고 앱으로 web (메인) web-counsel web-agent (moon) Kotlin API :7001 · 1대 Postgres 같은 서버 내부망 매일 pg_dump Object Storage 같은 리전 · 무료 20GB 유료 판매 전에 추가 시점 복구 WAL 보관 또는 관리형 DB
집 기기와 기기 사이 연결이 모두 빠집니다. 웹은 같은 서버의 api:7001을 부르고, API와 DB는 서버 안의 내부망으로만 이어집니다. 유료 판매 전에 시점 복구를 더하는 부분만 아직 방식이 정해지지 않았습니다.

단계별로 바뀌는 것

모델 호출 비용은 따로입니다.

비공개 베타무료 공개유료 판매
웹팀원 집 기기, 기기마다 터널Oracle A1 서버같음
API와 DB집 기기 한 대에 함께같은 A1 서버에 함께같음DB를 관리형으로 옮길 수도 있음
웹 → APITailscale서버 내부망서버 내부망
백업매일 암호화 dump → 기기 밖14일 보관매일 dump → Object Storage30일 보관+ 시점 복구WAL 보관 또는 관리형 DB
복구 목표데이터 손실 24시간 이내복구 4시간 이내같음데이터 손실 1시간 이내복구 2시간 이내
데이터 위치한국 (팀원 집)해외 리전국외 이전 고지같음
월 비용0원0원Always Free 한도 안0원~관리형 DB를 쓰면 추가
넘어가는 때지금누구나 쓰게 열기 전결제를 열기 전

구성 원칙

팀이 정할 것

  1. 베타의 API 기기를 무엇으로 할지, 그 기기가 멈추면 누가 대응할지. 집 노트북이라면 Ubuntu 22.04 이상으로 다시 설치해야 최신 Docker를 쓸 수 있습니다.
  2. Oracle 계정을 누구 명의로 만들고 홈 리전을 어디로 할지. 홈 리전은 나중에 바꿀 수 없고, 그곳이 DB의 저장 위치가 됩니다.
  3. Oracle 가입이 끝내 안 되면 무엇으로 갈지. 유료 서버 한 대(예: 서울 리전 4GB급 월 약 $24)로 같은 구성을 올리는 것이 가장 가까운 대안입니다.
  4. 유료 판매의 시점 복구를 서버에서 직접 운영할지(WAL을 Object Storage에 보관), 관리형 DB로 옮길지. 고른 쪽에 맞춰 Postgres 버전을 미리 고정합니다.
  5. 해외 리전에 DB를 두는 것을 개인정보 처리방침에 어떻게 적을지. 변호사 확인이 필요합니다.

준비 작업

저장소에서 할 일

  • 베타용으로 배포 묶음을 API·DB용과 웹용으로 나눕니다. 웹용은 앱 하나와 Caddy만 띄우고, api라는 이름이 API 기기의 Tailscale 주소를 가리키게 합니다. 서버 한 대로 옮길 때는 원래 묶음을 그대로 씁니다.
  • Caddy가 터널 뒤에서 HTTP로 받고, Cloudflare가 넘겨주는 방문자 IP를 믿도록 설정합니다. 이걸 빼면 청연당 무료 풀이 제한이 모든 방문자에게 하나로 묶입니다.
  • 서버 준비 스크립트에 터널 방식을 넣습니다. 터널을 쓰면 80, 443 포트를 열지 않습니다.
  • 백업 업로드 대상을 베타 동안 쓸 저장소로도 보낼 수 있게 합니다.

사람이 할 일

  • destiny.io.kr 네임서버를 팀 Cloudflare 계정으로 옮깁니다.
  • 베타 동안 Tailscale 팀을 만들고 "웹 기기 → API 7001번"만 허용합니다.
  • API 기기의 OS를 정리하고 절전을 끈 뒤 재부팅 시험을 합니다.
  • Oracle 계정을 만들고 A1 서버와 Object Storage 버킷을 준비합니다.
  • 서버로 옮긴 뒤 공개 주소를 서버의 터널로 바꾸고, 집 기기의 터널에서는 떼어 냅니다.

근거