如何在Ubuntu18.04上设置JupyterLab环境
作者选择 联合国基金会 作为 Write for DOnations 计划的一部分接受捐赠。
介绍
JupyterLab 是一个功能丰富的 UI,使用户(尤其是数据科学和人工智能领域的用户)能够轻松执行任务。 JupyterLab 环境提供了以生产力为中心的 Jupyter Notebook 重新设计。 它引入了诸如内置 HTML 查看器和 CSV 查看器之类的工具,以及将 Jupyter Notebooks 的几个离散功能统一到同一屏幕上的功能。
在本教程中,您将在 Ubuntu 18.04 服务器上安装和设置 JupyterLab。 您还将配置您的服务器,使其能够使用域名从任何 Web 浏览器远程安全地连接到 JupyterLab 实例。
先决条件
为了完成本教程,您需要:
- 使用此 初始服务器设置指南 的具有
sudo
权限的非 root 用户帐户的 Ubuntu 18.04 服务器。 - 在您的服务器上安装 Python Anaconda 发行版。 您可以使用 如何在 Ubuntu 18.04 上安装 Anaconda Python 发行版教程。
- 您有权编辑 DNS 记录的注册域名或子域。 本教程将自始至终使用
your_domain
。 您可以在 Namecheap 上购买域,在 Freenom 上获得一个免费域,或者在您选择的任何注册商处注册一个新域。 - 为您的域设置的以下 DNS 记录: 带有 your_domain 的 A 记录指向您服务器的公共 IP 地址。 带有 www.your_domain 的 A 记录指向您服务器的公共 IP 地址。 此如何创建、编辑和删除 DNS 记录文档可以帮助您设置这些记录。
第 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 和 Jupyter Notebook 共享相同的配置文件。
现在,使用以下命令设置远程访问 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
您将收到类似于以下内容的输出:
/home/sammy/.jupyter/jupyter_notebook_config.json
{ "NotebookApp": { "password": "sha1:your_hashed_password" } }
复制JSON的password
键中的值,暂时保存。
您已为 JupyterLab 实例设置密码。 在下一步中,您将为您的服务器创建一个 Let's Encrypt 证书。
第 2 步 — 配置 Let's Encrypt
在此步骤中,您将为您的域创建一个 Let's Encrypt 证书。 当您从浏览器访问 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 update
命令刷新 apt 源:
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
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's Encrypt 的服务条款。 查看条款,如果您接受,请输入 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
它现在将提示您与电子前沿基金会共享您的电子邮件。 输入您的答案并按 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's Encrypt 证书。 您还可以使用在步骤 1 中设置的密码访问它。
首先,您需要在 /home/sammy/.jupyter/jupyter_notebook_config.py
编辑 JupyterLab 配置文件:
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.certfile
和 c.NotebookApp.keyfile
指的是 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 运行时的固定端口。 这样,您可以只允许从 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 服务器。
在下一步中,您将设置系统服务,以便 JupyterLab 服务器可以在后台连续运行。
第 6 步 — 设置 systemd 服务
在此步骤中,您将创建一个 systemd
服务,即使退出终端窗口,JupyterLab 也可以继续运行。 您可以在 this guide on systemd essentials 中阅读有关 systemd
服务和单元的更多信息。
首先,您必须使用以下命令创建一个 .service
文件:
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
命令启动服务:
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's Encrypt 证书的更新
在这最后一步中,您将配置 Let's Encrypt 提供的 SSL 证书,使其在每 90 天到期时自动更新,然后重新启动服务器以加载新证书。
虽然 Certbot 会为您的安装更新证书,但它不会自动重新启动服务器。 要配置服务器以使用新证书重新启动,您必须为服务器的 Certbot 配置提供 renew_hook
。
您需要编辑 /etc/letsencrypt/renewal/your_domain.conf
文件并将 renew_hook
添加到配置文件的末尾。
首先,使用以下命令在编辑器中打开 /etc/letsencrypt/renewal/your_domain.conf
文件:
sudo nano /etc/letsencrypt/renewal/your_domain.conf
然后,在该文件的底部,添加以下行:
/etc/letsencrypt/renew/your_domain.conf
... renew_hook = systemctl reload jupyterlab
保存并退出文件。
最后,运行更新过程的试运行以验证您的配置文件是否有效:
sudo certbot renew --dry-run
如果命令运行没有任何错误,则您的 Certbot 续订已成功设置,并且将在证书接近到期日期时自动续订并重新启动您的服务器。
结论
在本文中,您在服务器上设置了 JupyterLab 环境并使其可以远程访问。 现在,您可以从任何浏览器访问您的机器学习或数据科学项目,并放心所有交换都在 SSL 加密的情况下进行。 除此之外,您的环境还具有基于云的服务器的所有优势。