7.8 KiB
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/
🔧 유지보수
정기 작업
- 주간: 로그 파일 정리 및 압축
- 월간: 데이터베이스 VACUUM 및 REINDEX
- 분기: 전체 시스템 백업 및 복구 테스트
- 연간: 하드웨어 점검 및 업그레이드 계획
로그 관리
# 로그 로테이션 설정
/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 인증서 적용
📞 지원 및 문의
문제 보고
- 로그 수집:
./scripts/monitor-synology.sh > system-report.txt - 환경 정보: Docker 버전, 시스템 사양
- 재현 단계: 문제 발생 과정 상세 기록
업데이트
# 코드 업데이트
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