설계서 v0.2: 이미지 NAS 빌드, 등록 코드 7일, 백업 30개, 직접 연결 범위
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013U497kUNL8ArhV7jkzCpKamain
parent
69449e5c85
commit
887b03b147
27
docs/설계서.md
27
docs/설계서.md
|
|
@ -1,4 +1,4 @@
|
|||
# JJServiceManagerRelay 설계서 (초안 v0.1)
|
||||
# JJServiceManagerRelay 설계서 (v0.2)
|
||||
|
||||
JJServiceManagerEnt 중계 서버 — Synology NAS(DS1515+, DSM 7.1.1) Docker + PostgreSQL, `https://jjsm.joynala.com`
|
||||
|
||||
|
|
@ -84,7 +84,7 @@ JJServiceManagerEnt 중계 서버 — Synology NAS(DS1515+, DSM 7.1.1) Docker +
|
|||
| 대상 | 방식 | 저장 |
|
||||
|---|---|---|
|
||||
| 관리 PC 사용자 | 아이디 + 비밀번호 → 로그인 토큰(12시간, 연결 유지 중 자동 연장) | DB: PBKDF2-SHA256 (210,000회) 해시 |
|
||||
| 대상 PC 등록 | 등록 코드 한 번 입력 (`XXXX-XXXX`, 기본 24시간 유효, 1회용) | DB: 코드 해시 |
|
||||
| 대상 PC 등록 | 등록 코드 한 번 입력 (`XXXX-XXXX`, 기본 **7일** 유효(발급할 때 바꿀 수 있음), 1회용) | DB: 코드 해시 |
|
||||
| 대상 PC 이후 접속 | 기기 ID + 기기 키 (32바이트 무작위) | 대상 PC: DPAPI 암호화 / DB: 키 해시 |
|
||||
|
||||
- 로그인 실패 제한: 같은 아이디 또는 같은 IP에서 5분 동안 10번 넘게 틀리면 15분 동안 거부.
|
||||
|
|
@ -277,16 +277,18 @@ server_settings (key text primary key, value text not null)
|
|||
├─ .env ← 비밀번호 (POSTGRES_PASSWORD, JJSM_ADMIN_PASSWORD)
|
||||
├─ server/ ← 중계 서버 로그
|
||||
├─ db/ ← PostgreSQL 데이터
|
||||
└─ backup/ ← 매일 pg_dump (보관 개수 설정, 기본 30개)
|
||||
├─ backup/ ← 매일 pg_dump, 최근 30개 보관 (오래된 백업 파일부터 정리)
|
||||
└─ src/ ← JJServiceManagerRelay 소스 (Gitea에서 받음, 빌드용)
|
||||
```
|
||||
|
||||
| 컨테이너 | 이미지 | 포트 |
|
||||
|---|---|---|
|
||||
| `jjsm-db` | `postgres:16-alpine` | 바깥 공개 안 함 (컨테이너 네트워크만) |
|
||||
| `jjsm-server` | `jjsm-server` (`mcr.microsoft.com/dotnet/aspnet:8.0` 기반) | `127.0.0.1:21900` → 리버스 프록시만 접근 |
|
||||
| `jjsm-server` | NAS에서 직접 빌드 (`dotnet/sdk:8.0`로 빌드 → `dotnet/aspnet:8.0`으로 실행) | `127.0.0.1:21900` → 리버스 프록시만 접근 |
|
||||
| `jjsm-backup` | `postgres:16-alpine` + cron 스크립트 | 없음 |
|
||||
|
||||
- 실행: SSH → `cd /volume1/docker/jjsm && sudo docker-compose up -d`
|
||||
- 처음 실행·업데이트: SSH → `cd /volume1/docker/jjsm && sudo docker-compose build && sudo docker-compose up -d`
|
||||
- 빌드는 NAS에서 직접 한다 (DS1515+ 기준 수 분~10분 정도 예상). 업데이트 때는 `src/`를 새 버전으로 바꾸고 다시 빌드.
|
||||
- 리버스 프록시: HTTPS `jjsm.joynala.com:443` → HTTP `localhost:21900`, 사용자 지정 머리글 **WebSocket**
|
||||
- 서버 상태 확인: `https://jjsm.joynala.com/health`
|
||||
- 메모리 예상: 서버 약 100MB + PostgreSQL 약 100MB (NAS 16GB에 충분)
|
||||
|
|
@ -298,9 +300,14 @@ server_settings (key text primary key, value text not null)
|
|||
- 중계 중 서버가 끊기면 원격 연결도 끊기고, 기존처럼 자동 재연결한다 (직접 연결은 서버와 무관하게 유지).
|
||||
- 서버가 아예 안 될 때도 기존 Active/Passive 연결은 그대로 동작한다.
|
||||
|
||||
## 11. 정할 것 (다음 질문)
|
||||
## 11. 결정 사항
|
||||
|
||||
1. 서버 이미지를 NAS에서 어떻게 만들지 (NAS에서 직접 빌드 / 미리 빌드한 파일 받기 / Gitea 패키지 레지스트리)
|
||||
2. 등록 코드 기본 유효 시간 (24시간 제안)
|
||||
3. DB 백업 보관 개수 (30개 제안)
|
||||
4. 직접 연결을 시도할 범위 (같은 공유기 뒤일 때만 / 외부 IP도 시도)
|
||||
| 항목 | 결정 |
|
||||
|---|---|
|
||||
| 서버 이미지 | NAS에서 직접 빌드 (`docker-compose build`) |
|
||||
| 등록 코드 기본 유효 시간 | 7일 (발급할 때 바꿀 수 있음) |
|
||||
| DB 백업 | 매일 1회, 최근 30개 보관 |
|
||||
| 직접 연결 범위 | 내부망 + 외부 IP (같은 공유기 뒤면 내부 IP 먼저, 아니면 대상 PC 외부 IP:Active 포트도 시도) |
|
||||
| 대상 PC 접속 비밀번호 | 유지 (서버 로그인과 별도) |
|
||||
| 첫 관리자 | docker-compose 환경 변수, 첫 로그인 때 비밀번호 변경 |
|
||||
| 관리 화면 | JJServiceManagerEnt 설정의 [서버 관리] 탭 |
|
||||
|
|
|
|||
Loading…
Reference in New Issue