[시놀로지 Docker] 실행 중지된 컨테이너에서 파일 가져오기

때로는 멈춰있거나 실행되지 않는 Docker 컨테이너에서 중요한 파일을 추출해야 하는 상황이 발생합니다. 특히 컨테이너가 충돌하거나 오류로 인해 시작할 수 없는 경우, 그 안에 있는 중요한 데이터나 로그 파일에 접근하는 것이 필요합니다. 이 글에서는 시놀로지 NAS에서 실행되지 않는 Docker 컨테이너의 파일을 안전하게 가져오는 방법을 상세히 알아보겠습니다.

1. 시놀로지 NAS에 SSH 접속하기

먼저, 시놀로지 NAS에 SSH로 접속합니다:

 
bash
ssh admin@192.168.1.100

비밀번호를 입력하여 로그인합니다.

2. 모든 컨테이너 목록 확인하기

실행 중인 컨테이너뿐만 아니라 중지된 모든 컨테이너를 확인합니다:

 
bash
sudo docker ps -a

출력 예시:

 
CONTAINER ID   IMAGE             COMMAND                  CREATED          STATUS                      PORTS     NAMES
a1b2c3d4e5f6   tomcat:9.0        "catalina.sh run"        2 weeks ago      Up 5 days                   8080/tcp  tomcat_webapp
f5e6d7c8b9a0   tomcat:8.5        "catalina.sh run"        3 weeks ago      Exited (137) 2 weeks ago              tomcat_old

여기서 f5e6d7c8b9a0는 현재 실행되지 않는 Tomcat 컨테이너입니다.

3. 중지된 컨테이너에서 파일 복사하기

docker cp 명령은 실행 중이지 않은 컨테이너에서도 파일을 복사할 수 있습니다:

 
bash
sudo docker cp f5e6d7c8b9a0:/usr/local/tomcat/logs/catalina.out /volume1/docker/stopped_container_data/

복사 대상 디렉토리가 없다면 먼저 생성합니다:

 
bash
mkdir -p /volume1/docker/stopped_container_data/

4. 디렉토리 전체 복사하기

특정 디렉토리 전체를 복사하려면:

 
bash
sudo docker cp f5e6d7c8b9a0:/usr/local/tomcat/conf/ /volume1/docker/stopped_container_data/conf/

5. 일시적으로 컨테이너 시작 없이 파일 시스템 마운트하기

더 복잡한 경우, Docker의 내부 메커니즘을 활용하여 컨테이너의 파일 시스템에 접근할 수 있습니다:

 
bash
# 새 임시 컨테이너 생성하여 중지된 컨테이너의 볼륨 마운트
sudo docker run --rm -it --volumes-from f5e6d7c8b9a0 -v /volume1/docker/recovery:/recovery alpine sh

# 알파인 리눅스 컨테이너 내부에서 실행할 명령
# 필요한 파일을 /recovery 디렉토리로 복사
cp -r /usr/local/tomcat/webapps /recovery/
cp -r /usr/local/tomcat/logs /recovery/
cp -r /usr/local/tomcat/conf /recovery/

# 작업이 완료되면 exit로 임시 컨테이너 종료
exit

이 방법은 Alpine Linux 같은 가벼운 이미지를 사용하여 임시 컨테이너를 만들고, 문제가 있는 컨테이너의 볼륨을 마운트하여 파일을 안전하게 추출합니다.

6. 컨테이너 이미지로부터 파일 추출하기

만약 컨테이너가 삭제되었지만 이미지는 남아있다면, 이미지로부터 파일을 추출할 수 있습니다:

 
bash
# 이미지에서 임시 컨테이너 생성 (시작하지 않음)
sudo docker create --name temp_container tomcat:8.5

# 파일 복사
sudo docker cp temp_container:/usr/local/tomcat/conf/server.xml /volume1/docker/image_extraction/

# 임시 컨테이너 삭제
sudo docker rm temp_container

7. Docker 볼륨 데이터 직접 접근하기

Docker 볼륨을 사용했다면, 시놀로지 파일 시스템에서 직접 접근할 수 있습니다:

 
bash
# 볼륨 목록 확인
sudo docker volume ls

# 특정 컨테이너의 볼륨 정보 확인
sudo docker inspect -f '{{ json .Mounts }}' f5e6d7c8b9a0 | python -m json.tool

볼륨 경로를 확인한 후 직접 접근:

 
bash
# 볼륨 데이터에 직접 접근
ls -la /volume1/docker/volumes/tomcat_webapps/_data/

8. 실행 불가능한 손상된 컨테이너 처리하기

컨테이너가 너무 손상되어 일반적인 방법으로 접근할 수 없는 경우, Docker의 저수준 기능을 활용합니다:

 
bash
# 컨테이너의 저장소 위치 찾기
CONTAINER_DIR=$(sudo docker inspect -f '{{.GraphDriver.Data.MergedDir}}' f5e6d7c8b9a0)

# 직접 파일 시스템 접근 (root 권한 필요)
sudo ls -la $CONTAINER_DIR/usr/local/tomcat/

# 파일 복사
sudo cp -r $CONTAINER_DIR/usr/local/tomcat/webapps /volume1/docker/recovery/

이 방법은 시놀로지 Docker 구현에 따라 접근 경로가 다를 수 있으므로 주의해야 합니다.

9. 컨테이너 커밋 후 이미지에서 파일 추출하기

중지된 컨테이너를 이미지로 변환한 후 파일을 추출하는 방법도 있습니다:

 
bash
# 중지된 컨테이너를 이미지로 커밋
sudo docker commit f5e6d7c8b9a0 recovery_image

# 새 이미지로 임시 컨테이너 실행 및 파일 추출
sudo docker run --rm -it -v /volume1/docker/recovery:/recovery recovery_image sh -c "cp -r /usr/local/tomcat/logs /recovery/"

# 복구 작업이 끝나면 임시 이미지 삭제
sudo docker rmi recovery_image

10. 자동 복구 스크립트 생성하기

자주 필요한 작업이라면 자동화 스크립트를 만들어 사용할 수 있습니다:

 
bash
#!/bin/bash
# 파일명: /volume1/scripts/recover_container_files.sh

# 변수 설정
CONTAINER_ID=$1
TARGET_DIR=$2
SOURCE_PATH=$3

# 사용법 검사
if [ -z "$CONTAINER_ID" ] || [ -z "$TARGET_DIR" ] || [ -z "$SOURCE_PATH" ]; then
    echo "사용법: $0 <컨테이너ID> <대상디렉토리> <소스경로>"
    echo "예: $0 f5e6d7c8b9a0 /volume1/backup /usr/local/tomcat/logs"
    exit 1
fi

# 대상 디렉토리 생성
mkdir -p $TARGET_DIR

# 컨테이너 상태 확인
CONTAINER_STATE=$(sudo docker inspect -f '{{.State.Running}}' $CONTAINER_ID 2>/dev/null)

if [ $? -ne 0 ]; then
    echo "컨테이너 $CONTAINER_ID를 찾을 수 없습니다."
    exit 1
fi

echo "컨테이너 $CONTAINER_ID에서 $SOURCE_PATH의 파일을 $TARGET_DIR로 복사합니다..."

# 파일 복사 시도
sudo docker cp $CONTAINER_ID:$SOURCE_PATH $TARGET_DIR/

# 결과 확인
if [ $? -eq 0 ]; then
    echo "파일 복사가 완료되었습니다. 저장 위치: $TARGET_DIR"
    exit 0
else
    echo "직접 복사 실패. 대체 방법 시도..."
    
    # 임시 컨테이너 사용하여 복구 시도
    echo "임시 컨테이너를 생성하여 파일 복구 중..."
    SOURCE_DIR=$(dirname $SOURCE_PATH)
    SOURCE_NAME=$(basename $SOURCE_PATH)
    
    sudo docker run --rm -it --volumes-from $CONTAINER_ID -v $TARGET_DIR:/recovery alpine sh -c "cp -r $SOURCE_PATH /recovery/ && echo '복구 완료'"
    
    if [ $? -eq 0 ]; then
        echo "대체 방법으로 파일 복구 성공!"
    else
        echo "모든 복구 방법 실패. 수동 조치가 필요합니다."
        exit 2
    fi
fi

스크립트를 실행 가능하게 만들고 사용합니다:

 
bash
chmod +x /volume1/scripts/recover_container_files.sh
/volume1/scripts/recover_container_files.sh f5e6d7c8b9a0 /volume1/docker/recovery /usr/local/tomcat/logs

 

 

실행되지 않는 Docker 컨테이너에서 중요한 파일을 추출하는 다양한 방법을 살펴보았습니다. 시놀로지 NAS에서 이러한 기술을 활용하면 시스템 장애나 컨테이너 문제 발생 시에도 중요한 데이터를 안전하게 복구할 수 있습니다. 실제 운영 환경에서는 미리 이러한 복구 방법을 숙지하고, 가능하다면 정기적인 백업을 통해 데이터 손실 위험을 최소화하는 것이 중요합니다.

[시놀로지 Docker] SSH로 Tomcat 컨테이너 내부 파일 가져오기

도커 컨테이너에서 실행 중인 Tomcat 서버의 내부 파일을 시놀로지 NAS로 가져와야 할 때가 있습니다. 로그 파일을 분석하거나, 설정 파일을 백업하거나, 웹 애플리케이션 파일을 추출해야 하는 경우 등 다양한 상황에서 이 기술이 필요합니다. 이번에는 SSH를 통해 Tomcat 컨테이너 내부 파일을 시놀로지 호스트로 가져오는 방법을 알아보겠습니다.

1. 시놀로지 NAS에 SSH 접속하기

먼저 시놀로지 NAS에 SSH로 접속합니다:

 
bash
ssh admin@192.168.1.100

비밀번호를 입력하여 로그인합니다.

2. 컨테이너 정보 확인하기

Tomcat 컨테이너의 ID를 확인합니다:

 
bash
sudo docker ps | grep tomcat

출력 예시:

 
CONTAINER ID   IMAGE             COMMAND                  CREATED        STATUS        PORTS                    NAMES
a1b2c3d4e5f6   tomcat:9.0        "catalina.sh run"        5 days ago     Up 5 days     0.0.0.0:8080->8080/tcp   tomcat_webapp

3. docker cp 명령으로 파일 복사하기

단일 파일 가져오기

Tomcat 컨테이너의 로그 파일을 시놀로지 NAS로 복사하려면:

 
bash
sudo docker cp a1b2c3d4e5f6:/usr/local/tomcat/logs/catalina.out /volume1/docker/tomcat_logs/

이 명령은 컨테이너 내부의 catalina.out 파일을 시놀로지의 /volume1/docker/tomcat_logs/ 디렉토리로 복사합니다.

디렉토리 전체 가져오기

Tomcat의 설정 디렉토리 전체를 복사하려면:

 
bash
sudo docker cp a1b2c3d4e5f6:/usr/local/tomcat/conf/ /volume1/docker/tomcat_backup/conf/

만약 대상 디렉토리가 존재하지 않는다면, 먼저 생성해야 합니다:

 
bash
mkdir -p /volume1/docker/tomcat_backup/conf/

웹 애플리케이션 파일 가져오기

특정 웹 애플리케이션 디렉토리를 복사하려면:

 
bash
sudo docker cp a1b2c3d4e5f6:/usr/local/tomcat/webapps/myapp/ /volume1/docker/webapp_backup/

4. 와일드카드를 사용한 파일 복사

docker cp는 직접적으로 와일드카드를 지원하지 않습니다. 하지만 다음과 같은 방법으로 비슷한 효과를 낼 수 있습니다:

 
bash
# 컨테이너 내부에서 임시 디렉토리에 파일 모으기
sudo docker exec a1b2c3d4e5f6 bash -c "mkdir -p /tmp/logs_copy && cp /usr/local/tomcat/logs/*.log /tmp/logs_copy/"

# 임시 디렉토리 전체를 복사
sudo docker cp a1b2c3d4e5f6:/tmp/logs_copy/ /volume1/docker/tomcat_logs/

# 임시 디렉토리 정리
sudo docker exec a1b2c3d4e5f6 bash -c "rm -rf /tmp/logs_copy"

5. 대용량 파일 처리하기

대용량 로그 파일이나 많은 양의 데이터를 복사할 때는 압축 후 복사하는 것이 효율적입니다:

 
bash
# 컨테이너 내에서 파일 압축
sudo docker exec a1b2c3d4e5f6 bash -c "cd /usr/local/tomcat/logs && tar -czf /tmp/tomcat_logs.tar.gz *.log"

# 압축 파일 복사
sudo docker cp a1b2c3d4e5f6:/tmp/tomcat_logs.tar.gz /volume1/docker/

# 시놀로지에서 압축 해제
cd /volume1/docker/
tar -xzf tomcat_logs.tar.gz -C tomcat_logs/

# 컨테이너 내 임시 파일 삭제
sudo docker exec a1b2c3d4e5f6 bash -c "rm /tmp/tomcat_logs.tar.gz"

6. 자동화된 백업 스크립트 만들기

정기적인 백업을 위한 간단한 쉘 스크립트를 만들 수 있습니다:

 
bash
#!/bin/bash
# 파일명: /volume1/scripts/tomcat_backup.sh

# 변수 설정
CONTAINER_ID="a1b2c3d4e5f6"
BACKUP_DIR="/volume1/docker/tomcat_backup"
DATE=$(date +%Y%m%d_%H%M%S)

# 백업 디렉토리 생성
mkdir -p ${BACKUP_DIR}/${DATE}/conf
mkdir -p ${BACKUP_DIR}/${DATE}/webapps
mkdir -p ${BACKUP_DIR}/${DATE}/logs

# 설정 파일 백업
sudo docker cp ${CONTAINER_ID}:/usr/local/tomcat/conf/ ${BACKUP_DIR}/${DATE}/conf/

# 웹앱 백업
sudo docker cp ${CONTAINER_ID}:/usr/local/tomcat/webapps/ ${BACKUP_DIR}/${DATE}/webapps/

# 로그 파일 백업
sudo docker cp ${CONTAINER_ID}:/usr/local/tomcat/logs/ ${BACKUP_DIR}/${DATE}/logs/

# 백업 완료 메시지
echo "Tomcat backup completed at ${DATE}" >> ${BACKUP_DIR}/backup_history.log

이 스크립트를 실행 가능하게 만들고 실행합니다:

 
bash
chmod +x /volume1/scripts/tomcat_backup.sh
/volume1/scripts/tomcat_backup.sh

시놀로지 작업 스케줄러를 사용하여 이 스크립트를 정기적으로 실행할 수도 있습니다.

7. 파일 권한 관리하기

복사된 파일의 권한을 적절히 설정해야 할 수도 있습니다:

 
bash
# 복사된 파일의 소유자 변경
sudo chown -R admin:users /volume1/docker/tomcat_backup/

# 권한 설정
sudo chmod -R 755 /volume1/docker/tomcat_backup/

8. 원격 시스템으로 파일 전송하기

시놀로지에서 다른 시스템으로 파일을 전송하려면 SCP나 SFTP를 사용할 수 있습니다:

 
bash
# 시놀로지에서 다른 서버로 파일 전송
scp /volume1/docker/tomcat_backup/conf/server.xml user@remote-server:/path/to/destination/

9. 실시간 모니터링 설정

중요한 로그 파일을 실시간으로 모니터링하기 위한 설정:

 
bash
# 로그 파일을 실시간으로 가져와 모니터링
sudo docker exec a1b2c3d4e5f6 bash -c "tail -f /usr/local/tomcat/logs/catalina.out" | tee /volume1/docker/tomcat_logs/live_catalina.out

Ctrl+C를 눌러 모니터링을 중단할 수 있습니다.

10. 정리 및 유지 관리

오래된 백업 파일 정리:

 
bash
# 30일 이상 된 백업 파일 삭제
find /volume1/docker/tomcat_backup/ -type d -name "2023*" -mtime +30 -exec rm -rf {} \;

 

 

시놀로지 NAS에서 Docker로 운영 중인 Tomcat 컨테이너의 내부 파일을 효율적으로 추출하고 관리하는 방법을 알아보았습니다. 이러한 기술은 서버 관리, 문제 해결, 백업 및 복구 작업에 필수적입니다. 특히 정기적인 백업 스크립트를 구성하면 중요 데이터의 안전성을 높이고 긴급 상황에서 빠르게 복구할 수 있는 기반을 마련할 수 있습니다.

시놀로지 NAS에 SSL 인증서 적용하기: 안전한 데이터 액세스를 위한 완벽 가이드

시놀로지 NAS(Network Attached Storage)는 데이터 저장과 공유를 위한 훌륭한 솔루션이지만, 원격 접속 시 보안은 매우 중요한 고려사항입니다. SSL 인증서를 적용하면 데이터 전송 중 암호화를 통해 중요 정보를 보호하고 안전한 접속 환경을 구축할 수 있습니다. 이 가이드에서는 시놀로지 NAS에 SSL 인증서를 적용하는 다양한 방법을 단계별로 상세히 알아보겠습니다.

목차

  1. SSL 인증서의 필요성
  2. 시놀로지 DSM에서 지원하는 인증서 유형
  3. Let's Encrypt 무료 인증서 발급 및 적용
  4. 상용 SSL 인증서 적용 방법
  5. 자체 서명 인증서 생성 및 적용
  6. 여러 도메인을 위한 인증서 설정
  7. 인증서 갱신 자동화
  8. 인증서 적용 후 서비스별 설정
  9. 문제 해결 가이드

SSL 인증서의 필요성

시놀로지 NAS에 SSL 인증서를 적용해야 하는 이유는 다음과 같습니다:

  1. 데이터 암호화: 사용자와 NAS 사이의 데이터 전송이 암호화되어 중간자 공격으로부터 보호
  2. 사용자 인증 보호: 로그인 정보와 같은 민감한 데이터가 암호화되어 전송
  3. 신뢰성 확보: 브라우저에서 "안전하지 않은 연결" 경고 제거
  4. 원격 접속 보안: 외부에서 안전하게 NAS에 접근 가능
  5. 모바일 앱 호환성: 많은 모바일 앱이 HTTPS 연결 필요

시놀로지 DSM에서 지원하는 인증서 유형

시놀로지 DSM(DiskStation Manager)에서는 다음과 같은 세 가지 유형의 인증서를 사용할 수 있습니다:

  1. Let's Encrypt 인증서: 무료로 제공되는 인증서로, DSM에서 자동 발급 및 갱신 지원
  2. 상용 인증서: 신뢰할 수 있는 인증 기관(CA)에서 구매한 인증서
  3. 자체 서명 인증서: 시놀로지 시스템에서 직접 생성한 인증서 (외부 신뢰 없음)

각 인증서 유형의 장단점을 비교해보겠습니다:

인증서 유형 장점 단점

Let's Encrypt - 무료<br>- 자동 갱신 가능<br>- 브라우저에서 신뢰 - 도메인 이름 필요<br>- 90일마다 갱신 필요
상용 인증서 - 장기간 유효<br>- 높은 신뢰도<br>- 비즈니스 인증 옵션 - 비용 발생<br>- 수동 갱신 필요
자체 서명 인증서 - 비용 없음<br>- 인터넷 연결 불필요<br>- 즉시 생성 가능 - 브라우저 경고 발생<br>- 클라이언트에 수동 설치 필요<br>- 신뢰성 낮음

Let's Encrypt 무료 인증서 발급 및 적용

Let's Encrypt는 가장 인기 있는 무료 SSL 인증서 발급 서비스로, 시놀로지 DSM에서 간편하게 설정할 수 있습니다.

사전 준비 사항

  1. 도메인 이름: 인증서를 발급받을 도메인이 필요합니다 (예: nas.yourdomain.com)
  2. DDNS 설정: 동적 IP 환경에서는 DDNS 서비스 설정 필요
  3. 포트 포워딩: 라우터에서 80번(HTTP) 포트 포워딩 설정 (인증 과정에 필요)
  4. DSM 6.0 이상: 최신 버전의 DSM 운영체제

단계별 Let's Encrypt 인증서 발급 방법

1. 제어판 열기

DSM에 관리자 계정으로 로그인한 후, 제어판을 엽니다.

2. 보안 섹션 접근

제어판에서 보안 > 인증서로 이동합니다.

3. 인증서 추가

"추가" 버튼을 클릭하여 새 인증서 추가 마법사를 시작합니다.

4. Let's Encrypt 인증서 선택

인증서 추가 마법사에서 새 인증서 추가를 선택한 후, Let's Encrypt 인증서 신청을 선택합니다.

5. 도메인 정보 입력

다음 정보를 입력합니다:

  • 도메인 이름: NAS에 접속할 도메인 이름 (예: nas.yourdomain.com)
  • 이메일: 인증서 만료 알림을 받을 이메일 주소

6. 인증서 발급

"적용"을 클릭하면 시놀로지 DSM이 Let's Encrypt 서버와 통신하여 인증서를 발급받습니다. 이 과정에서 도메인 소유권 확인을 위해 HTTP 챌린지가 수행됩니다.

7. 인증서 설정

인증서 발급이 완료되면, 해당 인증서를 기본 인증서로 설정합니다:

  1. 인증서 목록에서 발급받은 Let's Encrypt 인증서를 선택
  2. "설정" 버튼을 클릭
  3. "기본값으로 설정"을 선택

8. HTTPS 연결 설정

제어판 > 네트워크 > DSM 설정으로 이동하여 다음을 확인합니다:

  1. "HTTPS 자동 리디렉션" 옵션 활성화
  2. "HTTPS 연결 강제 적용" 옵션 활성화

특별 팁: Let's Encrypt 인증서 문제 해결

Let's Encrypt 인증서 발급 실패 시 확인할 사항:

  1. 포트 80 접근성: 외부에서 NAS의 80번 포트에 접근 가능한지 확인
  2. 방화벽 설정: 시놀로지 방화벽과 라우터 방화벽 설정 확인
  3. DNS 설정: 도메인이 NAS의 공인 IP로 올바르게 연결되는지 확인
  4. DDNS 업데이트: DDNS 서비스가 최신 IP 주소로 업데이트되었는지 확인

상용 SSL 인증서 적용 방법

더 긴 유효 기간이나 추가 보증이 필요한 경우, 상용 SSL 인증서를 구매하여 적용할 수 있습니다.

상용 인증서 적용 단계

1. CSR(인증서 서명 요청) 생성

  1. 제어판 > 보안 > 인증서로 이동
  2. "추가" 버튼 클릭
  3. "새 인증서 추가" 선택
  4. "인증서 서명 요청 생성"을 선택
  5. 다음 정보 입력:
    • 이름: 인증서 식별 이름
    • 조직: 회사/조직 이름
    • 조직 단위: 부서명 (선택사항)
    • 위치: 도시명
    • 주/도: 주/도 이름
    • 국가: 국가 코드
    • 이메일: 담당자 이메일
    • 도메인 이름: NAS 접속 도메인 이름
    • 비트 길이: 2048 이상 권장
  6. "적용"을 클릭하여 CSR 생성

2. 인증 기관에 CSR 제출

  1. 생성된 CSR을 텍스트로 복사
  2. 선택한 인증 기관 웹사이트에서 인증서 구매 절차 진행
  3. CSR 입력 단계에서 복사한 CSR 텍스트 붙여넣기
  4. 인증 기관의 안내에 따라 도메인 소유권 확인 및 결제 진행

3. 발급받은 인증서 설치

인증 기관에서 인증서를 발급받은 후:

  1. 제어판 > 보안 > 인증서로 이동
  2. CSR을 생성했던 인증서 항목 선택
  3. "설정" 버튼 클릭
  4. "인증서 가져오기" 선택
  5. 인증 기관에서 받은 인증서 파일(.crt, .cer 등) 업로드
  6. 중간 인증서(Chain Certificate)가 있는 경우 함께 업로드
  7. "확인"을 클릭하여 인증서 설치 완료

4. 인증서 활성화

  1. 설치된 인증서 선택
  2. "설정" 버튼 클릭
  3. "기본값으로 설정" 선택

자체 서명 인증서 생성 및 적용

인터넷에 연결되지 않은 내부 네트워크에서 사용하거나 테스트 목적으로 자체 서명 인증서를 생성할 수 있습니다.

자체 서명 인증서 생성 단계

  1. 제어판 > 보안 > 인증서로 이동
  2. "추가" 버튼 클릭
  3. "새 인증서 추가" 선택
  4. "자체 서명된 인증서 생성"을 선택
  5. 다음 정보 입력:
    • 이름: 인증서 식별 이름
    • 조직: 회사/조직 이름
    • 조직 단위: 부서명 (선택사항)
    • 위치: 도시명
    • 주/도: 주/도 이름
    • 국가: 국가 코드
    • 이메일: 담당자 이메일
    • 도메인 이름: NAS 접속 도메인 이름 또는 IP 주소
    • 비트 길이: 2048 이상 권장
    • 유효 기간(일): 인증서 유효 기간 (최대 9999일)
  6. "적용"을 클릭하여 자체 서명 인증서 생성

자체 서명 인증서 신뢰 설정 (클라이언트 측)

자체 서명 인증서는 기본적으로 브라우저에서 신뢰하지 않으므로, 각 클라이언트 기기에 인증서를 수동으로 설치해야 합니다:

인증서 내보내기

  1. 생성된 자체 서명 인증서 선택
  2. "내보내기" 버튼 클릭
  3. 인증서 파일(.crt) 다운로드

Windows에 인증서 설치

  1. 다운로드한 인증서 파일을 더블클릭
  2. "인증서 설치" 선택
  3. "로컬 컴퓨터" 선택 (관리자 권한 필요)
  4. "인증서를 다음 저장소에 저장" 선택
  5. "찾아보기" 클릭
  6. "신뢰할 수 있는 루트 인증 기관" 선택
  7. "다음"을 클릭하고 "마침"으로 설치 완료

macOS에 인증서 설치

  1. 다운로드한 인증서 파일을 더블클릭
  2. Keychain Access 앱이 열림
  3. 인증서를 시스템 키체인에 추가
  4. 인증서를 찾아 더블클릭
  5. "신뢰" 섹션 확장
  6. "이 인증서 사용 시" 옵션을 "항상 신뢰"로 변경
  7. Keychain Access 앱 종료

모바일 기기에 인증서 설치

각 모바일 기기(iOS, Android)의 설정 메뉴를 통해 인증서를 설치할 수 있습니다. 자세한 과정은 기기별로 다르므로 제조사 지침을 참조하세요.

여러 도메인을 위한 인증서 설정

시놀로지 NAS를 여러 도메인 이름으로 접근해야 하는 경우, 다음과 같은 방법을 사용할 수 있습니다:

Let's Encrypt 인증서로 여러 도메인 설정

  1. 제어판 > 보안 > 인증서로 이동
  2. "추가" 버튼 클릭
  3. "새 인증서 추가" 선택
  4. "Let's Encrypt 인증서 신청" 선택
  5. 주 도메인 이름 입력 (예: nas.yourdomain.com)
  6. "대체 이름" 섹션에 추가 도메인 입력 (예: nas2.yourdomain.com)
  7. 최대 100개 도메인까지 지원 (Let's Encrypt 제한)

와일드카드 인증서 적용 (상용 인증서)

여러 서브도메인을 사용하는 경우, 와일드카드 인증서(*.yourdomain.com)를 구매하여 적용하는 것이 효율적일 수 있습니다:

  1. 인증 기관에서 와일드카드 인증서 구매
  2. CSR 생성 시 와일드카드 도메인 이름 입력 (예: *.yourdomain.com)
  3. 발급받은, 와일드카드 인증서를 시놀로지 DSM에 적용

인증서 갱신 자동화

Let's Encrypt 인증서 자동 갱신

시놀로지 DSM은 Let's Encrypt 인증서 자동 갱신 기능을 내장하고 있습니다:

  1. 제어판 > 보안 > 인증서로 이동
  2. "설정" 버튼 클릭
  3. "Let's Encrypt 설정" 탭 선택
  4. "인증서 자동 갱신" 옵션 활성화
  5. "만료 x일 전 갱신" 값 설정 (기본값: 30일)
  6. "확인"을 클릭하여 설정 저장

갱신 알림 설정

인증서 만료에 대비하여 알림을 설정하는 것이 좋습니다:

  1. 제어판 > 알림으로 이동
  2. "규칙" 탭 선택
  3. "SSL 인증서 만료" 이벤트가 활성화되어 있는지 확인
  4. "이메일" 또는 "SMS" 알림 방식 설정

인증서 적용 후 서비스별 설정

SSL 인증서를 설치한 후, 시놀로지 NAS의 각 서비스별로 HTTPS 설정을 확인해야 합니다:

File Station 및 웹 접근

기본 DSM 인터페이스에 적용된 인증서는 File Station 및 웹 기반 파일 접근에 자동으로 적용됩니다.

사진 스테이션(Photo Station)/모멘트(Moments)

  1. 제어판 > 응용 프로그램으로 이동
  2. "사진 스테이션" 또는 "모멘트" 선택
  3. "설정" 또는 "권한" 탭에서 "HTTPS 연결 강제 적용" 옵션 활성화

비디오 스테이션(Video Station)

  1. 제어판 > 응용 프로그램으로 이동
  2. "비디오 스테이션" 선택
  3. "설정" 탭에서 "HTTPS 연결 강제 적용" 옵션 활성화

오디오 스테이션(Audio Station)

  1. 제어판 > 응용 프로그램으로 이동
  2. "오디오 스테이션" 선택
  3. "설정" 탭에서 "HTTPS 연결 강제 적용" 옵션 활성화

다운로드 스테이션(Download Station)

  1. 다운로드 스테이션 앱 실행
  2. 우측 상단 설정 아이콘 클릭
  3. "일반" 탭에서 "HTTPS 연결 강제 적용" 옵션 활성화

FTP 서비스를 FTPS로 전환

  1. 제어판 > 파일 서비스로 이동
  2. "FTP" 탭 선택
  3. "FTPS 활성화" 옵션 체크
  4. SSL/TLS 암호화 모드 선택 (명시적 또는 암시적)
  5. "적용"을 클릭하여 설정 저장

문제 해결 가이드

Let's Encrypt 인증서 발급 실패

문제 1: "도메인 확인 실패" 오류

원인: 외부에서 NAS의 80번 포트에 접근할 수 없음 해결 방법:

  1. 라우터의 포트 포워딩 설정 확인 (80번 포트)
  2. 방화벽 설정 확인
  3. ISP에서 80번 포트를 차단하지 않는지 확인 (차단 시 다른 포트로 변경 필요)

문제 2: "발급 제한 초과" 오류

원인: Let's Encrypt는 주당 발급 횟수에 제한이 있음 해결 방법:

  1. 일주일 후에 다시 시도
  2. 테스트 시 Let's Encrypt 스테이징 환경 사용 (시놀로지에서는 직접 지원하지 않음)

인증서 경고 메시지

문제: 브라우저에서 여전히 "안전하지 않은 연결" 경고 표시

원인 1: 자체 서명 인증서 사용 해결 방법: 신뢰할 수 있는 인증 기관의 인증서 사용 또는 클라이언트에 인증서 수동 설치

원인 2: 인증서와 접속 도메인/IP 불일치 해결 방법: 인증서에 등록된 도메인 이름으로 접속 (IP 주소가 아닌)

원인 3: 중간 인증서 누락 해결 방법: 상용 인증서 설치 시 중간 인증서(chain certificate)도 함께 설치

인증서 만료

문제: 인증서가 만료되어 접속 불가

원인: 자동 갱신 실패 또는 수동 갱신 누락 해결 방법:

  1. Let's Encrypt 인증서: "갱신" 버튼 클릭
  2. 상용 인증서: 새 인증서 구매 및 갱신
  3. 자체 서명 인증서: 새 인증서 생성

모바일 앱 연결 문제

문제: 시놀로지 모바일 앱에서 연결 오류

원인: 자체 서명 인증서 신뢰 문제 해결 방법:

  1. 모바일 기기에 인증서 설치
  2. 앱 설정에서 "인증서 확인 건너뛰기" 활성화 (보안 저하 주의)
  3. 신뢰할 수 있는 인증 기관의 인증서로 교체

결론

시놀로지 NAS에 SSL 인증서를 적용하는 것은 데이터 보안과 안전한 원격 접속을 위한 필수적인 단계입니다. Let's Encrypt의 무료 인증서를 활용하면 비용 부담 없이 표준 수준의 보안을 구현할 수 있으며, 상용 인증서나 자체 서명 인증서도 각 환경에 맞게 선택할 수 있습니다.

이 가이드를 통해 시놀로지 NAS에 SSL 인증서를 성공적으로 적용하고, 안전한 데이터 액세스 환경을 구축하시기 바랍니다. 인증서 설정 후에는 정기적인 갱신 상태 확인과 보안 업데이트를 통해 지속적인 보안을 유지하는 것이 중요합니다.

 

[시놀로지 Docker] SSH로 Tomcat 컨테이너 내부 접근하기 - 실전 가이드

시놀로지 NAS에서 Docker로 구동 중인 Tomcat 컨테이너에 접근하는 방법을 단계별로 알아보겠습니다. SSH 접속부터 컨테이너 내부 파일 시스템 탐색까지, 실제 사례를 바탕으로 자세히 설명해 드리겠습니다.

1. 시놀로지 NAS에 SSH 접속하기

먼저 터미널(리눅스/맥) 또는 PuTTY(윈도우)를 사용하여 시놀로지 NAS에 SSH로 접속합니다:

 
bash
ssh admin@192.168.1.100

여기서 'admin'은 시놀로지 계정명, '192.168.1.100'은 시놀로지 NAS의 IP 주소입니다. 접속 후 비밀번호를 입력하면 다음과 같은 화면이 표시됩니다:

 
admin@192.168.1.100's password: 
Linux SynologyNAS 4.4.180+ #42962 SMP Mon Oct 29 12:24:40 CST 2021 x86_64

Welcome to Synology DiskStation

DSM 7.1.1-42962 Update

2. Docker 컨테이너 확인하기

접속에 성공했다면, 다음 명령어로 현재 실행 중인 Docker 컨테이너를 확인합니다:

 
bash
sudo docker ps

출력 예시:

 
CONTAINER ID   IMAGE             COMMAND                  CREATED        STATUS        PORTS                                        NAMES
a1b2c3d4e5f6   tomcat:9.0        "catalina.sh run"        2 days ago     Up 2 days     0.0.0.0:8080->8080/tcp                       tomcat_webapp

특별히 Tomcat 컨테이너만 보고 싶다면:

 
bash
sudo docker ps | grep tomcat

3. Tomcat 컨테이너 내부로 접속하기

확인된 컨테이너 ID를 사용하여 내부 셸에 접속합니다:

 
bash
sudo docker exec -it a1b2c3d4e5f6 /bin/bash

성공적으로 접속되면 다음과 같이 프롬프트가 변경됩니다:

 
root@a1b2c3d4e5f6:/usr/local/tomcat#

이제 컨테이너 내부에 있으며, 일반적인 리눅스 명령어를 사용할 수 있습니다.

4. Tomcat 설치 경로 확인 및 탐색하기

대부분의 Tomcat Docker 이미지에서는 Tomcat이 /usr/local/tomcat에 설치되어 있습니다. 다음 명령어로 현재 디렉토리 구조를 확인해 볼 수 있습니다:

 
bash
ls -la

출력 예시:

 
total 152
drwxr-xr-x 1 root root  4096 Apr 25 09:14 .
drwxr-xr-x 1 root root  4096 Apr 25 09:14 ..
-rw-r--r-- 1 root root 18982 Mar 14 09:16 LICENSE
-rw-r--r-- 1 root root  5432 Mar 14 09:16 NOTICE
-rw-r--r-- 1 root root  2333 Mar 14 09:16 RELEASE-NOTES
-rw-r--r-- 1 root root 12761 Mar 14 09:16 RUNNING.txt
drwxr-xr-x 2 root root  4096 Mar 30 10:21 bin
drwxr-xr-x 1 root root  4096 Apr 25 09:15 conf
drwxr-xr-x 2 root root  4096 Mar 30 10:21 lib
drwxrwxrwx 1 root root  4096 Apr 30 15:42 logs
drwxr-xr-x 2 root root  4096 Mar 30 10:21 temp
drwxr-xr-x 7 root root  4096 Mar 30 10:21 webapps
drwxr-xr-x 2 root root  4096 Mar 30 10:21 work

주요 디렉토리 탐색:

 
bash
# 웹 애플리케이션 확인
ls -la webapps/

# 로그 파일 확인
ls -la logs/

# 설정 파일 확인
ls -la conf/

Tomcat 버전 확인:

 
bash
cat RELEASE-NOTES

5. 실제 배포된 웹 애플리케이션 확인하기

webapps 디렉토리에 배포된 애플리케이션을 확인합니다:

 
bash
cd webapps
ls -la

출력 예시:

 
total 16
drwxr-xr-x 7 root root 4096 Mar 30 10:21 .
drwxr-xr-x 1 root root 4096 Apr 25 09:14 ..
drwxr-xr-x 3 root root 4096 Mar 30 10:21 ROOT
drwxr-xr-x 4 root root 4096 Apr 28 14:32 myapp

특정 애플리케이션의 WEB-INF 디렉토리를 확인하여 설정 파일을 볼 수 있습니다:

 
bash
cd myapp/WEB-INF
ls -la

6. 설정 파일 수정하기

server.xml과 같은 중요한 설정 파일을 확인하고 수정할 수 있습니다:

 
bash
cd /usr/local/tomcat/conf
cat server.xml

수정이 필요한 경우, vi 에디터를 사용할 수 있습니다:

 
bash
vi server.xml

Tomcat 컨테이너에 vi가 설치되어 있지 않다면 다음 명령으로 설치할 수 있습니다:

 
bash
apt-get update && apt-get install -y vim

7. 로그 파일 모니터링하기

Tomcat의 로그 파일을 실시간으로 확인할 수 있습니다:

 
bash
cd /usr/local/tomcat/logs
tail -f catalina.out

8. 컨테이너 외부에서 파일 시스템 접근하기

SSH 세션에서 컨테이너를 종료하지 않고도 호스트 시스템에서 컨테이너 볼륨을 확인할 수 있습니다:

 
bash
# 컨테이너에서 나가기
exit

# 컨테이너 볼륨 정보 확인
sudo docker inspect a1b2c3d4e5f6 | grep -A 10 Mounts

출력 예시:

 
json
"Mounts": [
    {
        "Type": "volume",
        "Name": "tomcat_webapps",
        "Source": "/volume1/docker/volumes/tomcat_webapps/_data",
        "Destination": "/usr/local/tomcat/webapps",
        "Driver": "local",
        "Mode": "rw",
        "RW": true,
        "Propagation": ""
    }
]

이제 시놀로지 파일 시스템에서 직접 접근할 수 있습니다:

 
bash
ls -la /volume1/docker/volumes/tomcat_webapps/_data

9. WAR 파일 배포하기

외부에서 컨테이너로 WAR 파일을 복사하여 배포할 수 있습니다:

 
bash
# 로컬에서 시놀로지로 WAR 파일 업로드하기 (별도 SCP 명령)
scp myapp.war admin@192.168.1.100:/tmp/

# 시놀로지에서 컨테이너로 WAR 파일 복사하기
sudo docker cp /tmp/myapp.war a1b2c3d4e5f6:/usr/local/tomcat/webapps/

 

 

이와 같이 SSH를 통해 시놀로지 NAS의 Docker 컨테이너에 접근하면, GUI에서는 제공하지 않는 고급 관리 및 문제 해결 작업을 수행할 수 있습니다. 특히 Tomcat 서버 설정 조정이나 로그 분석, 애플리케이션 배포 등의 작업을 효율적으로 처리할 수 있어 서버 관리자에게 필수적인 기술입니다.

+ Recent posts