jupyter notebookをリモートサーバ(CentOS)に構築
やりたいこと
- 会社のあれやこれやをPythonでやりたい
- GitLabを操作(issue集計したり投稿したり)
- 利用する人はエンジニアの他、開発環境ない人も使用する(マネージャーとか管理系の人)
- 今回はAnacondaというライブラリ集を使用する
OS Version
[root@XXX ~]# cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)
Anacondaのインストール
AnacodaのInstallerダウンロード
- バージョン指定する場合はレポジトリから選択可。
[root@XXX tmp]# cd /tmp
[root@XXX tmp]# curl https://repo.anaconda.com/archive/Anaconda3-5.3.1-Linux-x86_64.sh -O
Install
[root@XXX tmp]# bash ./Anaconda3-5.3.1-Linux-x86_64.sh
-- 対話形式 以下抜粋
Please, press ENTER to continue
>>> *Enterおす
Do you approve the license terms? [yes|no]
>>>yes
Anaconda3 will now be installed into this location:
/root/anaconda3
- Press ENTER to confirm the location
- Press CTRL-C to abort the installation
- Or specify a different location below
[/root/anaconda3] >>> *Enterおす
Do you wish the installer to initialize Anaconda3
in your /root/.bashrc ? [yes|no]
[no] >>> yes
bashrc読み込み
[root@XXX tmp]# source ~/.bashrc
AnacondaのVersion確認
[root@XXX tmp]# anaconda -V
anaconda Command line client (version 1.7.2)
jupyterのインストール
- Anaconda入れた時点で既にjupyterに入っている
- ローカルだけで使用する場合は、Pathまで確認したらいきなり起動確認してOK
jupyterのVesion確認
[root@XXX tmp]# jupyter --version
4.4.0
Path確認
[root@XXX tmp]# jupyter --path
config:
/root/.jupyter
/root/anaconda3/etc/jupyter
/usr/local/etc/jupyter
/etc/jupyter
data:
/root/.local/share/jupyter
/root/anaconda3/share/jupyter
/usr/local/share/jupyter
/usr/share/jupyter
runtime:
/run/user/0/jupyter
ローカル以外のPCからのアクセスを許可(任意)
- 不安な場合は特定のipだけ許容する設定にしましょう
- 後述のConfigファイル作成時に設定可能です
ipythonでpasswd設定
-
ブラウザからアクセスしたときにパスワード聞いてくれるようになる
-
passwordを対話形式でハッシュ化してくれるPytnonのライブラリ
[root@XXX ~]# ipython
Python 3.7.0 (default, Jun 28 2018, 13:15:42)
Type 'copyright', 'credits' or 'license' for more information
IPython 6.5.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]: from notebook.auth import passwd
In [2]: passwd()
Enter password:
Verify password:
Out[2]: 'sha1:8e9f3XXXXXXXXXXXXXXXXXXXXXXXX'
In [3]: exit
configファイル作成
- cmdで作るけど中身はコメントアウトされており、何も設定していなければデフォルトで動く(はず)
- 中身多いので簡潔な設定ファイルにしたいなら、下記のパス・ファイルを
touch
で作って設定手書きしてもいい
[root@XXX tmp]# jupyter notebook --generate-config
Writing default config to: /root/.jupyter/jupyter_notebook_config.py
configファイル設定
-
/root/.jupyter/jupyter_notebook_config.py
に以下を記載
c = get_config()
c.NotebookApp.ip = '*'
c.NotebookApp.open_browser = False
c.NotebookApp.port = 8888 #Defalt
c.NotebookApp.password = u'sha1:8e9f3XXXXXXXXXXXXXXXXXXXXXXXX'
c.NotebookApp.notebook_dir = '/root/jupyter_files/'
ポート開放
- これと
jupyter_notebook_config.py
に書いた内容
[root@XXX ~]# firewall-cmd --add-port=8888/tcp --zone=public --permanent
success
[root@XXX ~]# firewall-cmd --add-service=http --zone=public --permanent
success
[root@XXX ~]# firewall-cmd --reload
success
[root@XXX ~]# firewall-cmd --list-ports --zone=public
8888/tcp
起動確認
-
jupyter notebook
と唱えれば完了
[root@XXX ~]# jupyter notebook
# rootでログインしている場合は↓のオプション必要です
[root@XXX ~]# jupyter notebook --allow-root
[I 10:17:31.193 NotebookApp] JupyterLab extension loaded from /root/anaconda3/lib/python3.7/site-packages/jupyterlab
[I 10:17:31.194 NotebookApp] JupyterLab application directory is /root/anaconda3/share/jupyter/lab
[I 10:17:31.196 NotebookApp] Serving notebooks from local directory: /root/jupyter_files
[I 10:17:31.197 NotebookApp] The Jupyter Notebook is running at:
[I 10:17:31.197 NotebookApp] http://${hostname} or 127.0.0.1):8888/
- 他のホストからの接続が許容されていない場合は
localhost
と表示されるのでTypoとか疑う(戒め)- 「jupyter_notebook_config.py」内の
c.NotebookApp.ip = '*'
がc.NoebookApp.ip = '*'
になっていたりするかもしれない
- 「jupyter_notebook_config.py」内の
[I 10:17:31.197 NotebookApp] The Jupyter Notebook is running at:
[I 10:17:31.197 NotebookApp] http://localhost:8888/
サービス登録
- このままだとコンソール閉じたり
Ctrl+C
したらjupyterも終了するのでサービスとして実行するようにする
Unit定義ファイル作成
[root@XXX ~]# touch /etc/systemd/system/notebook.service
Unit定義ファイル編集
[root@XXX ~]# vi /etc/systemd/system/notebook.service
-
ExecStart
のコマンドは、rootの場合はオプション必要- 詳細は上述の起動確認部を参照
[Unit]
Description = Jupyter Notebook
[Service]
Type=simple
PIDFile=/var/run/jupyter-notebook.pid
ExecStart=/root/anaconda3/bin/jupyter notebook # `$ which jupyter` で確認
WorkingDirectory=/root #Anacondaを導入したユーザーのホームディレクトリ(ログイン直後に `$pwd`)
User=root #Anacondaを導入したユーザー名 `$ id`
Group=root #Anacondaを導入したユーザーの所属するグループ名
Restart=always
[Install]
WantedBy = multi-user.target
Unitが登録されているか確認
[root@XXX ~]# $ systemctl list-unit-files --type=service
サービスとして起動
# 起動
[root@XXX ~]# systemctl start notebook
# 起動確認
[root@XXX ~]# systemctl status notebook
# 起動時に自動開始するよう設定
[root@XXX ~]# systemctl enable notebook