序章

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レコードの作成、編集、および削除の方法のドキュメントは、これらのレコードの設定に役立ちます。

ステップ1—パスワードの設定

このステップでは、JupyterLabインストールでパスワードを設定します。 インスタンスは一般公開されているため、パスワードを設定しておくことが重要です。

まず、Anaconda環境がアクティブ化されていることを確認します。 前提条件のチュートリアルに従って、環境は呼び出されます base.

環境をアクティブ化するには、次のコマンドを使用します。

  1. conda activate base

プロンプトは、デフォルトのAnaconda環境を反映するようにターミナルで変更されます base:

  1. sammy@your_server:~$

このチュートリアルの今後のすべてのコマンドは、 base 環境。

Anaconda環境をアクティブにすると、サーバーでJupyterLabのパスワードを設定する準備が整います。

まず、Jupyterの構成ファイルを生成しましょう。

  1. jupyter notebook --generate-config

次の出力が表示されます。

Output
Writing default config to: /home/sammy/.jupyter/jupyter_notebook_config.py

JupyterLabとJupyterNotebookの両方が同じ構成ファイルを共有します。

次に、次のコマンドを使用して、JupyterLabインスタンスにリモートでアクセスするためのパスワードを設定します。

  1. jupyter notebook password

Jupyterは、選択したパスワードを入力するように求めます。

Output
Enter password: Verify password: [NotebookPasswordApp] Wrote hashed password to /home/sammy/.jupyter/jupyter_notebook_config.json

Jupyterは、パスワードをハッシュ形式で次の場所に保存します。 /home/sammy/.jupyter/jupyter_notebook_config.json. 将来、このハッシュ値が必要になります。

最後に、 cat ハッシュされたパスワードを表示するための前のコマンドによって生成されたファイルに対するコマンド:

  1. cat /home/sammy/.jupyter/jupyter_notebook_config.json

次のような出力が表示されます。

/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ソースに追加することから始めます。

  1. sudo add-apt-repository ppa:certbot/certbot

コマンドを実行すると、を押すように求められます ENTER PPAの追加を完了するには:

Output
This 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 指図:

  1. sudo apt update

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

  1. sudo apt install certbot

Certbotの実行を開始してインスタンスの証明書を生成する前に、ポートでのアクセスを許可します :80 とポート :443 Certbotがこれらのポートを使用してドメイン名を確認できるようにします。 ポート :80 チェックされます http ポート中のサーバーへのリクエスト :443 に使用されます https リクエスト。 Certbotは http 最初にリクエストし、サーバーの証明書を取得した後、 https ポートを介してプロキシされるリクエスト :443 で聞くプロセスに :80 ポート。 これにより、証明書のインストールが成功したことが確認されます。

まず、ポートへのアクセスを許可します :80:

  1. sudo ufw allow 80

次の出力が表示されます。

Output
Rule added Rule added (v6)

次に、ポートへのアクセスを許可します :443:

  1. sudo ufw allow 443
Output
Rule added Rule added (v6)

最後に、Certbotを実行して、次のコマンドを使用してインスタンスの証明書を生成します。

  1. sudo certbot certonly --standalone

The standalone 旗は指示します certbot 検証プロセスの間、一時サーバーを実行します。

メールの入力を求められます。

Output
Saving 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

最後に、ドメイン名の入力を求められます。 プロトコルを指定せずにドメイン名を入力します。

Output
Please 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:

  1. nano /home/sammy/.jupyter/jupyter_notebook_config.py

次に、の値を定義する行に移動します c.NotebookApp.certfile 次のように更新します。

/home/sammy/.jupyter/jupyter_notebook_config.py
...
## The full path to an SSL/TLS certificate file.
c.NotebookApp.certfile = '/etc/letsencrypt/live/your_domain/fullchain.pem'
...

次に、 c.NotebookApp.keyfile 変数を設定し、次のように設定します。

/home/sammy/.jupyter/jupyter_notebook_config.py
...
## 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.certfilec.NotebookApp.keyfile SSL証明書を参照してください。SSL証明書は、を使用してサーバーにリモートアクセスしようとしたときに提供されます。 https プロトコル。

次に、を定義する行に移動します c.NotebookApp.ip 変数と次のように更新します。

/home/sammy/.jupyter/jupyter_notebook_config.py
...
## The IP address the notebook server will listen on.
c.NotebookApp.ip = '*'
...

c.NotebookApp.ip サーバーを実行しているJupyterLabにアクセスできるIPを定義します。 あなたはそれをに設定します * JupyterLabにアクセスするために必要な任意のコンピューターからのアクセスを許可するワイルドカード。

次に、 c.NotebookApp.open_browser 構成を次のように更新します。

/home/sammy/.jupyter/jupyter_notebook_config.py
...
## 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 変数を変更し、次のように変更します。

/home/sammy/.jupyter/jupyter_notebook_config.py
...
## 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:

/home/sammy/.jupyter/jupyter_notebook_config.py
...
## The port the notebook server will listen on.
c.NotebookApp.port = 9000
...

c.NotebookApp.port JupyterLabランタイムにアクセスするための固定ポートを設定します。 このようにして、から1つのポートへのアクセスのみを許可できます。 ufw ファイアウォール。

完了したら、ファイルを保存して終了します。

最後に、 9000 ポート:

  1. sudo ufw allow 9000

次の出力が表示されます。

Output
Rule added Rule added (v6)

すべての構成を設定したので、JupyterLabを実行します。

ステップ4—JupyterLabを実行する

このステップでは、JupyterLabインスタンスのテスト実行を実行します。

まず、現在の作業ディレクトリをユーザーのホームディレクトリに変更します。

  1. cd ~

次に、証明書ファイルのアクセス許可を変更して、JupyterLabがそれらにアクセスできるようにします。 の権限を変更します /etc/letsencrypt 次のフォルダに:

  1. sudo chmod 750 -R /etc/letsencrypt
  2. sudo chown sammy:sammy -R /etc/letsencrypt

次に、JupyterLabインスタンスを呼び出して、次のコマンドの使用を開始します。

  1. jupyter lab

このコマンドは、いくつかの構成パラメーターを受け入れます。 ただし、これらの変更は構成ファイルで既に行っているため、ここで明示的に指定する必要はありません。 これらをこのコマンドの引数として指定して、構成ファイルの値をオーバーライドできます。

これで、に移動できます https://your_domain:9000 JupyterLabのログイン画面が表示されることを確認します。

手順2でJupyterLabに設定したパスワードでログインすると、JupyterLabインターフェイスが表示されます。

最後に、 CTRL+C JupyterLabサーバーを停止するために2回。

次のステップでは、JupyterLabサーバーをバックグラウンドで継続的に実行できるようにシステムサービスを設定します。

ステップ6—systemdサービスを設定する

このステップでは、 systemd ターミナルウィンドウが終了してもJupyterLabを実行し続けることができるサービス。 あなたはについてもっと読むことができます systemd systemdの必需品に関するこのガイドのサービスとユニット。

まず、作成する必要があります .service 次のコマンドを使用してファイルを作成します。

  1. sudo nano /etc/systemd/system/jupyterlab.service

次のコンテンツをに追加します /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 サービスを開始するコマンド:

  1. sudo systemctl start jupyterlab

これにより、JupyterLabサーバーがバックグラウンドで起動します。 次のコマンドを使用して、サーバーが起動したかどうかを確認できます。

  1. 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 エディター内のファイル:

  1. sudo nano /etc/letsencrypt/renewal/your_domain.conf

次に、このファイルの最後に次の行を追加します。

/etc/letsencrypt/renewal/your_domain.conf
...
renew_hook = systemctl reload jupyterlab

ファイルを保存して終了します。

最後に、更新プロセスのドライランを実行して、構成ファイルが有効であることを確認します。

  1. sudo certbot renew --dry-run

コマンドがエラーなしで実行された場合、Certbotの更新は正常にセットアップされており、証明書の有効期限が近づくと、サーバーが自動的に更新されて再起動されます。

結論

この記事では、サーバー上にJupyterLab環境をセットアップし、リモートでアクセスできるようにしました。 これで、任意のブラウザから機械学習またはデータサイエンスのプロジェクトにアクセスでき、SSL暗号化を使用してすべての交換が行われるので安心できます。 それに加えて、環境にはクラウドベースのサーバーのすべての利点があります。