# Design — Deployment (rails 배포 위치) > **결정**: Rails orchestrator 는 **SSOT / Dev 서버**에서 PM2 로 가동. ## 왜 SSOT 서버? | 이유 | 상세 | |---|---| | **모든 프로젝트가 여기서 가동** | PM2 로 12+ 프로세스 관리 | | **SSOT** | 프로젝트 shared 자산 보관 | | **Node 22 이미 설치됨** | 추가 세팅 불필요 | | **PM2 이미 가동 중** | 일관된 프로세스 관리 | | **중립 위치** | agent 어느 호스트에도 속하지 않음 — orchestrator 역할에 적합 | | **같은 내부 네트워크** | 모든 agent 호스트 + Gitea 접근 가능 | | **Gitea webhook** | 같은 네트워크 → 즉시 도달 | ## 배포 경로 ``` / ├── hanarang/ # 기존 SSOT │ ├── shared/ │ ├── sisters/ │ └── scripts/ ├── hanarang-rails/ # ← NEW: rails 설치 위치 │ ├── src/ │ ├── data/ # 로그 등 │ ├── .env │ └── ... ├── / # 기존 프로젝트 ├── / # 기존 └── ... ``` ## 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 /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` — 원클릭 설치 스크립트