# ๐Ÿš€ 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 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 ```