Jupyter ノートブックのサーバ(Ubuntu 上)
Ubuntu 24.04 LTS に Jupyter Notebook のサーバを構築する。APT でのインストール、パスワードの設定、設定ファイルでの IP アドレスとポート番号の指定、起動方法を説明する。あわせて、外部公開時のリスクと、SSH ポート転送を用いたアクセス方法を示す。
Ubuntu 24.04 LTS の jupyter-notebook パッケージのバージョンは 6.4.12 である。このバージョンの設定項目名は c.NotebookApp.*、設定ファイル名は jupyter_notebook_config.py である。
前準備
Ubuntu のシステム更新
Ubuntu で OS のシステム更新を行うときは, 端末で次のコマンドを実行する。セキュリティ修正を適用するために定期的に実行する。
# パッケージリストの情報を更新
sudo apt update
# インストール済みのパッケージを包括的に更新 (依存関係も考慮)
sudo apt full-upgrade
# 変更をシステム全体に反映させるために再起動
sudo shutdown -r now
Jupyter ノートブックのサーバ(Ubuntu 上)
- インストール
端末で次のコマンドを実行する。
sudo apt update sudo apt -y install jupyter-notebookこのコマンドで、Jupyter Notebook と依存パッケージがインストールされる。バージョンは次のコマンドで確認する。
jupyter-notebook --version - Jupyter 用のアカウントを作成し,そのアカウントでログイン
サーバの実行には、管理者権限を持たない専用アカウントを使う。アカウントの作成は次のコマンドで行う。作成後、そのアカウントでログインして以降の作業を行う。
sudo adduser jupyteruser - パスワードの設定
Web ブラウザからログインするためのパスワードを設定する。次のコマンドを実行し、パスワードを 2 回入力する。
jupyter notebook passwordパスワードのハッシュ値が
~/.jupyter/jupyter_notebook_config.jsonに保存される。この方法で設定した場合、後述の設定ファイルにパスワードを書く必要はない。 - 設定ファイルの生成
次のコマンドを実行する。
~/.jupyter/jupyter_notebook_config.pyが生成される。jupyter-notebook --generate-config ~/.jupyter/jupyter_notebook_config.pyの設定生成された設定ファイルを編集し、次の行を追加または変更する。
c.NotebookApp.ip = '127.0.0.1' c.NotebookApp.open_browser = False c.NotebookApp.port = 8888c.NotebookApp.ip = '127.0.0.1'は、同じマシン内からの接続のみを受け付ける設定である。別のマシンから使う場合は、次の「SSHポート転送を用いた接続」の方法を用いる。c.NotebookApp.ip = '0.0.0.0'と設定すると、すべてのネットワークインターフェースで接続を受け付ける。この場合、通信内容とパスワードが暗号化されないまま流れるため、HTTPSの設定を行う。証明書と秘密鍵のファイルを指定する設定は次の通りである。c.NotebookApp.ip = '0.0.0.0' c.NotebookApp.certfile = '/home/jupyteruser/.jupyter/cert.pem' c.NotebookApp.keyfile = '/home/jupyteruser/.jupyter/key.pem'自己署名証明書は次のコマンドで作成できる。Web ブラウザには警告が表示される。
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ~/.jupyter/key.pem -out ~/.jupyter/cert.pem chmod 600 ~/.jupyter/key.pem- Jupyter ノートブックのサーバを起動
次のコマンドで起動する。
nohupにより、端末を閉じても動作を続ける。nohup jupyter-notebook &起動時のメッセージは
nohup.outに記録される。次のコマンドで確認する。cat nohup.outメッセージ中に、待ち受けている URL とポート番号が次の形式で表示される。設定したポートが使用中の場合は別のポートが使われるため、表示された番号を確認する。
http://127.0.0.1:8888/待ち受け状態は次のコマンドでも確認できる。
ss -lntp | grep 8888サーバを停止するときは次のコマンドを実行する。
pkill -f jupyter-notebook - OS 起動時に自動で開始する設定(systemd)
継続して運用する場合は、systemd のサービスとして登録する。
/etc/systemd/system/jupyter.serviceを次の内容で作成する。[Unit] Description=Jupyter Notebook After=network.target [Service] Type=simple User=jupyteruser WorkingDirectory=/home/jupyteruser ExecStart=/usr/bin/jupyter-notebook Restart=on-failure [Install] WantedBy=multi-user.target次のコマンドで有効化と起動を行い、状態を確認する。
sudo systemctl daemon-reload sudo systemctl enable --now jupyter sudo systemctl status jupyter
SSH ポート転送を用いた接続
別のマシンから使う場合は、クライアント側のマシンで次のコマンドを実行する。SSH の通信路を経由するため、Jupyter のポートをファイアウォールで開放する必要がない。
ssh -N -L 8888:127.0.0.1:8888 jupyteruser@[サーバのIPアドレスまたはホスト名]
接続したまま、クライアント側の Web ブラウザで http://127.0.0.1:8888/ を開き、設定したパスワードを入力する。
ポートを直接公開する場合の設定
c.NotebookApp.ip = '0.0.0.0' を設定してポートを直接公開する場合は、ファイアウォール(ufw)でポートを開放する。次の例は、特定のネットワークからの接続のみを許可する設定である。
sudo ufw allow from XXX.YYY.ZZZ.0/24 to any port 8888 proto tcp
Web ブラウザからは https://[サーバのIPアドレスまたはホスト名]:8888/ の形式で接続する。HTTPS を設定していない場合は http:// となる。
複数のユーザで使用する場合は、ユーザごとのサーバ起動と認証を管理する JupyterHub を用いる。