Ubuntu18.04でJupyterLab環境をセットアップする方法
序章
JupyterLab は、機能が豊富なUIであり、特にデータサイエンスとAIの分野で、ユーザーがタスクを簡単に実行できるようにします。 JupyterLab環境は、 JupyterNotebookの生産性を重視した再設計を提供します。 組み込みのHTMLビューアやCSVビューアなどのツールと、JupyterNotebookのいくつかの個別の機能を同じ画面に統合する機能を紹介します。
このチュートリアルでは、Ubuntu18.04サーバーにJupyterLabをインストールしてセットアップします。 また、ドメイン名を使用して、任意のWebブラウザーからリモートでJupyterLabインスタンスに安全に接続できるようにサーバーを構成します。
前提条件
このチュートリアルを完了するには、次のものが必要です。
- root以外のユーザーアカウントを持つUbuntu18.04サーバー
sudo
この初期サーバーセットアップガイドを使用する特権。 - サーバーへのPythonAnacondaディストリビューションのインストール。 Ubuntu18.04チュートリアルにAnacondaPythonディストリビューションをインストールする方法を使用できます。
- DNSレコードを編集するためにアクセスできる登録済みドメイン名またはサブドメイン。 このチュートリアルでは、
your_domain
全体を通して。 Namecheap でドメインを購入するか、 Freenom で無料ドメインを取得するか、任意のレジストラに新しいドメインを登録できます。 - ドメインに設定されている次のDNSレコード:
- とのAレコード
your_domain
サーバーのパブリックIPアドレスを指します。 - とのAレコード
www.your_domain
サーバーのパブリックIPアドレスを指します。 このDNSレコードの作成、編集、および削除の方法のドキュメントは、これらのレコードの設定に役立ちます。
- とのAレコード
ステップ1—パスワードの設定
このステップでは、JupyterLabインストールでパスワードを設定します。 インスタンスは一般公開されているため、パスワードを設定しておくことが重要です。
まず、Anaconda環境がアクティブ化されていることを確認します。 前提条件のチュートリアルに従って、環境は呼び出されます base
.
環境をアクティブ化するには、次のコマンドを使用します。
- conda activate base
プロンプトは、デフォルトのAnaconda環境を反映するようにターミナルで変更されます base
:
- sammy@your_server:~$
このチュートリアルの今後のすべてのコマンドは、 base
環境。
Anaconda環境をアクティブにすると、サーバーでJupyterLabのパスワードを設定する準備が整います。
まず、Jupyterの構成ファイルを生成しましょう。
- jupyter notebook --generate-config
次の出力が表示されます。
OutputWriting default config to: /home/sammy/.jupyter/jupyter_notebook_config.py
JupyterLabとJupyterNotebookの両方が同じ構成ファイルを共有します。
次に、次のコマンドを使用して、JupyterLabインスタンスにリモートでアクセスするためのパスワードを設定します。
- jupyter notebook password
Jupyterは、選択したパスワードを入力するように求めます。
OutputEnter password:
Verify password:
[NotebookPasswordApp] Wrote hashed password to /home/sammy/.jupyter/jupyter_notebook_config.json
Jupyterは、パスワードをハッシュ形式で次の場所に保存します。 /home/sammy/.jupyter/jupyter_notebook_config.json
. 将来、このハッシュ値が必要になります。
最後に、 cat
ハッシュされたパスワードを表示するための前のコマンドによって生成されたファイルに対するコマンド:
- cat /home/sammy/.jupyter/jupyter_notebook_config.json
次のような出力が表示されます。
{
"NotebookApp": {
"password": "sha1:your_hashed_password"
}
}
の値をコピーします password
JSONのキーを入力して一時的に保存します。
JupyterLabインスタンスのパスワードを設定しました。 次のステップでは、サーバーのLet’sEncrypt証明書を作成します。
ステップ2—Let’sEncryptの構成
このステップでは、ドメインのLet’sEncrypt証明書を作成します。 これにより、ブラウザからJupyterLab環境にアクセスするときにデータが保護されます。
まず、Certbotをサーバーにインストールします。 リポジトリをaptソースに追加することから始めます。
- sudo add-apt-repository ppa:certbot/certbot
コマンドを実行すると、を押すように求められます ENTER
PPAの追加を完了するには:
OutputThis is the PPA for packages prepared by Debian Let's Encrypt Team and backported for Ubuntu.
Note: Packages are only provided for currently supported Ubuntu releases.
More info: https://launchpad.net/~certbot/+archive/ubuntu/certbot
Press [ENTER] to continue or Ctrl-c to cancel adding it.
プレス ENTER
PPAの追加を続行します。
コマンドの実行が終了したら、を使用してaptソースを更新します。 apt update
指図:
- sudo apt update
次に、Certbotをインストールします。
- sudo apt install certbot
Certbotの実行を開始してインスタンスの証明書を生成する前に、ポートでのアクセスを許可します :80
とポート :443
Certbotがこれらのポートを使用してドメイン名を確認できるようにします。 ポート :80
チェックされます http
ポート中のサーバーへのリクエスト :443
に使用されます https
リクエスト。 Certbotは http
最初にリクエストし、サーバーの証明書を取得した後、 https
ポートを介してプロキシされるリクエスト :443
で聞くプロセスに :80
ポート。 これにより、証明書のインストールが成功したことが確認されます。
まず、ポートへのアクセスを許可します :80
:
- sudo ufw allow 80
次の出力が表示されます。
OutputRule added
Rule added (v6)
次に、ポートへのアクセスを許可します :443
:
- sudo ufw allow 443
OutputRule added
Rule added (v6)
最後に、Certbotを実行して、次のコマンドを使用してインスタンスの証明書を生成します。
- sudo certbot certonly --standalone
The standalone
旗は指示します certbot
検証プロセスの間、一時サーバーを実行します。
メールの入力を求められます。
OutputSaving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): your_email
有効なメールアドレスを入力して、 ENTER
.
次に、CertbotとLet’sEncryptの利用規約を確認して同意するように求められます。 規約を確認し、次のように入力します A
承諾した場合は、 ENTER
:
Output- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A
これで、電子メールをElectronicFrontierFoundationと共有するように求められます。 答えを入力してを押します ENTER
:
Output- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y/N
最後に、ドメイン名の入力を求められます。 プロトコルを指定せずにドメイン名を入力します。
OutputPlease enter in your domain name(s) (comma and/or space separated) (Enter 'c'
to cancel): your_domain
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for your_domain
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/your_domain/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/your_domain/privkey.pem
Your cert will expire on 2020-09-28. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Certbotはドメイン検証を実行し、ドメインの証明書とキーを生成して、 /etc/letsencrypt/live/your_domain
.
Let’s Encrypt証明書を設定したので、JupyterLab構成ファイルを更新します。
ステップ3—JupyterLabの構成
このステップでは、JupyterLab構成を編集して、ステップ2で生成したLet’sEncrypt証明書が使用されていることを確認します。 また、手順1で設定したパスワードを使用してアクセスできるようにします。
まず、JupyterLab構成ファイルを次の場所で編集する必要があります。 /home/sammy/.jupyter/jupyter_notebook_config.py
:
- nano /home/sammy/.jupyter/jupyter_notebook_config.py
次に、の値を定義する行に移動します c.NotebookApp.certfile
次のように更新します。
...
## The full path to an SSL/TLS certificate file.
c.NotebookApp.certfile = '/etc/letsencrypt/live/your_domain/fullchain.pem'
...
次に、 c.NotebookApp.keyfile
変数を設定し、次のように設定します。
...
## The full path to a private key file for usage with SSL/TLS.
c.NotebookApp.keyfile = '/etc/letsencrypt/live/your_domain/privkey.pem'
...
c.NotebookApp.certfile
と c.NotebookApp.keyfile
SSL証明書を参照してください。SSL証明書は、を使用してサーバーにリモートアクセスしようとしたときに提供されます。 https
プロトコル。
次に、を定義する行に移動します c.NotebookApp.ip
変数と次のように更新します。
...
## The IP address the notebook server will listen on.
c.NotebookApp.ip = '*'
...
c.NotebookApp.ip
サーバーを実行しているJupyterLabにアクセスできるIPを定義します。 あなたはそれをに設定します *
JupyterLabにアクセスするために必要な任意のコンピューターからのアクセスを許可するワイルドカード。
次に、 c.NotebookApp.open_browser
構成を次のように更新します。
...
## Whether to open in a browser after starting. The specific browser used is
# platform dependent and determined by the python standard library `webbrowser`
# module, unless it is overridden using the --browser (NotebookApp.browser)
# configuration option.
c.NotebookApp.open_browser = False
...
デフォルトでは、JupyterLabは、実行開始時にブラウザセッションを自動的に開始しようとします。 リモートサーバーにはブラウザがないため、エラーを回避するためにこれをオフにする必要があります。
次に、下に移動します c.NotebookApp.password
変数を変更し、次のように変更します。
...
## Hashed password to use for web authentication.
#
# To generate, type in a python/IPython shell:
#
# from notebook.auth import passwd; passwd()
#
# The string should be of the form type:salt:hashed-password.
c.NotebookApp.password = 'your_hashed_password'
...
JupyterLabは、このハッシュ化されたパスワード構成を使用して、ブラウザーでアクセスするために入力したパスワードを確認します。
最後に、ファイルをさらにナビゲートして、ファイルのエントリを更新します。 c.NotebookApp.port
:
...
## The port the notebook server will listen on.
c.NotebookApp.port = 9000
...
c.NotebookApp.port
JupyterLabランタイムにアクセスするための固定ポートを設定します。 このようにして、から1つのポートへのアクセスのみを許可できます。 ufw
ファイアウォール。
完了したら、ファイルを保存して終了します。
最後に、 9000
ポート:
- sudo ufw allow 9000
次の出力が表示されます。
OutputRule added
Rule added (v6)
すべての構成を設定したので、JupyterLabを実行します。
ステップ4—JupyterLabを実行する
このステップでは、JupyterLabインスタンスのテスト実行を実行します。
まず、現在の作業ディレクトリをユーザーのホームディレクトリに変更します。
- cd ~
次に、証明書ファイルのアクセス許可を変更して、JupyterLabがそれらにアクセスできるようにします。 の権限を変更します /etc/letsencrypt
次のフォルダに:
- sudo chmod 750 -R /etc/letsencrypt
- sudo chown sammy:sammy -R /etc/letsencrypt
次に、JupyterLabインスタンスを呼び出して、次のコマンドの使用を開始します。
- jupyter lab
このコマンドは、いくつかの構成パラメーターを受け入れます。 ただし、これらの変更は構成ファイルで既に行っているため、ここで明示的に指定する必要はありません。 これらをこのコマンドの引数として指定して、構成ファイルの値をオーバーライドできます。
これで、に移動できます https://your_domain:9000
JupyterLabのログイン画面が表示されることを確認します。
手順2でJupyterLabに設定したパスワードでログインすると、JupyterLabインターフェイスが表示されます。
最後に、 CTRL+C
JupyterLabサーバーを停止するために2回。
次のステップでは、JupyterLabサーバーをバックグラウンドで継続的に実行できるようにシステムサービスを設定します。
ステップ6—systemdサービスを設定する
このステップでは、 systemd
ターミナルウィンドウが終了してもJupyterLabを実行し続けることができるサービス。 あなたはについてもっと読むことができます systemd
systemdの必需品に関するこのガイドのサービスとユニット。
まず、作成する必要があります .service
次のコマンドを使用してファイルを作成します。
- sudo nano /etc/systemd/system/jupyterlab.service
次のコンテンツをに追加します /etc/systemd/system/jupyterlab.service
ファイル:
[Unit]
Description=Jupyter Lab Server
[Service]
User=sammy
Group=sammy
Type=simple
WorkingDirectory=/home/sammy/
ExecStart=/home/sammy/anaconda3/bin/jupyter-lab --config=/home/sammy/.jupyter/jupyter_notebook_config.py
StandardOutput=null
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
完了したら、エディターを保存して終了します。
サービスファイルは、それ自体をデーモンとしてシステムに自動的に登録します。 ただし、デフォルトでは実行されていません。
使用 systemctl
サービスを開始するコマンド:
- sudo systemctl start jupyterlab
これにより、JupyterLabサーバーがバックグラウンドで起動します。 次のコマンドを使用して、サーバーが起動したかどうかを確認できます。
- sudo systemctl status jupyterlab
次の出力が表示されます。
Output● jupyterlab.service - Jupyter Lab Server
Loaded: loaded (/etc/systemd/system/jupyterlab.service; disabled; vendor preset: enabled)
Active: active (running) since Sun 2020-04-26 20:58:29 UTC; 5s ago
Main PID: 5654 (jupyter-lab)
Tasks: 1 (limit: 1152)
CGroup: /system.slice/jupyterlab.service
└─5654 /home/sammy/anaconda3/bin/python3.7 /home/sammy/anaconda3/bin/jupyter-lab --config=/home/
プレス Q
サービスステータス出力を終了します。
これで、 https://your_domain:9000
任意のブラウザで、手順2で設定したパスワードを入力し、サーバーで実行されているJupyterLab環境にアクセスします。
ステップ7—Let’sEncrypt証明書の更新を構成する
この最後のステップでは、Let’s Encryptが提供するSSL証明書を構成して、90日ごとに有効期限が切れると自動的に更新し、サーバーを再起動して新しい証明書をロードします。
Certbotはインストールの証明書を更新しますが、サーバーを自動的に再起動することはありません。 新しい証明書で再起動するようにサーバーを構成するには、 renew_hook
サーバーのCertbot構成に追加します。
編集する必要があります /etc/letsencrypt/renewal/your_domain.conf
ファイルを追加し、 renew_hook
構成ファイルの最後まで。
まず、次のコマンドを使用して、 /etc/letsencrypt/renewal/your_domain.conf
エディター内のファイル:
- sudo nano /etc/letsencrypt/renewal/your_domain.conf
次に、このファイルの最後に次の行を追加します。
...
renew_hook = systemctl reload jupyterlab
ファイルを保存して終了します。
最後に、更新プロセスのドライランを実行して、構成ファイルが有効であることを確認します。
- sudo certbot renew --dry-run
コマンドがエラーなしで実行された場合、Certbotの更新は正常にセットアップされており、証明書の有効期限が近づくと、サーバーが自動的に更新されて再起動されます。
結論
この記事では、サーバー上にJupyterLab環境をセットアップし、リモートでアクセスできるようにしました。 これで、任意のブラウザから機械学習またはデータサイエンスのプロジェクトにアクセスでき、SSL暗号化を使用してすべての交換が行われるので安心できます。 それに加えて、環境にはクラウドベースのサーバーのすべての利点があります。