0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AzureVMのDockerコンテナ内にJupyterhub環境を構築してみた

Posted at

はじめに

Azure VM上で、Dockerコンテナ内にJupyterHubを構築する手順をまとめています。 もちろんUbuntuのバージョンが古くため、需要はほぼないとは思っていますが、自身の忘備録として公開しました。

参考

以下のブログを参考にさせていただき、部分的にカスタマイズしています。

参考1

参考2

参考3

環境

cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.6 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.6 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
$ docker --version
Docker version 26.1.3, build b72abbb

また、コンテナ内にはデフォルトでsudoがインストールされていないことを考慮しています。

1. Dockerコンテナの起動

まず、JupyterHubの公式イメージを使用してDockerコンテナを起動します。

docker run -it -p 7000:7000 --name jupyterhub-dev jupyterhub/jupyterhub bash

このコマンドは、jupyterhub-devという名前のコンテナを起動し、ホストのポート7000をコンテナのポート7000にマッピングします。

2. コンテナ内での基本的なパッケージのインストール

コンテナ内で必要なパッケージをインストールします。

apt update && apt upgrade -y
apt install -y software-properties-common
add-apt-repository ppa:deadsnakes/ppa
apt install -y python3 python3-pip npm nodejs vim git iputils-ping net-tools wget curl python3-dev python3-venv python3-pycurl build-essential cmake clang libaio1 libffi-dev libfreetype-dev libpq-dev nano
apt install -y --no-install-recommends fonts-noto-cjk
apt autoremove -y && apt clean && rm -rf /var/lib/apt/lists/*
pip install configurable-http-proxy

これにより、Python 3やNode.js、開発ツールなどがインストールされます。
実は、筆者の仮想マシンのコンテナ内では、curlとwgetコマンドによる configurable-http-proxyのインストールができなかったので、pipでインストールしています。

上記コマンドによりインストールされるpythonバージョンは3.10.12です。

python -V
Python 3.10.12

3. sudoのインストール

コンテナ内で sudoを使用できるようにするため、sudoパッケージをインストールします。

su -
apt-get update
apt-get install -y sudo
exit

4. JupyterHubおよび関連パッケージのインストール

sudoを使用して、JupyterHub、JupyterLab、Notebook、SudoSpawnerをインストールします。

sudo python3 -m pip install jupyterhub jupyterlab notebook sudospawner

5. JupyterHubの設定

JupyterHubの設定ファイルを生成し、編集します。

jupyterhub --generate-config
nano jupyterhub_config.py

設定ファイル内に以下の内容を追加または編集してください。

c = get_config()
c.JupyterHub.confirm_no_ssl = True  # SSLは使用しない
c.JupyterHub.base_url = '/'
c.JupyterHub.bind_url = 'http://0.0.0.0:7000'

# 管理ユーザーの指定
c.Authenticator.admin_users = {'admin'}
# ノートブックディレクトリの指定
c.Spawner.notebook_dir = '~/notebook'
# JupyterLabをデフォルトのインターフェースに設定
c.Spawner.default_url = '/lab'

# Spawnerの指定
c.JupyterHub.spawner_class = 'sudospawner.SudoSpawner'

# ログインが許可されているユーザーの指定
c.Authenticator.allowed_users = {'user01', 'user02'}
# 自動終了設定
c.NotebookApp.shutdown_no_activity_timeout = 30 * 24 * 60 * 60  # 30日間の非アクティビティでシャットダウン
c.MappingKernelManager.cull_idle_timeout = 3 * 24 * 60 * 60  # 3日間のアイドルでカーネルをクローズ

6. ユーザーとグループの設定

JupyterHub用のグループを作成し、ユーザーを追加します。

sudo groupadd jupyterhub

ユーザーの作成

adduser admin
adduser user01
adduser user02

ユーザーをグループに追加

sudo usermod -aG jupyterhub admin
sudo usermod -aG jupyterhub user01
sudo usermod -aG jupyterhub user02

グループの変更を適用

newgrp jupyterhub

各ユーザーのノートブックディレクトリを作成し、適切な権限を設定します。

sudo mkdir -p /home/admin/notebook
sudo chown admin:jupyterhub /home/admin/notebook

sudo mkdir -p /home/user01/notebook
sudo chown user01:jupyterhub /home/user01/notebook

sudo mkdir -p /home/user02/notebook
sudo chown user02:jupyterhub /home/user02/notebook

# ディレクトリのパーミッションを設定
sudo chmod 777 /home/admin/notebook
sudo chmod 777 /home/user01/notebook
sudo chmod 777 /home/user02/notebook

注: または、セキュリティ上の理由から、ディレクトリのパーミッションは770とし、必要なユーザーのみがアクセスできるように設定してもです。

7. ログディレクトリとファイルの設定

JupyterHubのログディレクトリとログファイルを作成し、適切な権限を設定します。

# ログディレクトリの作成
sudo mkdir -p /var/log/jupyterhub

# ログファイルの作成
sudo touch /var/log/jupyterhub/jupyterhub.log

# 権限の設定
sudo chown root:jupyterhub /var/log/jupyterhub/jupyterhub.log
sudo chmod 640 /var/log/jupyterhub/jupyterhub.log

JupyterHubのログファイルを適切に管理するために、logrotateを使用してログのローテーションを設定します。

8. logrotateのインストール

logrotateはUbuntuにデフォルトでインストールされていますが、念のため以下のコマンドでインストールを確認し、必要に応じてインストールします。

sudo apt update
sudo apt install -y logrotate

インストール後、バージョンを確認して正しくインストールされたことを確認します。

logrotate --version

9. logrotateの設定

JupyterHubのログファイル /var/log/jupyterhub/jupyterhub.log を対象とする logrotateの設定ファイルを作成します。

sudo nano /etc/logrotate.d/jupyterhub

以下の内容をファイルに記述します。

/var/log/jupyterhub/jupyterhub.log {
  rotate 12
  monthly
  compress
  missingok
  notifempty
  create 640 root jupyterhub
  postrotate
    systemctl restart jupyterhub
  endscript
}

この設定により、ログファイルは毎月ローテーションされ、12世代分保持されます。古いログはgzipで圧縮され、ログファイルが存在しない場合や空の場合はローテーションを行いません。また、ローテーション後にJupyterHubサービスを再起動します。

10. logrotate設定のテスト

設定が正しく行われているかをテストします。

sudo logrotate -d /etc/logrotate.d/jupyterhub

このコマンドはデバッグモードで logrotateを実行し、実際にはローテーションを行わずに設定を検証します。

11. JupyterHubの起動

設定が完了したら、JupyterHubを起動します。

jupyterhub -f jupyterhub_config.py

ターミナルを閉じてもプロセスが継続するように、nohupを使用してバックグラウンドで実行することも可能です。

nohup jupyterhub -f /srv/jupyterhub/jupyterhub_config.py >> /var/log/jupyterhub/jupyterhub.log 2>&1 &

これにより、JupyterHubのログは指定したログファイルに出力され、logrotateによって定期的に管理されます。

ログの確認

コンテナ内で、以下のコマンドをたたくと確認できます。

cat /var/log/jupyterhub/jupyterhub.log

以上で、Azure VM上のDockerコンテナ内にJupyterHubを構築し、ログ管理を設定する手順は完了です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?