Files
document-server/README-DEPLOYMENT.md

7.8 KiB

🚀 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. 자동 배포 (권장)

# 저장소 클론
git clone <repository-url>
cd document-server

# 자동 배포 스크립트 실행
./scripts/deploy-synology.sh

2. 수동 배포

# 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 최적화)

# /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 (대용량 메모리 활용)

maxmemory 8gb                           # 캐시 메모리 제한
maxmemory-policy allkeys-lru            # LRU 정책
appendonly yes                          # 데이터 지속성
auto-aof-rewrite-percentage 100         # AOF 최적화

Nginx (SSD 캐시 최적화)

# 캐시 존 설정 (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";
}

📊 모니터링

실시간 모니터링

# 시스템 리소스 및 서비스 상태 확인
./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
  • 네트워크: 기가비트 이더넷 활용

💾 백업 및 복구

자동 백업 설정

# Synology 작업 스케줄러에서 설정
# 매일 새벽 2시 실행
0 2 * * * /volume1/docker/document-server/backup.sh

백업 내용

  • 데이터베이스: PostgreSQL 덤프 (매일)
  • 설정 파일: 압축 아카이브 (매일)
  • 문서 파일: 증분 백업 (주간)
  • 보관 정책: 7일간 보관 후 자동 삭제

복구 방법

# 데이터베이스 복구
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. 연간: 하드웨어 점검 및 업그레이드 계획

로그 관리

# 로그 로테이션 설정
/volume1/docker/document-server/logs/*.log {
    daily
    rotate 30
    compress
    delaycompress
    missingok
    notifempty
    create 644 1000 1000
}

성능 튜닝

# 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. 메모리 부족

# 증상: 서비스 응답 지연, OOM 킬
# 해결: PostgreSQL/Redis 메모리 설정 조정
shared_buffers = 6GB  # 8GB에서 감소
maxmemory 6gb         # 8GB에서 감소

2. 디스크 공간 부족

# 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. 네트워크 연결 문제

# 포트 확인
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까지 지원
  • 수평 확장: 로드 밸런서 + 다중 백엔드
  • 스토리지: 추가 볼륨 마운트 가능

🔒 보안 설정

네트워크 보안

# 방화벽 규칙 (필요한 포트만 개방)
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. 재현 단계: 문제 발생 과정 상세 기록

업데이트

# 코드 업데이트
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