简介
JupyterLab 为数据科学和 AI 项目提供了一个基于 Web 的开发环境。它是一个灵活的界面,允许开发人员配置和管理机器学习和科学计算工作流程。JupyterLab 是 Jupyter Notebook 的下一代产品。它旨在解决 Notebook 的许多可用性问题,并通过支持 40 多种编程语言(包括 R、Python、Scala 和 Julia)极大地扩展了其范围。
本文演示了配置 JupyterLab 服务器并将其守护化、设置 Nginx Web 服务器作为反向代理,以及使用 Let’s Encrypt SSL 证书保护环境的步骤。
准备工作
服务器准备
必要前提:
- 一个充满求知欲的大脑。
- 一台 Linux 服务器(推荐腾讯云、阿里云或雨云等)。
我将以 雨云 为例,带大家创建一台自己的云服务器,以便学习本篇文章的内容。
注册链接: https://rainyun.ivwv.site
创建雨云服务器
以下步骤仅供参考,请根据实际需求选择配置。
- 点击 云产品 → 云服务器 → 立即购买。
- 选择距离你较近的区域,以保证低延迟。
- 按照自己需求选择配置,选择Ubuntu 22.04 版本,按照自己需求是否预装Docker。
- 最后按照提示进行购买。
- 购买后等待机器部署完毕,点击刚刚创建好的服务器,进入管理面板,找到远程连接相关信息。
- 我们使用
PowerShell
进行SSH
远程连接到服务器,Win+R
打开运行窗口,输入powershell
后点击确定。
- 输入
ssh root@你的服务器IP
例如ssh root@154.9.227.239
回车后,首次需要输入yes
,再次回车后即可登录服务器。
- 到此为止,我们的云服务器就远程连接上了。
安装所需的软件包
JupyterLab 是一个全包式的软件包;除了用于隔离 Jupyter 内核的 virtualenv
软件包之外,你无需手动安装其他任何软件包。
安装
virtualenv
软件包。$ apt update $ apt install python3-virtualenv
创建一个新目录并进入该目录。
$ mkdir /home/USER/jupyter-env $ cd /home/USER/jupyter-env
创建并激活一个新的 Python 虚拟环境。
$ virtualenv env $ source env/bin/activate
上面的命令在服务器上创建一个名为
env
的新目录,其中包含 Python 虚拟环境文件。你使用bin
目录中的activate
二进制文件进入虚拟环境。更新
pip
包管理器。(env) $ pip install --upgrade pip
安装 JupyterLab 软件包。
(env) $ sudo pip install -U jupyterlab
上面的命令安装最新版本的 JupyterLab。
配置 JupyterLab 服务器
默认情况下,无论何时你启动 JupyterLab 服务器,它都会生成一个唯一的令牌,用于授予对界面的访问权限。本节演示配置 JupyterLab 服务器以使用静态密码并允许远程访问的步骤。
生成密码哈希。
(env) $ python3 -c "from jupyter_server.auth import passwd; print(passwd('YOUR_PASSWORD'))"
上面的命令生成所提供输入的哈希值。它使用 Argon2 密码哈希函数生成哈希值。
复制生成的哈希值以供稍后使用。创建一个新目录以组织 Jupyter Notebook。
(env) $ mkdir /home/USER/jupyter-env/notebooks
创建 JupyterLab 配置文件。
(env) $ sudo nano /home/USER/jupyter-env/config.py
上面的命令生成一个用于持久化设置的配置文件。
复制并粘贴以下配置。
from jupyter_server.auth.identity import PasswordIdentityProvider c.ServerApp.allow_remote_access = True c.ServerApp.allow_origin = '*' c.ServerApp.root_dir = "/home/USER/jupyter-env/notebooks" PasswordIdentityProvider.hashed_password = ''
上面的配置允许 JupyterLab 接受远程连接,并设置静态密码以与界面交互。
请务必在配置中提供之前生成的哈希值。
保存并退出文件。禁用防火墙。
(env) $ sudo ufw disable
上面的命令禁用防火墙,允许入站连接到所有端口。你将在后面的步骤中启用防火墙以保护你的服务器。
运行 JupyterLab 服务器。
(env) $ jupyter lab --ip 0.0.0.0 --config config.py
上面的命令在默认端口
8888
上启动 JupyterLab 服务器。你可以在 Web 浏览器中使用http://PUBLIC_IP:8888
打开界面,并使用先前步骤中使用的密码登录。确认访问后,使用 Ctrl + C 停止服务器,以便继续执行后续步骤。
守护化 JupyterLab 服务器
在本节中,你将为 JupyterLab 服务器创建一个新服务,使其在后台运行并在服务器启动过程中自动启动。
获取 Python 和 Jupyter 的路径。
(env) $ which python (env) $ which jupyter
复制这些路径以在
systemd
服务中使用。禁用虚拟环境。
(env) $ deactivate
创建一个名为
jupyterlab
的新服务。$ sudo nano /lib/systemd/system/jupyterlab.service
将以下内容添加到文件中。
[Unit] Description=JupyterLab Server [Service] User=USER Group=USER ExecStart=PYTHON_PATH JUPYTER_PATH lab --config=CONFIG_PATH [Install] WantedBy=multi-user.target
上面的
systemd
文件内容创建一个名为jupyterlab
的新服务,并使用配置文件启动服务器。请确保你替换了内容中的USER
和*_PATH
值。
保存并退出文件。初始化
jupyterlab
服务。$ sudo systemctl daemon-reload $ sudo systemctl start jupyterlab $ sudo systemctl status jupyterlab
你可以通过在 Web 浏览器中使用
http://SERVER_IP:8888
打开界面,并使用先前步骤中使用的密码登录来确认访问。
设置反向代理服务器
本节演示安装和配置 Nginx Web 服务器作为反向代理服务器的步骤,该服务器将传入的 HTTP/HTTPS 流量传输到 JupyterLab 服务器。
安装 Nginx 软件包。
$ sudo apt install nginx
交换 Nginx 配置。
$ sudo rm -f /etc/nginx/nginx.conf $ sudo nano /etc/nginx/nginx.conf
将以下内容添加到文件中。
http { map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { listen 80; server_name jupyterlab.example.com; location / { proxy_pass http://127.0.0.1:8888; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 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; } location ~ /.well-known/acme-challenge/ { root /var/www/certbot; } } } events {}
上面的配置使用虚拟主机将
jupyterlab.example.com
上的所有传入 HTTP 流量传输到端口8888
上的 localhost。重启 Nginx 服务器。
$ sudo systemctl restart nginx
你可以通过在 Web 浏览器中使用
http://jupyterlab.example.com
打开界面,并使用先前步骤中使用的密码登录来确认访问。
使用 Let’s Encrypt 保护环境
Let’s Encrypt 是一个自动化、开放的证书颁发机构,为公众利益提供免费的 TLS/SSL 证书。它使用 ACME 协议分配证书。在本节中,你将安装 Certbot 软件包,这是一个 ACME 客户端,允许自动颁发和续订 SSL 证书。
安装 Certbot 软件包。
$ sudo snap install --classic certbot
为虚拟主机创建一个新的 Let’s Encrypt 证书。
$ sudo certbot --nginx -d jupyterlab.example.com
上面的命令颁发一个 SSL 证书并更新 Nginx 配置以使用 HTTPS。你可以通过在 Web 浏览器中使用
https://jupyterlab.example.com
打开界面,并使用先前步骤中使用的密码登录来确认访问。
配置防火墙规则
JupyterLab 环境需要入站 SSH、HTTP 和 HTTPS 流量。
$ sudo ufw allow 'OpenSSH'
$ sudo ufw allow 'Nginx Full'
$ sudo ufw enable
$ sudo ufw status
结论
本文演示了配置 JupyterLab 服务器并将其守护化、设置 Nginx Web 服务器作为反向代理,以及使用 Let’s Encrypt SSL 证书保护环境的步骤。
有关更多信息,请参阅 JupyterLab 文档。
雨云 - 新一代云服务提供商: https://rainyun.ivwv.site