한바둑 명리학 시스템 Kamal 배포 실습 - $6/월로 Rails 앱 배포하기

소개

시도하고자 했던 것

지피터스 1인 풀스택 3주차에서 배운 Kamal 배포를 실제 프로젝트에 적용해보았습니다.

한바둑 명리학 시스템(Rails 8.1.1 + Dify AI)을 DigitalOcean 서버에 배포하여 실제 서비스로 운영할 수 있는 환경을 구축했습니다.

그 이유

  • GitHub Codespaces 로컬 개발 환경에서 실제 서비스로 전환 필요

  • $6(약 8,000원)의 저렴한 비용으로 서버 운영 가능

  • Rails 8에 내장된 Kamal로 복잡한 서버 설정 없이 배포 가능

  • 명리학 AI 상담 서비스를 누구나 접속 가능하게 공개

진행 방법

사용 도구

도구용도비용Docker Hub이미지 저장소무료DigitalOcean Droplet서버 호스팅$6/월Kamal자동 배포 도구무료 (Rails 8 내장)GitHub Codespaces개발 환경무료

Step 1: Docker Hub 가입 및 PAT 토큰 발급

Docker Hub(https://hub.docker.com) 가입 후 Personal Access Token 발급:

  • Account Settings → Security → Personal Access Tokens → Generate New Token

  • 권한: Read & Write 선택

토큰 예시: dckr_pat_xxxxxxxxxxxxxxxxxxxxxx

Step 2: DigitalOcean Droplet 생성

DigitalOcean(https://cloud.digitalocean.com) 가입 후 Droplet 생성:

  • Region: Singapore (한국과 가까움)

  • OS: Ubuntu 24.04 LTS

  • Size: $6/월 (1GB RAM, 1 CPU, 25GB SSD)

  • Authentication: Password 설정

Step 3: SSH 키 설정 (비밀번호 없이 접속)

bash

# Codespaces에서 SSH 키 생성
ssh-keygen -t ed25519 -C "hanbadook-deploy"

# 서버에 공개키 복사
ssh-copy-id [email protected]

# 비밀번호 없이 접속 테스트
ssh [email protected]

Step 4: deploy.yml 설정

yaml

# config/deploy.yml
service: hanbadook-rails

image: hmhan2016/hanbadook-rails

servers:
  web:
    - 159.223.87.254

proxy:
  ssl: false
  host: 159.223.87.254

registry:
  username: hmhan2016
  password:
    - KAMAL_REGISTRY_PASSWORD

env:
  secret:
    - RAILS_MASTER_KEY
  clear:
    SOLID_QUEUE_IN_PUMA: true

volumes:
  - "hanbadook_rails_storage:/rails/storage"

builder:
  arch: amd64

Step 5: secrets 파일 설정

bash

# .kamal/secrets
KAMAL_REGISTRY_PASSWORD=dckr_pat_xxxxxxxxxxxxxxxxxxxxxx
RAILS_MASTER_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Step 6: Kamal 배포 실행

kamal setup
```

### 사용한 프롬프트 (Claude AI)
```
지피터스에서 배운 배포를 배울 겸해서 오늘 오후에 추가 공부하게요.
Kamal 배포 개념 정리해줘.
한바둑 명리학 시스템에 간단히 적용해 보기란 주제로 실습하게 해줘.
```

---

## 4. 결과와 배운 점

### 배운 점

1. **Kamal은 생각보다 간단하다**
   - Rails 8에 기본 내장되어 별도 설치 불필요
   - `deploy.yml` 하나로 모든 설정 관리
   - `kamal setup` 한 줄로 서버 구성부터 배포까지 자동화

2. **SSH 키 설정이 핵심**
   - 비밀번호 없이 서버 접속하려면 SSH 키 필수
   - `ssh-copy-id` 명령어로 간단하게 등록 가능

3. **월 $6으로 실서비스 운영 가능**
   - DigitalOcean 기본 Droplet로 충분
   - 도메인 연결하면 완전한 서비스

### 나만의 꿀팁
```
💡 secrets 파일은 절대 GitHub에 올리지 마세요!
   .gitignore에 .kamal/secrets 추가 필수

💡 SSH 키는 한 번 설정하면 계속 사용 가능
   여러 서버에 같은 공개키 등록 가능

💡 Codespaces에서 붙여넣기가 안 될 때
   Ctrl + Shift + V 또는 우클릭 → Paste
```

### 시행착오

1. **Docker Hub 유료 플랜 실수 가입**
   - 해결: 무료 Personal 플랜으로 다운그레이드

2. **Codespaces 새로 열 때마다 Ruby 재설치**
   - 해결: `rbenv install 3.4.1` 매번 실행 필요

3. **deploy.yml 붙여넣기 오류**
   - 해결: VS Code 편집기에서 직접 수정

---

## 5. 앞으로의 계획

1. **도메인 연결**: Cloudflare에서 도메인 구매 후 SSL 설정
2. **Dify Knowledge Base**: 명리학 자료 업로드하여 AI 상담 품질 향상
3. **백만건 데이터 생성**: 1,123,200건 사주 조합 데이터베이스 구축
4. **모니터링 설정**: 서버 상태 및 에러 알림 구성

### 최종 목표 아키텍처
```
사용자 → hanbadook.com (도메인)
         ↓
    DigitalOcean Droplet ($6/월)
    ├── Rails 8.1.1 (웹 서버)
    ├── PostgreSQL (데이터베이스)
    └── Dify AI (명리학 상담)

도움 받은 글 (옵션)

뉴스레터 무료 구독

👉 이 게시글도 읽어보세요