JupyterLab · 3 min read · Oct 21, 2025

Rocky Linux 9にJupyterLab環境をインストールして構成する方法

JupyterLabは、Project Jupyterの次世代のWebベースの開発環境です。Project Jupyterは、複数のプログラミング言語にわたるインタラクティブコンピューティングのためのオープンソース、オープンスタンダード、およびサービスを開発することを目指して開発されました。JupyterLabは、開発者がJupyterノートブック、テキストエディタ、ターミナル、カスタムコンポーネントなどのドキュメントやアクティビティを柔軟で統合的かつ拡張可能な方法で扱うことを可能にする柔軟なインターフェースを提供します。JupyterLabはJupyter Notebookの次世代版であり、最終的にはそれを置き換えることになっています。R、Python、Scala、Juliaを含む40以上のプログラミング言語をサポートしています。

このチュートリアルでは、Rocky Linux 9サーバーにJupyterLabをインストールして構成する方法を学びます。

前提条件

  • Rocky Linux 9を実行しているサーバー。
  • sudo権限を持つ非rootユーザー。
  • サーバーを指す完全修飾ドメイン名(FQDN)。ここでは、jupyterlab.example.comをドメイン名として使用します。
  • SELinuxが無効になっていること。
  • すべてが更新されていることを確認してください。 $ sudo dnf update
  • 基本的なユーティリティパッケージをインストールします。いくつかはすでにインストールされているかもしれません。 $ sudo dnf install wget curl nano unzip yum-utils -y

ステップ1 - ファイアウォールの構成

最初のステップはファイアウォールを構成することです。Rocky LinuxはFirewalldファイアウォールを使用します。ファイアウォールの状態を確認します。

$ sudo firewall-cmd --state
running

ファイアウォールは異なるゾーンで機能し、パブリックゾーンがデフォルトで使用されます。ファイアウォールでアクティブなすべてのサービスとポートをリストします。

$ sudo firewall-cmd --permanent --list-services

次の出力が表示されるはずです。

cockpit dhcpv6-client ssh

Wiki.jsは機能するためにHTTPおよびHTTPSポートが必要です。それらを開きます。

$ sudo firewall-cmd --add-service=http --permanent
$ sudo firewall-cmd --add-service=https --permanent

変更を適用するためにファイアウォールを再読み込みします。

$ sudo firewall-cmd --reload

ステップ2 - Nginxのインストール

Rocky Linux 9には古いバージョンのNginxが付属しています。最新バージョンをインストールするために公式のNginxリポジトリをダウンロードする必要があります。

公式のNginxリポジトリを作成するために、/etc/yum.repos.d/nginx.repoファイルを作成して開きます。

$ sudo nano /etc/yum.repos.d/nginx.repo

以下のコードを貼り付けます。

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

Ctrl + Xを押してファイルを保存し、プロンプトが表示されたらYを入力します。

Nginxサーバーをインストールします。

$ sudo dnf install nginx -y

インストールを確認します。

$ nginx -v
nginx version: nginx/1.22.1

Nginxサーバーを有効にして起動します。

$ sudo systemctl enable nginx --now

サーバーの状態を確認します。

$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server
     Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
     Active: active (running) since Tue 2022-12-13 06:07:05 UTC; 31s ago
       Docs: http://nginx.org/en/docs/
    Process: 146475 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
   Main PID: 146476 (nginx)
      Tasks: 2 (limit: 5911)
     Memory: 1.9M
        CPU: 15ms
     CGroup: /system.slice/nginx.service
             ??146476 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
             ??146477 "nginx: worker process"

ステップ3 - JupyterLabのインストール

まず、Pythonのバージョンを確認しましょう。

$ python -V
Python 3.9.14

PIPパッケージマネージャーをインストールします。

$ sudo dnf install python3-pip

JupyterLab用のディレクトリを作成します。

$ mkdir jupyterlab

新しく作成したディレクトリに移動します。

$ cd ~/jupyterlab

jupyterlab_envという名前の仮想環境をセットアップします。

$ python3 -m venv --system-site-packages jupyterlab_env

環境をアクティブにします。

$ source jupyterlab_env/bin/activate

Pipパッケージマネージャーをアップグレードします。

(jupyterlab_env) $ pip install --upgrade pip

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

(jupyterlab_env) $ pip install jupyterlab

ステップ4 - JupyterLabの構成

デフォルトでは、JupyterLabはインターフェースへのアクセスを許可するために毎回新しいトークンを生成します。それをパスワード認証に置き換えましょう。

パスワードハッシュを生成します。YOUR_PASSWORDをお好みの強力なパスワードに置き換えます。

(jupyterlab_env) $ python3 -c "from jupyter_server.auth import passwd; print(passwd('YOUR_PASSWORD'))"

上記のコマンドは長いパスワードハッシュを生成します。Argon2パスワードハッシュ関数を使用します。ハッシュをメモしておきます。

JupyterLabの構成ファイルを作成します。

(jupyterlab_env) $ jupyter lab --generate-config

上記のコマンドはデフォルト値で構成ファイルを生成し、~/.jupyterディレクトリに保存します。

編集のためにファイルを開きます。

(jupyterlab_env) $ nano ~/.jupyter/jupyter_lab_config.py

次の変数を見つけてコメントを外し、値を以下のように変更します。PASSWORD_HASHを上記で生成したハッシュに置き換えます。

c.ServerApp.allow_remote_access = True

c.ServerApp.password = 'PASSWORD_HASH'

Ctrl + Xを押してファイルを保存し、プロンプトが表示されたらYを入力します。

ファイアウォールでポート8888を開きます。

$ sudo firewall-cmd --add-port=8888/tcp --permanent
$ sudo firewall-cmd --reload

JupyterLabサーバーを実行します。--ip 0.0.0.0パラメータは、localhostだけでなく任意のIPアドレスでリッスンできるようにします。

$ jupyter lab --ip 0.0.0.0

上記のコマンドは、開いたデフォルトのポート8888でJupyterLabサーバーを起動します。ブラウザでhttp://:8888/のURLを起動すると、次の画面が表示されます。

JupyterLabログイン画面

パスワードを入力し、ログインボタンをクリックしてJupyterLabインターフェースを開きます。

JupyterLabホーム

アクセスが確認されたので、Ctrl + Cを押してサーバーを停止し、プロンプトが表示されたらyを入力して停止します。

ステップ5 - JupyterLabサービスファイルの作成

仮想環境を終了します。

(jupyterlab_env) $ deactivate

JupyterLabの新しいサービスファイルを作成します。

$ sudo nano /lib/systemd/system/jupyterlab.service

以下のコードを貼り付けます。

[Unit]
Description=JupyterLab Server

[Service]
User=USER
Group=USER
Type=simple
WorkingDirectory=/home/USER/jupyterlab
ExecStart=/home/USER/jupyterlab/jupyterlab_env/bin/jupyter-lab --config=/home/USER/.jupyter/jupyter_lab_config.py
StandardOutput=null
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

Ctrl + Xを押してファイルを保存し、プロンプトが表示されたらYを入力します。

USERをシステムの現在のログインユーザーに置き換えます。

JupyterLabサービスを初期化します。

$ sudo systemctl daemon-reload

JupyterLabサービスを有効にして起動します。

$ sudo systemctl enable jupyterlab --now

サービスの状態を確認します。

$ sudo systemctl status jupyterlab
? jupyterlab.service - JupyterLab Server
     Loaded: loaded (/usr/lib/systemd/system/jupyterlab.service; disabled; vendor preset: disabled)
     Active: active (running) since Tue 2022-12-13 11:45:26 UTC; 5s ago
   Main PID: 151675 (jupyter-lab)
      Tasks: 1 (limit: 5911)
     Memory: 59.0M
        CPU: 1.943s
     CGroup: /system.slice/jupyterlab.service
             ??151675 /home/navjot/jupyterlab/jupyterlab_env/bin/python3 /home/navjot/jupyterlab/jupyterlab_env/bin/jupyter-lab --config=/home/navjot/.jupyter/jupyter_lab_config.py

Dec 13 11:45:26 jupyter.example.com systemd[1]: Started JupyterLab Server.

ステップ6 - SSLのインストール

続行する前に、Certbotツールとドメイン用のSSL証明書をインストールする必要があります。

Certbotをインストールするために、Snapdパッケージインストーラーを使用します。Snapdは常にCertbotの最新の安定版を提供し、それを使用する必要があります。

Snapdツールは、機能するためにEpelリポジトリを必要とします。

$ sudo dnf install epel-release -y

Snapdを使用してCertbotをインストールします。Snapdをインストールします。

$ sudo dnf install snapd -y

Snapサービスを有効にして起動します。

$ sudo systemctl enable snapd.socket --now

Snapdが機能するために必要なリンクを作成します。

$ sudo ln -s /var/lib/snapd/snap /snap
$ echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh

snapdのバージョンが最新であることを確認します。

$ sudo snap install core 
$ sudo snap refresh core

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

$ sudo snap install --classic certbot

Certbotコマンドが/usr/binディレクトリで実行できるように、シンボリックリンクを作成します。

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

SSL証明書を生成します。

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d jupyterlab.example.com

上記のコマンドは、サーバーの/etc/letsencrypt/live/jupyterlab.example.comディレクトリに証明書をダウンロードします。

Diffie-Hellmanグループ証明書を生成します。

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

SSL更新が正常に機能しているかどうかを確認するために、プロセスのドライランを行います。

$ sudo certbot renew --dry-run

エラーが表示されなければ、すべて設定完了です。証明書は自動的に更新されます。

ステップ7 - Nginxの構成

編集のために/etc/nginx/conf.d/jupyterlab.confファイルを作成して開きます。

$ sudo nano /etc/nginx/conf.d/jupyterlab.conf

以下のコードをjupyterlab.confファイルに貼り付けます。すべてのjupyterlab.example.comのインスタンスをあなたのドメインに置き換えます。

## HTTPSを強制する
server {
  listen 80;
  listen [::]:80;
  server_name jupyterlab.example.com;
  return 301 https://$server_name$request_uri;
}

server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  server_name jupyterlab.example.com;

  access_log /var/log/nginx/jupyterlab.access.log;
  error_log /var/log/nginx/jupyterlab.error.log;
  client_max_body_size 20m;

  http2_push_preload on; # HTTP/2サーバープッシュを有効にする

  ssl_certificate     /etc/letsencrypt/live/jupyterlab.example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/jupyterlab.example.com/privkey.pem;
  ssl_trusted_certificate /etc/letsencrypt/live/jupyterlab.example.com/chain.pem;
  ssl_session_timeout 1d;

  # TLSバージョンを有効にする(TLSv1.3は今後のHTTP/3 QUICに必要)
  ssl_protocols TLSv1.2 TLSv1.3;

  # TLSv1.3の0-RTTを有効にする。リバースプロキシを使用する場合は$ssl_early_dataを使用して
  # 再生攻撃を防ぐ。
  #
  # @see: https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_early_data
  ssl_early_data on;

  ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384';
  ssl_prefer_server_ciphers on;
  ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
  ssl_session_cache shared:SSL:50m;
  ssl_session_tickets off;

  # OCSPスタプリング ---
  # ssl_certificateのURLからOCSPレコードを取得し、キャッシュする
  ssl_stapling on;
  ssl_stapling_verify on;
  ssl_dhparam /etc/ssl/certs/dhparam.pem;

  add_header X-Early-Data $tls1_3_early_data;

  location / {
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_set_header X-Scheme $scheme;
    proxy_buffering off;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://127.0.0.1:8888;
  }
}

# このブロックはTLS v1.3のデバッグに役立ちます。必要に応じてこれを削除し、
# NGINXが直接公開する$ssl_early_data変数を使用してください。
map $ssl_early_data $tls1_3_early_data {
  "~." $ssl_early_data;
  default "";
}
map $http_upgrade $connection_upgrade {
  default upgrade;
  '' close;
}

上記の構成は、すべてのHTTPリクエストをHTTPSにリダイレクトし、JupyterLabサービスをあなたのドメイン経由で提供するためのプロキシとして機能します。

Ctrl + Xを押してファイルを保存し、プロンプトが表示されたらYを入力します。

/etc/nginx/nginx.confファイルを編集のために開きます。

$ sudo nano /etc/nginx/nginx.conf

include /etc/nginx/conf.d/*.conf;の前に以下の行を追加します。

server_names_hash_bucket_size  64;

Ctrl + Xを押してファイルを保存し、プロンプトが表示されたらYを入力します。

Nginxの構成を確認します。

$ sudo nginx -t

エラーが表示されなければ、準備完了です。Nginxサーバーを再読み込みします。

$ sudo systemctl reload nginx

ブラウザでhttps://jupyterlab.example.comのURLにアクセスして、JupyterLabにアクセスできます。

結論

これで、Rocky Linux 9サーバーにJupyterLabをインストールして構成し、Nginxプロキシサーバーを使用して提供する方法に関するチュートリアルが終了しました。質問がある場合は、下のコメントに投稿してください。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。