case-kの備忘録

日々の備忘録です。データ分析とか基盤系に興味あります。

入門記事:GCE (Google Compute Engine) で作るJupyter分析環境

Google Compute Engine(GCE)にJupyterで必要最低限の分析環境を作る入門者向けの記事です。

code

github.com

インスタンス構築(GCE)

GCPコンソール画面のメニュータブより「VM インスタンス」を選び、「インスタンスを作成」をクリックして下さい。環境設定画面が起動するので、以下の情報を入力し、作成ボタンをクリックして下さい。コンソール上で、作れたのが確認できたら「開始」をクリックし起動して下さい。

「名前」:インスタンス名
「リージョン」:asia-northeast1 (東京)
マシンタイプ:メモリやCPUの調整が可能です。
(データサイズに応じて選んで下さい)

IP制限の設定

インスタンスの構築ができたら、次はIPアドレスの範囲を制限します。メニュータブより「VPCネットワーク」を選択し、「ファイアウォール ルール」を選んで下さい。「ファイアウォール ルールを作成」をクリックし、以下の情報を入力し、作成ボタンをクリックして下さい。

「ターゲット」:ネットワーク上のすべてのインスタンス
「ソース IP の範囲」:PCで繋いでるグローバルIP

繋いでるグローバルIPアドレスはこちらのサイトより調べることができます。
https://www.cman.jp/network/support/go_access.cgi

Dockerインストール

DockerでJupyter環境を作ります。「VM インスタンス」画面より、「SSH」を選び、
インスタンスSSHで接続して下さい。まずは、インスタンスのOSを確認し、公式サイトに従ってDockerをインストールします。
docs.docker.com
※ インスタンスを作る時にOSを選べます。デフォルトではDebianです。

$ cat /proc/version 
Linux version 4.9.0-9-amd64 (debian-kernel@lists.debian.org) (gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1) ) #1 SMP Debian 4.9.168-1+deb9u3 (2019-06-16)
$ sudo apt-get update
Fetched 1,405 kB in 1s (1,093 kB/s)
Reading package lists... Done

$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg2 \
    software-properties-common

$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

$ sudo apt-key fingerprint 0EBFCD88

$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/debian \
   $(lsb_release -cs) \
   stable"
$ sudo apt-get update

$ sudo apt-get install docker-ce docker-ce-cli containerd.io

インストールできたか確認します。

$ docker
Usage:  docker [OPTIONS] COMMAND

Jupyter環境構築(Docker)

Dockerイメージを取得しコンテナを起動します。

$ sudo docker pull jupyter/datascience-notebook
$ sudo docker images jupyter/datascience-notebook
#  sudo docker run -d --name notebook -v /home/data:/home/jovyan/ -p 8888:8888 jupyter/datascience-notebook
$ sudo docker run -d --name notebook -p 8888:8888 jupyter/datascience-notebook
b9c5abc33f3c3086a1c0fda9277440af3d27cd9d2e8e49b13572e173d396ec9b

http://35.225.163.211:8888/login?next=%2Ftree%3F

トークンが必要なので、立ち上げたJupyterのコンテナに入ります。まず、コンテナIDを確認

$ sudo docker ps -a
CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS              PORTS                    NAMES
b9c5abc33f3c        jupyter/datascience-notebook   "tini -g -- start-no…"   5 minutes ago       Up 5 minutes        0.0.0.0:8888->8888/tcp   notebook

コンテナに入り、トークンを確認します。

$ sudo docker exec -it b9c5abc33f3c /bin/bash
jovyan@b9c5abc33f3c:~$ jupyter notebook list
Currently running servers:
http://0.0.0.0:8888/?token=4584bd118870b3a0f7b7598718e5cbe23fde46be711a1f29 :: /home/jovyan

トークンが確認できました。ブラウザで確認してみます。IPアドレスインスタンスIPアドレスに置き換えて下さい。
VMインスタンスコンソールよりIPアドレスは確認できます。
http://35.225.163.211:8888/?token=4584bd118870b3a0f7b7598718e5cbe23fde46be711a1f29
f:id:casekblog:20190629161413p:plain


ブラウザで確認できました〜。

Jupyter環境構築(Dockerを使わない)

Dockerを使わない方法も書いておきます。まず、デフォルトではPython2系が使われていますのでPython3系に切り替えます。
(DataFlowでPython2系使いたい時とかDocker使わない方法選んでもいいかも)

$ python --version
Python 2.7.13

3系に切り替えるために、pyenvを使います。
www.case-k.jp

$ sudo apt-get install git
$ git clone git://github.com/yyuu/pyenv.git ~/.pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile
$ sudo apt install  bzip2 -y
Reading package lists... Done

pyenvでインストール可能なパッケージを確認し、最新のパッケージをインストールします。今回はminicondaをインストールします。

$ pyenv install --list
$ pyenv install miniconda3-4.3.30
Downloading Miniconda3-4.3.30-Linux-x86_64.sh...
$ pyenv global miniconda3-4.3.30

バージョンが切り替わったか確認します。

$ python --version
Python 3.6.3 :: Anaconda, Inc.

Jupyterをインストールします。

$ pip install jupyter

ブラウザからアクセスできるよう、インスタンスIPアドレスを設定します。

$jupyter notebook --generate-config
$ sudo vi ~/.jupyter/jupyter_notebook_config.py 

変更前:
#c.NotebookApp.ip = 'localhost'
変更後:
c.NotebookApp.ip = '0.0.0.0'

起動します。

$ jupyter notebook
http://(tmp or 127.0.0.1):8888/?token=9858cf5ae70614d06f5d513cbf5f604514d4b1bff4722a9c

インスタンスのIPに書き換えてブラウザで確認して下さい。

# http://35.225.163.211:8888/tree

f:id:casekblog:20190629161815p:plain


Python 2系

$ sudo curl -kL https://bootstrap.pypa.io/get-pip.py | sudo python
$ sudo pip install jupyter
$jupyter notebook --generate-config
$ sudo vi ~/.jupyter/jupyter_notebook_config.py 
$ jupyter notebook

こちらも問題なさそうです。