Files
hanarang-rails/.plans/design/deployment.md
이랑이 e58945dc2c chore: 내부망 IP/인프라 정보 제거 — 공개 레포 정리
- deployment.md: 구체적 IP/VMID/LXC ID 제거 → 일반화
- stack.md: DB 호스트 정보 제거
- SPRINT-004: LXC 참조 제거
- migration: LXC ID 제거 → 역할 기반
- install.sh: 하드코딩 repo URL 제거 → RAILS_REPO_URL 또는 --repo 필수

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 13:37:26 +09:00

105 lines
2.6 KiB
Markdown

# Design — Deployment (rails 배포 위치)
> **결정**: Rails orchestrator 는 **SSOT / Dev 서버**에서 PM2 로 가동.
## 왜 SSOT 서버?
| 이유 | 상세 |
|---|---|
| **모든 프로젝트가 여기서 가동** | PM2 로 12+ 프로세스 관리 |
| **SSOT** | 프로젝트 shared 자산 보관 |
| **Node 22 이미 설치됨** | 추가 세팅 불필요 |
| **PM2 이미 가동 중** | 일관된 프로세스 관리 |
| **중립 위치** | agent 어느 호스트에도 속하지 않음 — orchestrator 역할에 적합 |
| **같은 내부 네트워크** | 모든 agent 호스트 + Gitea 접근 가능 |
| **Gitea webhook** | 같은 네트워크 → 즉시 도달 |
## 배포 경로
```
<ssot-server>/
├── hanarang/ # 기존 SSOT
│ ├── shared/
│ ├── sisters/
│ └── scripts/
├── hanarang-rails/ # ← NEW: rails 설치 위치
│ ├── src/
│ ├── data/ # 로그 등
│ ├── .env
│ └── ...
├── <project-a>/ # 기존 프로젝트
├── <project-b>/ # 기존
└── ...
```
## PM2 설정
```js
// ecosystem.config.cjs
module.exports = {
apps: [{
name: 'hanarang-rails',
script: 'dist/cli/index.js',
args: 'serve',
cwd: __dirname,
env: {
NODE_ENV: 'production',
},
max_restarts: 10,
restart_delay: 5000,
error_file: './logs/error.log',
out_file: './logs/out.log',
merge_logs: true,
log_date_format: 'YYYY-MM-DD HH:mm:ss Z',
}]
}
```
## 설치
```bash
# install.sh 사용 (권장)
bash install.sh --dir /path/to/hanarang-rails
# 또는 원격
curl -fsSL <repo-raw>/install.sh | bash
```
상세는 `install.sh --help` 참조.
## 네트워크 요구사항
Rails 서버에서 다음 접근이 필요:
| 대상 | 프로토콜 | 용도 |
|---|---|---|
| Agent 호스트들 | Discord 또는 SSH | SisterTransport |
| Gitea 서버 | HTTPS | webhook 수신 + API 호출 |
| Discord API | HTTPS (외부) | 봇 통신 |
| MariaDB | TCP (3306) | 상태 저장 |
## 범용성 (다른 사용자)
다른 사용자는 자기 환경에 맞게:
```yaml
# rails.config.yaml
deployment:
mode: standalone # or pm2, docker, systemd
dataDir: ./data
logDir: ./logs
port: 18800 # webhook receiver + status API
```
지원 배포 모드:
- `standalone`: 단일 프로세스 (`rails serve`)
- `pm2`: ecosystem.config.cjs 자동 생성
- `docker`: Dockerfile + docker-compose.yml 제공
- `systemd`: .service 파일 생성
## 참고
- `OVERVIEW.md` — 프로젝트 범위
- `transports.md` — SisterTransport 추상화
- `install.sh` — 원클릭 설치 스크립트