sudo tail -f /var/log/squid/access.log Jupyter ノートブックのサーバ(Ubuntu 上)|金子邦彦研究室

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 のシステム更新を行うときは, 端末で次のコマンドを実行する。セキュリティ修正を適用するために定期的に実行する。

Ubuntu のインストールは別ページ »で説明

# パッケージリストの情報を更新
sudo apt update
# インストール済みのパッケージを包括的に更新 (依存関係も考慮)
sudo apt full-upgrade
# 変更をシステム全体に反映させるために再起動
sudo shutdown -r now

Jupyter ノートブックのサーバ(Ubuntu 上)

  1. インストール

    端末で次のコマンドを実行する。

    sudo apt update
    sudo apt -y install jupyter-notebook
    

    このコマンドで、Jupyter Notebook と依存パッケージがインストールされる。バージョンは次のコマンドで確認する。

    jupyter-notebook --version
    
  2. Jupyter 用のアカウントを作成し,そのアカウントでログイン

    サーバの実行には、管理者権限を持たない専用アカウントを使う。アカウントの作成は次のコマンドで行う。作成後、そのアカウントでログインして以降の作業を行う。

    sudo adduser jupyteruser
    
  3. パスワードの設定

    Web ブラウザからログインするためのパスワードを設定する。次のコマンドを実行し、パスワードを 2 回入力する。

    jupyter notebook password
    

    パスワードのハッシュ値が ~/.jupyter/jupyter_notebook_config.json に保存される。この方法で設定した場合、後述の設定ファイルにパスワードを書く必要はない。

  4. 設定ファイルの生成

    次のコマンドを実行する。~/.jupyter/jupyter_notebook_config.py が生成される。

    jupyter-notebook --generate-config
    
  5. ~/.jupyter/jupyter_notebook_config.py の設定

    生成された設定ファイルを編集し、次の行を追加または変更する。

    c.NotebookApp.ip = '127.0.0.1'
    c.NotebookApp.open_browser = False
    c.NotebookApp.port = 8888
    

    c.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
    
  6. 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
    
  7. 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 を用いる。