Raspberry Pi 3 64bit OS openSUSE: Nginx, Node JS, Jupyter
Raspberry Pi 3 64bit OS openSUSE 는 이글은 5개 글타래로 구성되며, openSUSE 설치, 개발도구 구성 및 서버 구축 사용에 대해 작성한다.
Opensuse 에서 Raspberry Pi 3를 위한 64bit OS openSESE Leap 42.2 을 제공하고 있다.
- Install 64bit openSUSE Leap 42.3 / JeOS
- openSUSE: Managing Service daemon
- openSUSE: Basic OS Security for Server
- Install & Configuration - Nginx, Node JS, Jupyter
- Build MongoDB 3.4.x
Nginx, Node JS, Jupyter Notebook
- Raspberry Pi 3
- openSUSE LEAP 42.2 / JeOS
Target services
- Nginx
- Nginx Proxy
- www app : nodejs (PORT 50000)
- jupyter notebook: PORT 8585
- Node.js with nvm
- Python and virtualenv, jupyter notebook
nginx
nginx는 1.8 버전으로 당연히 사용하던 데비안 계열과 설정 파일 구성이 조금 다르다.
- nginx 사용자: nginx
- /etc/nginx/nginx.conf 가 sites-_ 폴더가 아닌 vhost_ 폴더를 가르킨다.
- 여기서는 sites-* 폴더를 그대로 사용한다.
- 기존 데비안 계열 형식
sites-*폴더를 사용하고 사용자먄nginx사용.
설치
zypper 로 nginx 배포본을 설치한다. 현재는 1.8.1-10.5.1 버전이다.
설치하면 사용자 nginx:nginx 가 추가된다.
nginx.conf
nginx 설정은 Nginx - Install, WebDAV, Proxy on Ubuntu/Debian 에 설명되어 있다. 이 구성을 기초로 우분투/데비안 계열 같이 site-* 폴더를 구성해서 사용한다.
nginx.conf 에 include 지시자를 사용해 sites-enabled 를 추가한다.
그리고 sites-available, sites-enabled 폴더를 생성하고 사이트 파일을 만든다.
my-site 가상호스트 파일은 [my-site](/2017/04/03/ubuntu-nginx#my-site) 내용의 파일을 site-available 에 작성하고, 그 링크를 site-enabled에 링크를 걸어 준다.
### node.js
nvm을 설치한다.
Node.js 설치와 개발환경 설치에 대해서는 NodeJS / nvm 기반 개발환경 설치 글을 참조할 수 있다.
node.js 설치
최신 v8 버전을 설치한다.
1 | > nvm install v8 |
pm2 설치
node.js 앱을 시스템 서비스로 등록하기 위해서 pm2 를 설치한다.
예를 들어 express 앱이 있으면 다음 같이 pm2로 시작한다.
pm2 startup
startup 시 pm2 start 로 생성되는 .pm2 디렉토리의 pid 와 app.js 파일을 실행해 준다.
pm2 startup systemd 로 스타트를 하면 2개의 프로세스가 만들어 진다.
방법은,,,
- 먼저 앱을 시작해 둔다.
- dump를 생성한다.
pm2로 현재 실행중인 프로세스 정보를 save로 덤프하게 저장한다. systemd 서비스 스크립을 작성하는데 유용하다.
- pm2 startup 명령
pm2 startup 명령은 pm2로 실행중인 프로세스를 systemd 서비스 유니트 파일로 제어 할 수 있다. 명령을 실행하면 sudo 명령으로 실행할 수 있는 스크립을 출력해 준다.
1 | $ pm2 startup systemd |
이 스크립을 실행해 주면 pm2-foo.service 서비스 유니 파일이 생성된다.
이 서비스 파일을 활성화하고 시작해준다.
이제 시스템을 재시작해도 pm2 로 실행중인 프로세스는 자동으로 시작된다.
### Python
Python 개발 환경을 virtualenv 를 이용해서 구성하고, jupyter 를 설치한다. 그리고 시스템 시작 스크립으로 자동으로 시작하는 jupyter notebook 환경 구성까지 진행한다.
python3 설치
openSUSE에 python2.7 만 설치되어 있어서, python3 를 설치한다. 다른 버전을 설치하면 openSUSE에서는 자동으로 update-alternatives로 pip를 등록해준다.
1 | sudo zypper in python3 |
개발자 패키지 설치
jupyter 등 개발, 서버 개발에 필요한 시스템 개발도구를 설치한다.
파이썬 개발과 패키지등에서 필요한 파이썬 헤더를 설치한다.
jupyter에서 필요한 zmq 라이브러리를 설치한다.
- libzmq3 : jupyter 에서 필요
- libgdal : geospatial analysis with geopandas.
openSUSE 에서는 curses 관련 파이썬 모듈을 설치해야 한다.
- python-curses: Python이 (N)Curses Libr에 대한 인터페이스이다
virtualenv
pip 로 user scheme 에서 설치했다.
Scientific 과 Pandas 개발환경
사용하려는 Python 버전에 따라 혹은 모두 아래 과학계산용 모듈을 시스템 패키지로 설치한다.
1 | sudo zypper in python-decorator python-numpy python-scipy python-matplotlib |
라즈베피라이, 오드로이드 등 환경에서 pip로 위 모듈을 설치시 시간이 많이 걸린다.
pip install –user pandas decorator numpy scipy matplotlib sympy nose
그래서 시스템 패키지로 설치했다.
겨로가적으로 앞선 scipy, matplotlib 설치하며 아래 모듈이 의존성에 따라 함게 설치된다.
Jupyter Notebook
Jupyter notebook 으로 파이선, typescript, javascript, c/c++ 등의 IDE 역할을 할 수 있다. 도한 Markdown 을 지원해서 문서화에도 휼륭한 플랫폼이다.
jupyter 가상환경 만들기
mkvirtualenv 명령으로 jupyter 라는 가상환경을 만드는데, 과학계산용 라이브러리를 시스템 패키지로 설치했으므로 여기서는 가상환경 생성시 시스템 패키지를 함께 참조하도록 생성한다.
가상환경에서 파이썬 버전을 확인하고 과학계산 개발 등에 필요한 라이브러리가 설치됐는지 확인하자.
필수 모듈이 설치되고 사용이 가능한지 확인한다. 버전 정보가 출력되면 관련 라이브러리가 제대로 설치되었고 가상환경에서 잘 접근되는 것이다. 다음 두 모듈이 없으면 jupyter 설치가 제대로 안된다.
설치가 안되었으면 앞의 파이썬 개발자 패키지 설치 단락을 확인한다.
그리고 Jupyter 가상환경에서 pip 로 Jupyter를 설치한다.
주피커 노트북 파일이 저장되는 위치가 iPython 디렉토리라고 하면 아래 같이 시작할 수 있다.
옵션은
--no-browser: 로컬 브라우저는 시작하지 않는다.--ip: 접속 가능*는 모든 곳에서 접근 가능--port:
이런 시작 구성을 설정 파일을 이용해서 저장할 수 있고 이 파일을 이용해서 시작하는 것을 권장한다.
Jupyter 설정 파일 이용
사용자 JUPYTER_DATA_DIR 인 홈 디렉토리 밑 ~/.jupyter 에 설정 파일을 구성해야 한다.
1 | (jupyter)$ jupyter notebook --generate-config |
systemd
jupyter notebook을 시스템 서비스로 등록해 보자. jupyter.service라는 시스템 서비스 파일을 /etc/systemd/system/jupyter.service 에 생성하고 아래 내용을 입력한다.
1 | [Unit] |
그리고 이 시스템 서비스 파이을 활성화하고 시작한다.
1 | sudo systemctl enable jupyter.service |
Typescript kernel
jupyter notebook에서 Typescript 을 작성하고 컴파일한 결과를 확인할 수 있다.
먼저 Nodejs용 itypescript 모듈을 global로 설치한다.
its 명령으로 Jupyter kenel로 설치해 준다.
Jupyter-notebook Nginx 설정
Jupyter-notebook 을 nginx 뒤에서 실행시 아래 같은 동작이 반복적으로 보이이면
1 | [I 19:26:48.843 NotebookApp] Adapting to protocol v5.1 for kernel 97e659cd-0509-4f56-878e-10e2c31803e2 |
jupyter-notebook-keeps-reconnecting 설명 처럼 nginx proxy 에서 http 버전을 명시해 준다.
If you are using jupyter behind a nginx proxy, this post may be effective.
Add this line to nginx conf.
http_proxy_module 에 따르면 keepalive 를 사용하기 위해서 1.1 버전을 꼭 사용해야 할 것 같다.
Sets the HTTP protocol version for proxying. By default, version 1.0 is used. Version 1.1 is recommended for use with keepalive connections and NTLM authentication.
참조용 jupyter-notebook conf
1 | upstream my-notebook-workhorse { |
참조
Raspberry Pi 3 64bit OS openSUSE: Nginx, Node JS, Jupyter
https://thinkbee.github.io/opensuse-jeos-nginxjupyter-de42d79d18f3/