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:14 → FROM 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의 특정 디렉토리와 연동되도록 하여 데이터의 영속성과 접근성을 확보
Related Posts
Search