Files
document-server/README-DEPLOYMENT.md

280 lines
7.8 KiB
Markdown

# 🚀 Synology DS1525+ 배포 가이드
Document Server를 Synology DS1525+ NAS에 최적화하여 배포하는 가이드입니다.
## 🏗️ 하드웨어 사양
### Synology DS1525+ 최적화 구성
- **CPU**: AMD Ryzen R1600 (4코어/8스레드)
- **메모리**: 32GB DDR4 ECC
- **스토리지**: SSD 읽기/쓰기 캐시 활성화
- **볼륨 구성**:
- **Volume1 (SSD)**: 고성능 데이터 (데이터베이스, 캐시, 로그)
- **Volume2 (HDD)**: 대용량 저장소 (문서, 업로드, 백업)
## 📁 스토리지 전략
### SSD 볼륨 (/volume1) - 성능 최우선
```
/volume1/docker/document-server/
├── database/ # PostgreSQL 데이터 (8GB shared_buffers)
├── redis/ # Redis 캐시 (8GB maxmemory)
├── logs/ # 애플리케이션 로그
├── config/ # 설정 파일
├── nginx/
│ ├── conf.d/ # Nginx 설정
│ └── cache/ # Nginx 캐시 (2GB)
└── cache/ # 애플리케이션 캐시
```
### HDD 볼륨 (/volume2) - 대용량 저장
```
/volume2/document-storage/
├── uploads/ # 업로드된 파일 (HTML, PDF)
├── documents/ # 변환된 문서
├── thumbnails/ # 썸네일 이미지
├── backups/ # 자동 백업 파일
└── archives/ # 아카이브 데이터
```
## 🚀 배포 방법
### 1. 자동 배포 (권장)
```bash
# 저장소 클론
git clone <repository-url>
cd document-server
# 자동 배포 스크립트 실행
./scripts/deploy-synology.sh
```
### 2. 수동 배포
```bash
# 1. 디렉토리 생성
sudo mkdir -p /volume1/docker/document-server/{database,redis,logs,config,nginx/conf.d,nginx/cache,cache}
sudo mkdir -p /volume2/document-storage/{uploads,documents,thumbnails,backups,archives}
# 2. 권한 설정
sudo chown -R 1000:1000 /volume1/docker/document-server/
sudo chown -R 1000:1000 /volume2/document-storage/
# 3. 환경 변수 설정
cp .env.example .env.synology
# .env.synology 파일 편집
# 4. Docker Compose 실행
docker-compose -f docker-compose.synology-optimized.yml up -d
```
## ⚙️ 성능 최적화 설정
### PostgreSQL (32GB RAM 최적화)
```ini
# /volume1/docker/document-server/config/postgresql.synology.conf
shared_buffers = 8GB # RAM의 25%
effective_cache_size = 24GB # RAM의 75%
work_mem = 512MB # 복잡한 쿼리용
maintenance_work_mem = 4GB # 인덱스 구축용
max_worker_processes = 8 # 4코어/8스레드 최적화
max_parallel_workers_per_gather = 4
random_page_cost = 1.1 # SSD 최적화
effective_io_concurrency = 200 # SSD 동시 I/O
```
### Redis (대용량 메모리 활용)
```conf
maxmemory 8gb # 캐시 메모리 제한
maxmemory-policy allkeys-lru # LRU 정책
appendonly yes # 데이터 지속성
auto-aof-rewrite-percentage 100 # AOF 최적화
```
### Nginx (SSD 캐시 최적화)
```nginx
# 캐시 존 설정 (SSD에 저장)
proxy_cache_path /var/cache/nginx/documents
levels=1:2
keys_zone=documents:100m
max_size=2g
inactive=60m;
# Gzip 압축
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml;
# 정적 파일 캐시
location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg|woff|woff2)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
```
## 📊 모니터링
### 실시간 모니터링
```bash
# 시스템 리소스 및 서비스 상태 확인
./scripts/monitor-synology.sh
# 실시간 모니터링 (5초 간격)
watch -n 5 './scripts/monitor-synology.sh'
# Docker 컨테이너 상태
docker-compose -f docker-compose.synology-optimized.yml ps
# 실시간 로그
docker-compose -f docker-compose.synology-optimized.yml logs -f
# 리소스 사용량
docker stats
```
### 주요 메트릭
- **CPU 사용률**: 평상시 < 30%, 피크 < 70%
- **메모리 사용률**: < 80% (32GB 중 25GB 이하)
- **디스크 I/O**: SSD 캐시 효과로 응답 시간 < 100ms
- **네트워크**: 기가비트 이더넷 활용
## 💾 백업 및 복구
### 자동 백업 설정
```bash
# Synology 작업 스케줄러에서 설정
# 매일 새벽 2시 실행
0 2 * * * /volume1/docker/document-server/backup.sh
```
### 백업 내용
- **데이터베이스**: PostgreSQL 덤프 (매일)
- **설정 파일**: 압축 아카이브 (매일)
- **문서 파일**: 증분 백업 (주간)
- **보관 정책**: 7일간 보관 후 자동 삭제
### 복구 방법
```bash
# 데이터베이스 복구
docker exec document-server-db psql -U docuser -d document_db < backup_file.sql
# 설정 파일 복구
tar -xzf config_backup_YYYYMMDD_HHMMSS.tar.gz -C /volume1/docker/document-server/
```
## 🔧 유지보수
### 정기 작업
1. **주간**: 로그 파일 정리 및 압축
2. **월간**: 데이터베이스 VACUUM 및 REINDEX
3. **분기**: 전체 시스템 백업 및 복구 테스트
4. **연간**: 하드웨어 점검 및 업그레이드 계획
### 로그 관리
```bash
# 로그 로테이션 설정
/volume1/docker/document-server/logs/*.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
create 644 1000 1000
}
```
### 성능 튜닝
```bash
# PostgreSQL 통계 확인
docker exec document-server-db psql -U docuser -d document_db -c "SELECT * FROM pg_stat_activity;"
# Redis 메모리 사용량 확인
docker exec document-server-redis redis-cli info memory
# Nginx 캐시 효율성 확인
docker exec document-server-nginx nginx -T
```
## 🚨 트러블슈팅
### 일반적인 문제
#### 1. 메모리 부족
```bash
# 증상: 서비스 응답 지연, OOM 킬
# 해결: PostgreSQL/Redis 메모리 설정 조정
shared_buffers = 6GB # 8GB에서 감소
maxmemory 6gb # 8GB에서 감소
```
#### 2. 디스크 공간 부족
```bash
# SSD 공간 확보
docker system prune -a
find /volume1/docker/document-server/logs -name "*.log" -mtime +7 -delete
# HDD 공간 확보
find /volume2/document-storage/backups -name "*.sql" -mtime +30 -delete
```
#### 3. 네트워크 연결 문제
```bash
# 포트 확인
netstat -tuln | grep -E "(24100|24101|24102|24103)"
# 방화벽 설정 확인
iptables -L | grep -E "(24100|24101|24102|24103)"
```
### 로그 위치
- **애플리케이션**: `/volume1/docker/document-server/logs/`
- **Nginx**: `/volume1/docker/document-server/logs/nginx/`
- **PostgreSQL**: `docker logs document-server-db`
- **Redis**: `docker logs document-server-redis`
## 📈 성능 벤치마크
### 예상 성능 (DS1525+ 32GB)
- **동시 사용자**: 50-100명
- **문서 처리**: 1000+ 문서
- **응답 시간**: < 200ms (평균)
- **업로드 속도**: 100MB/s (기가비트 네트워크)
- **검색 속도**: < 100ms (인덱스 기반)
### 확장성
- **수직 확장**: RAM 64GB까지 지원
- **수평 확장**: 로드 밸런서 + 다중 백엔드
- **스토리지**: 추가 볼륨 마운트 가능
## 🔒 보안 설정
### 네트워크 보안
```bash
# 방화벽 규칙 (필요한 포트만 개방)
iptables -A INPUT -p tcp --dport 24100 -j ACCEPT # Nginx
iptables -A INPUT -p tcp --dport 22 -j ACCEPT # SSH
iptables -A INPUT -j DROP # 기본 차단
```
### 데이터 보안
- **암호화**: 데이터베이스 및 Redis 암호 설정
- **백업 암호화**: GPG를 이용한 백업 파일 암호화
- **접근 제어**: 사용자별 권한 관리
- **SSL/TLS**: Let's Encrypt 인증서 적용
## 📞 지원 및 문의
### 문제 보고
1. **로그 수집**: `./scripts/monitor-synology.sh > system-report.txt`
2. **환경 정보**: Docker 버전, 시스템 사양
3. **재현 단계**: 문제 발생 과정 상세 기록
### 업데이트
```bash
# 코드 업데이트
git pull origin main
# 컨테이너 재빌드
docker-compose -f docker-compose.synology-optimized.yml build --no-cache
docker-compose -f docker-compose.synology-optimized.yml up -d
```