Synology NAS 도커(docker)에서 python 데몬 실행하기

개요

python 코드로 만든 프로그램을 daemon 형태로 실행하고자 할 때 Synology NAS의 docker 기능을 이용하면 매우 편하고 간단히 운영할 수 있다.

특히 docker 지식이 거의 없어도 UI로 전체 과정을 진행할 수 있다.

도커(docker) 패키지 설정

docker UI의 이미지 메뉴에서 python 3.8.12-alpine 이미지를 설치한다.

이 때 도커 이미지의 버전과 종류가 매우 다양한데, 버전은 최신 버전으로 변경해도 되는데 “-alpine” 패키지가 다른 종류에 비해 도커 이미지의 용량이 가장 작으므로 먼저 이것을 설치해본다.

혹시 pip 설치 오류가 발생시에는 다른 패키지를 변경해야하는데, 이 때에는 그 다음으로 용량이 작은 “-slim” 패키지를 이용하면 된다.

최근에 ChatGPT API를 이용한 데모 프로그램을 이 방식으로 설치하다가 langchain 모듈 설치가 “-alpine” 패키지에서 안되어서 “-slim” 패키지로 변경해서 성공한적이 있음

그리고 NAS에서 적당히 공유 폴더 아래에 다음과 같은 폴더와 관련 파일들을 복사한다.

이 때 모듈 설치용 requirements.txt를 만들어서 복사한다.

/volume1/docker_model/beyondcctv/event_server_multi.py
/volume1/docker_model/beyondcctv/requirements.txt

docker에 익숙하다면 지금 상태에서 아래 명령으로 실행이 가능하지만, 운영을 편하게 하기 위해서는 UI를 이용해서 실행을 시키는것이 좋다.

sudo docker run -p 9999:9999 -v /volume1/docker_model/beyondcctv:/app \
					 -it 3.8.12-alpine bash -c 'pip3 install -r /app/requirements.txt && python3 /app/event_server_multi.py'

도커 컨테이너 생성 및 실행 하기

이미지 메뉴에서 python 3.8.12-alpine 이미지를 실행하고 컨테이너 이름에 다음과 같이 입력함

고급 설정을 누르고 자동 재시작 활성화 체크한다.

다음 탭의 볼륨에 대해 연동 설정한다.

“파일/폴더”는 NAS 장비의 경로라서 자기한테 맞게 수정하면 되고, 마운트 경로는 도커 안의 경로 이므로 python 코드에서 접근 가능하도록 입력한다. python 코드에서 로컬 경로를 따로 이용하지 않으면 아래와 같이 설정한다.

다음 포트 설정도 수행한다. 로컬 포트는 NAS에서 오픈할 포트이므로 실제로 서비스에 이용할 포트이고, 컨테이너 포트는 Docker에서 오픈할 포트이므로 python 코드에서 설정한 포트를 입력하면된다.

이제 설정이 거의다 되었고, 마지막 “환경” 탭에서 명령 부분에 다음을 입력하고 적용을 누름
(alpine 도커 이미지는 bash 대신 bin/sh 로 실행)

bin/sh -c 'pip3 install -r /app/requirements.txt && python3 /app/event_server_multi.py'

문제없이 실행이 되면 다음과 같이 컨테이너 메뉴에서 확인이 가능하다.

로그 확인 및 코드 수정 반영 방법

실행이 제대로 안되거나 결과 확인을 위해서 로그 확인이 필요하다

컨테이너 메뉴에서 “세부 사항” > “로그” 탭을 열면 아래와 같이 날짜별 로그를 확인할 수 있다.

그리고 python 코드를 수정해서 반영해야 하는 경우는 위의 컨테이너 메뉴에서 해당 컨테이너를 중지했다가 다시 시작하면 수정된 코드가 반영되어서 실행된다.

그리고 매번 컨테이너를 실행할 때 마다 requirements.txt에 등록된 모듈을 먼저 설치한다.

Leave a Comment