Synology DS716+ DSM 7.2 SSH 관리 가이드
Synology DS716+ (DSM 7.2) 환경에서 컨테이너 배포에 필요한 주요 서비스들을 SSH CLI로 제어하는 방법을 정리한다.
목차
DNS Server
DSM의 DNS Server 패키지는 내부적으로 BIND9를 사용한다. Zone 파일을 직접 편집하여 DNS 레코드를 완전히 CLI로 관리할 수 있다.
Zone 파일 경로
/var/packages/DNSServer/target/named/etc/zone/master/
레코드 편집
Zone 파일을 직접 편집하여 A, CNAME, TXT 등 레코드를 추가/수정한다.
# zone 파일 편집 (예: example.com)
sudo vi /var/packages/DNSServer/target/named/etc/zone/master/example.com
# SOA 시리얼 번호를 반드시 증가시킨 후 레코드 수정변경사항 반영
# DNS 서비스 reload
sudo /var/packages/DNSServer/target/script/reload.shCLI 제어 가능 여부
✅ 완전 가능 — Zone 파일 직접 편집 + reload로 GUI 없이 전체 제어 가능
Container Manager (Docker)
DSM 7.2의 Container Manager는 Docker Compose v2 (플러그인 방식)를 사용한다. 기존 docker-compose (v1, 독립 도구)가 아닌 docker compose 서브커맨드 방식이다.
기본 사용법
# compose 파일로 서비스 실행
sudo docker compose -f /path/to/docker-compose.yml up -d
# 서비스 상태 확인
sudo docker compose -f /path/to/docker-compose.yml ps
# 서비스 중지
sudo docker compose -f /path/to/docker-compose.yml down
# 로그 확인
sudo docker compose -f /path/to/docker-compose.yml logs -fGUI vs CLI 차이
| 항목 | GUI (Container Manager) | CLI (SSH) |
|---|---|---|
| 접근 방식 | DSM 웹 UI | SSH 터미널 |
| Compose 관리 | 프로젝트 단위 시각적 관리 | docker compose 명령 직접 실행 |
| 볼륨/네트워크 | UI에서 설정 | CLI에서 자유롭게 설정 |
| 자동화 | 불가 | 스크립트/CI 연동 가능 |
두 방식 모두 동일한 Docker 엔진을 사용하므로 CLI에서 만든 컨테이너도 GUI에서 확인할 수 있다.
원격 Docker Context
로컬 머신에서 NAS의 Docker를 원격으로 제어할 수도 있다.
# SSH 기반 원격 context 등록
docker context create synology --docker "host=ssh://user@nas-ip"
# context 전환
docker context use synology
# 원격에서 compose 실행
docker compose -f docker-compose.yml up -dCLI 제어 가능 여부
✅ 완전 가능 — sudo docker compose 명령으로 모든 컨테이너 관리 가능
Web Station
Web Station은 DSM 서비스 중 GUI 의존도가 가장 높아 CLI 자동화에 부적합하다.
제한사항
- 가상 호스트, PHP 설정 등 주요 설정이 GUI를 통해서만 생성 가능
- DSM 업데이트 시 설정이 덮어써질 수 있음
- CLI로 설정 파일을 직접 수정해도 GUI에서 저장하면 초기화될 수 있음
권장 접근 방식
- GUI로 기본 설정 생성 — 가상 호스트, 백엔드 서버 등 기본 구조는 GUI에서 설정
- CLI로 추가 미세 조정 — 기본 설정 위에 추가적인 세부 설정만 CLI로 수정
# Web Station 설정 파일 위치 (참고용)
/etc/nginx/conf.d/
/usr/local/etc/nginx/CLI 제어 가능 여부
⚠️ 제한적 — GUI로 기본 설정 생성 후 추가 설정만 CLI로 보완 가능
Reverse Proxy
DSM의 Reverse Proxy는 nginx 기반이다. GUI에서 만든 설정은 /etc/nginx/server.ReverseProxy.conf에 저장되지만, 이 파일을 직접 편집하면 GUI 저장 시 덮어써진다.
커스텀 nginx 설정 분리
GUI 설정과 충돌하지 않도록 별도의 conf 파일로 분리하여 작성한다.
# 커스텀 설정 파일 생성 (이 경로의 파일은 GUI 저장 시에도 유지됨)
sudo vi /etc/nginx/conf.d/http.custom-reverse-proxy.conf와일드카드 패턴: /etc/nginx/conf.d/http.*.conf 형태로 파일을 생성하면 nginx가 자동으로 include한다.
설정 예시
# /etc/nginx/conf.d/http.my-app.conf
server {
listen 443 ssl;
server_name app.example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}설정 검증 (필수)
# 문법 검증 — 반드시 적용 전에 실행
sudo nginx -t
# 검증 성공 시 reload
sudo nginx -s reload⚠️ nginx 설정 오류 시 DSM UI 자체에 접근 불가능해질 수 있다. 반드시
nginx -t로 검증 후 적용할 것.
CLI 제어 가능 여부
✅ 가능 — /etc/nginx/conf.d/http.*.conf에 분리 작성하면 GUI와 충돌 없이 영구 유지
Let’s Encrypt (acme.sh)
DSM 기본 Let’s Encrypt 기능 대신 acme.sh를 사용하면 CLI로 인증서를 완전히 자동화할 수 있다.
acme.sh 설치
# SSH로 NAS 접속 후 설치
curl https://get.acme.sh | sh -s email=your@email.com
# 환경 변수 적용
source ~/.bashrcDNS-01 챌린지로 인증서 발급
HTTP-01 대신 DNS-01 챌린지를 사용하면 80 포트 개방 없이 인증서를 발급할 수 있다.
# DNS API를 사용한 발급 (예: Cloudflare)
export CF_Key="your-api-key"
export CF_Email="your@email.com"
acme.sh --issue --dns dns_cf -d example.com -d "*.example.com"로컬 DNS Server(BIND9)를 사용하는 경우, zone 파일에 TXT 레코드를 추가하여 검증할 수도 있다.
Synology DSM Deploy Hook
발급된 인증서를 DSM에 자동 배포하는 deploy hook을 제공한다.
# DSM deploy hook 환경 변수 설정
export SYNO_Username="admin-user"
export SYNO_Password="your-password"
export SYNO_Hostname="localhost"
export SYNO_Port="5001"
export SYNO_Scheme="https"
# 인증서 배포
acme.sh --deploy -d example.com --deploy-hook synology_dsm⚠️ 2FA가 활성화된 계정에서는 deploy hook이 동작하지 않는다. 인증서 배포 전용 계정을 별도로 생성하거나, 2FA가 비활성화된 관리자 계정을 사용해야 한다.
Task Scheduler를 통한 자동 갱신
DSM의 Task Scheduler에 갱신 스크립트를 등록하여 인증서를 자동으로 갱신한다.
# 갱신 스크립트 예시 (/volume1/scripts/renew-cert.sh)
#!/bin/bash
/root/.acme.sh/acme.sh --renew -d example.com --force
/root/.acme.sh/acme.sh --deploy -d example.com --deploy-hook synology_dsmTask Scheduler 설정 방법:
- DSM > 제어판 > 작업 스케줄러 > 생성 > 예약된 작업 > 사용자 정의 스크립트
- 실행 주기: 매월 1회 또는 매주 1회
- 사용자:
root - 명령:
/bin/bash /volume1/scripts/renew-cert.sh
CLI 제어 가능 여부
✅ 완전 가능 — acme.sh + DNS-01 챌린지 + Task Scheduler로 인증서 전 과정 자동화
종합 요약
| 서비스 | CLI 제어 | 영구성 | 제어 방법 |
|---|---|---|---|
| DNS Server | ✅ 완전 가능 | Zone 파일 유지 | BIND9 zone 파일 편집 + reload.sh |
| Container Manager | ✅ 완전 가능 | 영구적 | sudo docker compose 명령 |
| Web Station | ⚠️ 제한적 | 업데이트 시 덮어써짐 | GUI로 기본 생성 → CLI로 보완 |
| Reverse Proxy | ✅ 가능 | 커스텀 파일 유지 | /etc/nginx/conf.d/http.*.conf 분리 작성 |
| Let’s Encrypt | ✅ 완전 가능 | acme.sh 경로 유지 | acme.sh + DNS-01 + Task Scheduler |
주의사항
- DSM 메이저 업데이트 — nginx 설정 등이 초기화될 수 있으므로 업데이트 전 백업 필수
- nginx 설정 오류 — 문법 오류 시 DSM UI 접근 불가. 반드시
nginx -t검증 후 적용 - DS716+ 지원 단계 — 2015년 모델로, DSM 메이저 업그레이드 지원 여부를 공식 사이트에서 확인할 것
- 2FA와 deploy hook 충돌 —
synology_dsmdeploy hook은 2FA가 활성화된 계정에서 동작하지 않음 - GUI ↔ CLI 충돌 — Reverse Proxy(
server.ReverseProxy.conf)와 Web Station 설정은 GUI 저장 시 CLI 변경사항이 덮어써질 수 있음. 커스텀 설정은 반드시 별도 파일로 분리