如何在 Ubuntu 22.04 上安装 JupyterLab 环境教程

简介

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 软件包之外,你无需手动安装其他任何软件包。

  1. 安装 virtualenv 软件包。

    bash 复制代码
    $ apt update
    $ apt install python3-virtualenv
  2. 创建一个新目录并进入该目录。

    bash 复制代码
    $ mkdir /home/USER/jupyter-env
    $ cd /home/USER/jupyter-env
  3. 创建并激活一个新的 Python 虚拟环境。

    bash 复制代码
    $ virtualenv env
    $ source env/bin/activate

    上面的命令在服务器上创建一个名为 env 的新目录,其中包含 Python 虚拟环境文件。你使用 bin 目录中的 activate 二进制文件进入虚拟环境。

  4. 更新 pip 包管理器。

    bash 复制代码
    (env) $ pip install --upgrade pip
  5. 安装 JupyterLab 软件包。

    bash 复制代码
    (env) $ sudo pip install -U jupyterlab

    上面的命令安装最新版本的 JupyterLab。

配置 JupyterLab 服务器

默认情况下,无论何时你启动 JupyterLab 服务器,它都会生成一个唯一的令牌,用于授予对界面的访问权限。本节演示配置 JupyterLab 服务器以使用静态密码并允许远程访问的步骤。

  1. 生成密码哈希。

    bash 复制代码
    (env) $ python3 -c "from jupyter_server.auth import passwd; print(passwd('YOUR_PASSWORD'))"

    上面的命令生成所提供输入的哈希值。它使用 Argon2 密码哈希函数生成哈希值。

    复制生成的哈希值以供稍后使用。

  2. 创建一个新目录以组织 Jupyter Notebook。

    bash 复制代码
    (env) $ mkdir /home/USER/jupyter-env/notebooks
  3. 创建 JupyterLab 配置文件。

    bash 复制代码
    (env) $ sudo nano /home/USER/jupyter-env/config.py

    上面的命令生成一个用于持久化设置的配置文件。

  4. 复制并粘贴以下配置。

    python 复制代码
    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 接受远程连接,并设置静态密码以与界面交互。

    请务必在配置中提供之前生成的哈希值。

    保存并退出文件。

  5. 禁用防火墙。

    bash 复制代码
    (env) $ sudo ufw disable

    上面的命令禁用防火墙,允许入站连接到所有端口。你将在后面的步骤中启用防火墙以保护你的服务器。

  6. 运行 JupyterLab 服务器。

    bash 复制代码
    (env) $ jupyter lab --ip 0.0.0.0 --config config.py

    上面的命令在默认端口 8888 上启动 JupyterLab 服务器。你可以在 Web 浏览器中使用 http://PUBLIC_IP:8888 打开界面,并使用先前步骤中使用的密码登录。确认访问后,使用 Ctrl + C 停止服务器,以便继续执行后续步骤。

守护化 JupyterLab 服务器

在本节中,你将为 JupyterLab 服务器创建一个新服务,使其在后台运行并在服务器启动过程中自动启动。

  1. 获取 Python 和 Jupyter 的路径。

    bash 复制代码
    (env) $ which python
    (env) $ which jupyter

    复制这些路径以在 systemd 服务中使用。

  2. 禁用虚拟环境。

    bash 复制代码
    (env) $ deactivate
  3. 创建一个名为 jupyterlab 的新服务。

    bash 复制代码
    $ sudo nano /lib/systemd/system/jupyterlab.service
  4. 将以下内容添加到文件中。

    [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 值。

    保存并退出文件。

  5. 初始化 jupyterlab 服务。

    bash 复制代码
    $ sudo systemctl daemon-reload
    $ sudo systemctl start jupyterlab
    $ sudo systemctl status jupyterlab

    你可以通过在 Web 浏览器中使用 http://SERVER_IP:8888 打开界面,并使用先前步骤中使用的密码登录来确认访问。

设置反向代理服务器

本节演示安装和配置 Nginx Web 服务器作为反向代理服务器的步骤,该服务器将传入的 HTTP/HTTPS 流量传输到 JupyterLab 服务器。

  1. 安装 Nginx 软件包。

    bash 复制代码
    $ sudo apt install nginx
  2. 交换 Nginx 配置。

    bash 复制代码
    $ sudo rm -f /etc/nginx/nginx.conf
    $ sudo nano /etc/nginx/nginx.conf
  3. 将以下内容添加到文件中。

    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。

  4. 重启 Nginx 服务器。

    bash 复制代码
    $ sudo systemctl restart nginx

    你可以通过在 Web 浏览器中使用 http://jupyterlab.example.com 打开界面,并使用先前步骤中使用的密码登录来确认访问。

使用 Let's Encrypt 保护环境

Let's Encrypt 是一个自动化、开放的证书颁发机构,为公众利益提供免费的 TLS/SSL 证书。它使用 ACME 协议分配证书。在本节中,你将安装 Certbot 软件包,这是一个 ACME 客户端,允许自动颁发和续订 SSL 证书。

  1. 安装 Certbot 软件包。

    bash 复制代码
    $ sudo snap install --classic certbot
  2. 为虚拟主机创建一个新的 Let's Encrypt 证书。

    bash 复制代码
    $ sudo certbot --nginx -d jupyterlab.example.com

    上面的命令颁发一个 SSL 证书并更新 Nginx 配置以使用 HTTPS。你可以通过在 Web 浏览器中使用 https://jupyterlab.example.com 打开界面,并使用先前步骤中使用的密码登录来确认访问。

配置防火墙规则

JupyterLab 环境需要入站 SSH、HTTP 和 HTTPS 流量。

bash 复制代码
$ 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

我的博客:https://blog.ivwv.site

相关推荐
轩轩曲觞阁1 分钟前
Linux网络应用——高级IO
linux·服务器
我是Superman丶23 分钟前
【自动化】Python SeleniumUtil 工具 开启开发者模式 自动安装油猴用户脚本等
运维·python·自动化
幽弥千月24 分钟前
【ELK】容器化部署Elasticsearch1.14.3集群【亲测可用】
运维·elasticsearch·容器·自动化
阿基米东26 分钟前
小米在 GitHub 开源了「Home Assistant 米家集成」,允许用户在 Home Assistant 中使用小米 IoT 智能设备!
物联网·开源·github
旧人旧梦旧心情26 分钟前
docker 安装合集
运维·docker·容器
Algorithm15761 小时前
linux/ubuntu安装Prometheus&Grafana
linux·ubuntu·prometheus
努力成为DBA的小王1 小时前
Linux(一次性和周期性任务cron)
linux·运维·服务器·学习·centos
龚建波1 小时前
记录:virt-manager配置Ubuntu arm虚拟机
linux·ubuntu·virt-manager
u0124419622 小时前
openharmony bootanimation分析及常见错误
linux
tang_vincent2 小时前
使用qemu搭建armv7嵌入式开发环境
linux