시그놀로지 나스에 웹서버를 띄우는 법을 알아보자.
그냥 검색을 통해서 봤을때는 쉬워보였는데 막상 해보니 처음이라 여기저기 막혔어서 기록을 남긴다.
기록용이니 처음부터 엄청 자세하게 남기지는 않겠다.
- ./:/home/node/app
이렇게 되어있을거다./home/node/app
를 입력해주자.로컬에서 터미널로 해당 docker 폴더에 접속이 가능하면
npm i
로 미리 모듈을 설치해주자.
예를 하나 들자면 로컬 포트 5000, 컨테이너 포트 8080일 경우
http://localhost:5000 로 접속 시 해당 요청은 NAS 디바이스의 로컬 포트 5000으로 전달되어 로컬 포트 5000에 할당된 서비스 또는 웹 관리자 페이지(여기서는 웹서버)로 연결된다. (방화벽 설정 필요)
동시에, 컨테이너 내에서 실행 중인 서비스는 컨테이너 포트 8080에 바인딩 되어있다.
만약 외부에서 NAS의 컨테이너 포트 8080으로 접속하려면, http://NAS_IP:8080과 같이 접속해야한다. (포트포워딩 필요)
테스트 결과 server.js에서 설정했던 포트는 컨테이너 포트가 바인딩 되면서 무시되는 거 같다.
나도 이 부분은 많이 테스트 해보지 않았기에 아직 개념이 확실치 않다.
그저 내가 이해한 부분을 기록했지만 혹여나 Docker를 잘 아는 누군가 이 글을 봤을 때 정리가 틀리다면 정정을 부탁드리겠습니다.
node /home/node/app/index.js
를 입력 후 적용서버 세팅 후 우리는 기존 세팅이 있어서 따로 포트포워딩이나 방화벽 설정을 하지않았고 서버에 접속도 확인을 하였다.
하지만 계속 에러가 난다.
크롬이 없단다. 찾아보니 따로 Docker 이미지에 설치를 해줘야한다고 한다.
아니 Dockerfile 설정은 알겠는데 이미 나스 도커에 올려논 웹에서 어떻게 수정하는데?
수 많은 검색을해도 나오지 않는다.
난 컨테이너 실행까지 도커 이미지를 따로 빌드 한 적도 커밋 한 적도 실행 한 적도 없는데 어떻게 Dockerfile만들어서 어떻게 하라고?
Docker도 NAS도 이번에 처음 다루다보니 진짜 지랄똥을 싸가며 해결했다.
bash
를 생성해준다.RUN apt-get update \
뭐 이런 명령어가 나오거나 ssh로 접속해서 수동으로 설치를 해야한다는 등 얘기가 나올텐데 그냥 저기 터미널에서 실행하면 된다...apt-get update
apt-get install -y --no-install-recommends udev chromium
순서대로 입력하여 설치해준다.스크린샷을 못 찍었지만 설치가 끝나고 나면 chromium 설치 경로가 '/usr/bin/chromium' 이런식으로 나올 것이다. 메모해두자!
이건 또 뭘까 launch가 실패했단다.
이것저것 찾아보니 puppeteer에 설치한 크롬 경로를 수동으로 알려줘야 한다고 나와있다.
그래서 위에서 chromium 경로를 메모해둬야 한거다.
const browser = await puppeteer.launch({
headless: 'new',
executablePath: '/usr/bin/chromium',
args: ['--no-sandbox', '--disabled-setupid-sandbox'],
});
executablePath
args
를 추가해주자.
해당 이슈에 관한 정보는 여기에 자세하게 나와있으니 확인할 사람을 확인하면된다.
이제 정상적으로 출력이 된다!
서버에 배포하면서 코드도 조금은 변했지만 중요 로직이 바뀐건 아니니 이 부분은 따로 포스팅하지는 않을 예정이지만 속도가 정말 매우매우매우 느려졌다 2배 정도?
그래서 해당 작업을 리팩토링 하고 그 결과를 포스팅하는 것을 마지막으로 해당 프로젝트는 종료하겠다.
도커나 시그놀로지 공식 문서 등의 기본적인 문서는 링크하지 않겠다.