- 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>
105 lines
2.6 KiB
Markdown
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` — 원클릭 설치 스크립트
|