Blog

NAS 내 파일업로드 애플리케이션의 특정 SSH에 종속된 세션 만료 문제 + Docker와 Host의 컨텍스트 인식 문제

Category
Author
citeFred
citeFred
PinOnMain
1 more property
NAS의 파일 시스템 접근 트러블슈팅
Table of Content

문제 인식

문제 상태 분석
개발PC에서 SSH로 NAS에 접근(특정 계정의 세션 ex)citefred 유저로 SSH세션 생성됨)
파일업로드 관련 애플리케이션 실행(npm run start) - 해당 유저의 세션에서 실행되고 있음
개발PC의 SSH로 접속한 터미널을 종료 또는 만료로 종료 되면 NAS에서도 해당 세션을 종료 시키면서 파일업로드 애플리케이션도 함께 종료됨

해결 방안 탐색

특정 유저가 로그인하는 방식의 SSH 세션은 결국 해당 접속을 종료하면 세션이 종료되면서 관련 프로세스가 모두 종료됨
따라서, NAS가 계속하여 실행되는 root 유저로 접근하면 해결 할 수 있지만 root계정으로 터미널에 접근하는 것을 개방하는 것은 위험성이 있음
NAS 자체에서 제공하는 Docker를 통해 실행하면 root에서 실행하는것이므로 지속적인 프로세스를 유지 할 수 있음

문제 해결 과정

Docker를 활용하기 위한 순서
해당 파일업로드 API 서버를 Docker 이미지로 빌드하기 위한 dockerfile 작성
Dockerhub에 로그인 및 개발PC에서의 도커 로그인상태 확인
Dockerhub 를 통해 원격 저장소에 이미지 빌드 + 업로드
dockerfile에 작성한 node 버전의 문제
FROM node:14FROM node:18 로 변경
도커 이미지 빌드 완료
dockerhub로 해당 이미지 push
dockerhub의 원격리포지토리에 업로드된 이미지
NAS 도커에서 URL을 통해 해당 프로젝트 이미지 임포트
NAS 내 3000포트와 해당 이미지가 실행될 3000포트를 맵핑하는 컨테이너 생성

추가적인 문제의 발생

해당 프로젝트는 이제 Docker 가상환경 내에서 작동하기 때문에 상대경로로는 해당 컴퓨터의 정확한 video라는 폴더에 접근 할 수 없었다.
공유폴더로 지정하고있는 video의 절대경로를 입력하여 정확한 공유폴더로 찾아 갈 수 있도록 지정
컨테이너 설정에서 컨테이너 볼륨을 공유폴더와 맵핑하는 부분이 있는것으로 보아 이부분에서도 해결 가능 할 것으로 보인다.
우선 파일 업로드 요청은 정상적으로 실행되고 서버 로그에서도 파일 업로드가 정상적으로 진행되고 있는데, 해당 파일의 위치를 찾아야한다.
여전히 파일의 경로를 찾을 수 없다. 이것은 도커 가상컨테이너 안의 폴더와, 실제 NAS 컴퓨터의 폴더 경로와 다른것 때문인데 위 사진 중 컨테이너의 가상 환경 내 폴더와 NAS컴퓨터의 실제 폴더를 맵핑하는 부분으로 해결해보고자 한다.
이 부분이 해당 폴더 경로를 해결 할 수 있는 부분이다.
외부(NAS)의 video라는 폴더를 대상으로 선택한다
컨테이너(Docker내 가상환경)의 폴더를 선택한다. 해당 파일서버는 프로젝트가 실행되는 컨테이너 환경을 기준으로 root경로를 참조하고 있기 때문에 컨테이너안의 var/service/video라고 절대 경로를 설정한 부분에 파일이 생성된다.
이 두개의 폴더를 맵핑시켜 컨테이너가 NAS의 video라는 폴더를 해당 경로로 인식하게 된다.
다시 테스트를 통해서 NAS의 폴더에 접근하는지 확인
실제 여러 파일들이 테스트로 진행된 목록이 나타나는 것을 확인 할 수 있다. 다시 업로드가 정상적으로 되는지 IMG.. 라는 파일을 업로드
해당 이미지 파일 또한 정상적으로 추가되었으며
NAS의 공유폴더에서도 직접 확인이 가능하다.
또한 웹서버의 정적파일 서빙으로 해당 폴더가 접근되고 있으므로, 다음과 같이 해당 파일을 정상적으로 URL만으로 접근하게 된다.
고려할 점
현재까지 테스트로 진행된 video파일에 대한 업로드는 다음처럼 퍼블릭으로 공개되는 배포까지 과정을 가지게 되지만
사용자의 프로필 사진, 기타 개인 파일은 업로드 경로는 파일서버는 접근이 가능해도 공개로 배포되는 웹서버에서는 접근하지 못하도록 구성해야 한다.

문제 해결 결과

Docker와 NAS의 파일 시스템은 서로 다른 컨텍스트에서 작동하며, 이로 인해 경로와 데이터 접근 방식에 차이가 발생하는 문제였음. 필요한 경우 볼륨을 마운트하여 호스트와 컨테이너 간의 데이터 공유를 설정함으로써 이러한 문제를 해결
SSH로 NAS에 접근하여 실행한 파일 업로드 애플리케이션이 터미널 세션 종료에 따라 함께 종료되는 문제를 인식
이를 해결하기 위해 root 계정으로의 직접 접근은 피하고, 대신 Docker를 활용하여 애플리케이션을 독립적으로 실행함으로써 지속적인 프로세스를 유지할 수 있음을 확인
Docker는 애플리케이션을 격리된 환경에서 관리할 수 있도록 하여, 시스템 재부팅이나 세션 종료에도 영향을 받지 않도록 추가 설정 필요
파일 경로 문제 해결:
NAS와 Docker 컨테이너 간의 파일 경로 문제를 인식하고, 볼륨 마운트를 통해 호스트와 컨테이너 간의 데이터 공유를 설정
이를 통해 컨테이너 내에서 파일을 생성하고 수정할 때, NAS의 특정 디렉토리와 연동되도록 하여 데이터의 영속성과 접근성을 확보
Search
 | Main Page | Category |  Tags | About Me | Contact | Portfolio