当前位置: 首页 > news >正文

如何在 Ubuntu 上安装 Jupyter Notebook

本篇文章将教你在 Ubuntu 服务器上安装 Jupyter Notebook,并使用 Nginx 和 SSL 证书进行安全配置。

我将带你一步步在云服务器上搭建 Jupyter Notebook 服务器。Jupyter Notebook 在数据科学和机器学习领域被广泛用于交互式编码、可视化和实验。在远程服务器上运行 Jupyter Notebook 可以让你安全地管理机器学习项目,共享笔记本,并利用服务器的计算能力。
alt text

Jupyter Notebook 简介

Jupyter Notebook 是一款开源的 Web 应用程序,允许用户创建和共享包含实时代码、方程式、可视化和叙述文本的文档。这些文档被称为“笔记本”,它们提供了一个交互式环境,非常适合进行数据清理和转换、数值模拟、统计建模、数据可视化、机器学习等等。

主要特点:

  • 交互式计算: 在 Notebook 中,您可以逐个单元格地运行代码,并立即查看结果。这使得调试和探索数据变得更加容易。
  • 支持多种语言: 虽然最常用于 Python,但 Jupyter Notebook 也支持其他编程语言,例如 R、Julia、Scala 等。
  • 数据可视化: 您可以直接在 Notebook 中创建各种图表和图形,以便更好地理解数据。
  • 富文本格式: 除了代码之外,您还可以使用 Markdown 语法添加标题、段落、列表、链接、图像等,使您的文档更具可读性和条理性。
  • 易于分享: 您可以将 Notebook 保存为多种格式,例如 .ipynb、.html、.pdf 等,方便与他人共享您的工作。
  • 扩展性强: Jupyter Notebook 拥有丰富的扩展生态系统,可以增强其功能,例如代码自动补全、版本控制、主题定制等。

典型应用场景:

  • 数据分析和可视化: 探索、清理、转换和可视化数据。
  • 机器学习: 构建、训练和评估机器学习模型。
  • 科学计算: 进行数值模拟和科学实验。
  • 教学和培训: 创建交互式学习材料。
  • 文档记录: 记录研究过程和结果。

Jupyter Notebook 的基本组成部分:

  • 单元格 (Cell): Notebook 的基本单位,可以包含代码或 Markdown 文本。
  • 内核 (Kernel): 负责执行代码的计算引擎。
  • 笔记本文件 (.ipynb): 包含 Notebook 所有内容的 JSON 格式文件。

环境准备

服务器准备

必要前提:

  • 一个充满求知欲的大脑。
  • 一个指向服务器 IP 的域名(可选)。
  • 一台 Linux 服务器(推荐腾讯云、阿里云或雨云等)。本文将以雨云为例进行演示。

我将以 雨云 为例,带大家创建一台自己的云服务器,以便尝试本篇文章的内容。

注册链接: https://rainyun.ivwv.site/

创建雨云服务器

以下步骤仅供参考,请根据实际需求选择配置。

点击 云产品云服务器立即购买

创建服务器

选择距离你较近的区域,以保证低延迟。

选择区域

选择配置。

选择配置

选择 Ubuntu 22.04 版本。

选择操作系统

最后点击 立即购买,并按照提示进行购买。购买后等待机器部署完毕,点击购买的服务器,进入管理面板,找到远程连接相关信息。

服务器管理面板

远程连接信息

使用 PowerShell 进行远程连接。

PowerShell 远程连接

输入 ssh root@你的服务器IP 例如 ssh root@154.9.227.239 回车后,首次需要输入 yes,再次回车后即可登录服务器。

登录服务器

到此为止,我们的云服务器就创建好了。

开始安装

第 1 步:更新服务器

首先,更新服务器以确保所有软件包都是最新的。

sudo apt update && sudo apt upgrade -y

这条命令将更新软件包列表并升级现有软件到最新版本。

第 2 步:安装 Python 和所需库

如果服务器上尚未安装 Python 3,请安装 Python 3 以及 pip(Python 包安装程序)和一些基本的开发工具:

sudo apt install python3 python3-pip python3-dev build-essential -y

安装完成后,你可以通过运行以下命令来验证 Python 和 pip 的安装:

python3 --version
pip3 --version

第 3 步:设置虚拟环境

为了保持环境的整洁并避免与其他项目发生冲突,建议设置一个 Python 虚拟环境。

安装 venv 模块:

sudo apt install python3-venv -y

在所需目录中创建一个虚拟环境:

python3 -m venv jupyter_env

激活虚拟环境:

source jupyter_env/bin/activate

当虚拟环境激活后,你的 shell 提示符会显示环境名称,表明你已处于隔离环境中。

第 4 步:安装 Jupyter Notebook

虚拟环境设置好后,你可以使用 pip 安装 Jupyter Notebook:

pip install jupyter

这将安装 Jupyter 及其依赖项。安装完成后,可以通过以下命令进行验证:

jupyter --version

第 5 步:配置 Jupyter Notebook 以实现远程访问

默认情况下,Jupyter 仅允许从本地访问。要远程访问,你需要配置它以监听外部连接。

生成 Jupyter 配置文件:

jupyter notebook --generate-config

这将在 ~/.jupyter/jupyter_notebook_config.py 处创建一个配置文件。

为 Jupyter Notebook 设置密码以防止未授权访问:

jupyter notebook password

系统会提示你输入并验证密码。加密后的密码将存储在 jupyter_notebook_config.json 文件中以确保安全。

编辑配置文件以允许远程访问:

打开配置文件:

nano ~/.jupyter/jupyter_notebook_config.py

找到并修改以下行(如果它们被注释了,请取消注释):

# c.ServerApp.ip = 'localhost'
# c.ServerApp.port = 0

修改为:

c.ServerApp.ip = '0.0.0.0'
c.ServerApp.port = 8888

此配置允许 Jupyter 监听所有可用 IP 地址(0.0.0.0)并禁用服务器上的自动浏览器打开。

第 6 步:配置防火墙

如果你启用了 UFW 防火墙,你需要添加 TCP 端口:

sudo ufw allow 8888/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload

第 7 步:运行 Jupyter Notebook

在虚拟环境中运行 Jupyter Notebook 服务器,执行以下命令:

jupyter notebook

在浏览器中访问 Jupyter 笔记本:

http://server_ip:8888

第 8 步:从本地机器访问 Jupyter Notebook

要远程访问 Jupyter Notebook,你需要使用 SSH 隧道连接,或直接在防火墙上打开端口(由于安全风险,不推荐)。

通过 SSH 隧道访问 Jupyter(推荐)

在本地机器上运行以下命令:

ssh -L 8888:localhost:8888 username@your_server_ip

此命令将本地机器的 8888 端口转发到远程服务器的 8888 端口。运行命令后,你可以通过在浏览器中访问:

http://localhost:8888

第 9 步:将 Jupyter 设置为系统服务

为确保 Jupyter Notebook 服务器在重启后自动启动,你可以将其配置为 systemd 服务。

创建一个新的服务文件:

sudo nano /etc/systemd/system/jupyter.service

在文件中添加以下配置,将 /home/username/ 替换为你的实际主目录路径,将 username 替换为你的用户账户:

[Unit]
Description=Jupyter Notebook
[Service]
Type=simple
PIDFile=/run/jupyter.pid
ExecStart=/home/username/jupyter_env/bin/jupyter-notebook --config=/home/username/.jupyter/jupyter_notebook_config.py
User=username
Group=username
WorkingDirectory=/home/username
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target

重新加载 systemd 并启用服务:

sudo systemctl daemon-reload
sudo systemctl enable jupyter
sudo systemctl start jupyter

现在 Jupyter 将在重启后自动启动并在后台运行。

检查 jupyter 服务状态:

systemctl status jupyter

在这里你将找到令牌:

Oct 15 02:24:23 jupyter jupyter-notebook[5385]:         http://jupyter:8888/tree?token=16dc4db2331c725588a7930cf5f09d005f53a4d421061e9d
Oct 15 02:24:23 jupyter jupyter-notebook[5385]:         http://127.0.0.1:8888/tree?token=16dc4db2331c725588a7930cf5f09d005f53a4d421061e9d

你需要这个令牌来登录,或者更改登录密码。

第 10 步:为 Jupyter Notebook 安装 Nginx

为了使你的 Jupyter Notebook 服务器更安全,并且可以通过 HTTPS 访问,你可以使用 Nginx 作为反向代理,并使用 Certbot 从 Let’s Encrypt 获取免费的 SSL 证书。这种设置确保了你与 Jupyter Notebook 服务器的连接是加密的,这在处理敏感数据时非常重要。

以下是安装 Nginx、将其配置为 Jupyter 的反向代理,并使用 Certbot 从 Let’s Encrypt 获取 SSL 证书的步骤。

安装 Nginx

首先,在服务器上安装 Nginx:

sudo apt install nginx -y

安装 Nginx 后,启动并启用它:

sudo systemctl start nginx
sudo systemctl enable nginx

通过在浏览器中打开服务器的 IP 地址来检查 Nginx 是否运行。你应该能看到 Nginx 的默认页面。

将 Nginx 配置为 Jupyter 的反向代理

要允许 Nginx 作为 Jupyter Notebook 的反向代理,创建一个新的 Nginx 配置文件。

创建一个新的配置文件:

sudo nano /etc/nginx/sites-available/jupyter

在文件中添加以下内容,将 your_domain_or_IP 替换为你的实际域名或服务器 IP:

server {listen 80;server_name your_domain_or_IP;location / {proxy_pass http://localhost:8888;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;# WebSocket 支持proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";}
}

此配置将所有端口 80(HTTP)上的流量定向到端口 8888 上运行的 Jupyter Notebook。

通过创建符号链接启用配置:

sudo ln -s /etc/nginx/sites-available/jupyter /etc/nginx/sites-enabled/

测试 Nginx 配置是否有错误:

sudo nginx -t

重启 Nginx 以应用更改:

sudo systemctl restart nginx

此时,Nginx 会将 http://your_domain_or_IP 的流量转发到端口 8888 上的 Jupyter Notebook。但是,连接仍然不安全。在接下来的步骤中,我们将使用 Certbot 设置 SSL。

安装 Certbot 并获取 SSL 证书

Let’s Encrypt 提供免费的 SSL 证书,Certbot 自动化了获取和续订证书的过程。

安装 Certbot 和 Nginx 插件:

sudo apt install certbot python3-certbot-nginx -y

使用 Certbot 为你的域名获取 SSL 证书:

sudo certbot --nginx -d your_domain_or_IP

Certbot 会提示你提供用于紧急续订通知的电子邮件地址,并同意服务条款。之后,Certbot 将自动获取并配置 Nginx 的 SSL 证书。

验证 SSL 安装:

你现在可以通过 https://your_domain_or_IP 安全地访问你的 Jupyter Notebook。浏览器将显示锁图标,表示连接是安全的。

第 11 步:为机器学习项目优化 Jupyter

对于机器学习项目,你可以通过以下优化来增强你的 Jupyter Notebook 设置:

a) 安装必要的库

对于机器学习,你需要安装像 NumPy, Pandas, scikit-learn, Matplotlib, Seaborn, TensorFlow, 和 PyTorch 这样的库:

pip install numpy pandas scikit-learn matplotlib seaborn tensorflow torch
b) 利用 GPU 进行机器学习

如果你的服务器有 GPU,你可以安装 TensorFlow 和 PyTorch 的 GPU 版本来加速模型训练:

TensorFlow:

pip install tensorflow-gpu

PyTorch:

你可以在 PyTorch 的官方网站上找到适合你设置的安装命令。

c) 笔记本扩展

安装 Jupyter Notebook 扩展以增强功能,如目录、代码折叠等:

pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user
jupyter nbextension enable codefolding/main

结论

我们已经看到了如何在 Ubuntu 服务器上安装 Jupyter Notebook,并使用 Nginx 和 SSL 证书进行安全配置。你已经成功安装并配置了用于远程机器学习项目的 Jupyter Notebook 服务器。这种设置允许你在功能强大的远程服务器上运行机器学习实验、管理代码和可视化结果。确保在将 Jupyter 暴露到互联网上时保护你的设置,并根据项目需求优化服务器。

通过远程运行 Jupyter,你可以从任何地方访问你的 Notebook,同时利用服务器的资源,这是复杂机器学习项目的理想解决方案。

相关链接
雨云 - 新一代云服务提供商: https://www.rainyun.com/NTEzMTM1_?s=blog
面试鸭:https://mianshiya.com/?shareCode=sq29yv
我的博客:https://blog.ivwv.site

相关文章:

如何在 Ubuntu 上安装 Jupyter Notebook

本篇文章将教你在 Ubuntu 服务器上安装 Jupyter Notebook,并使用 Nginx 和 SSL 证书进行安全配置。 我将带你一步步在云服务器上搭建 Jupyter Notebook 服务器。Jupyter Notebook 在数据科学和机器学习领域被广泛用于交互式编码、可视化和实验。在远程服务器上运行…...

免费申请 Let‘s Encrypt SSL 证书

免费申请 Lets Encrypt SSL 证书 在网络安全日益重要的今天,为网站启用 SSL 证书是保障数据安全和用户信任的关键。Lets Encrypt 提供的免费 SSL 证书是一个很好的选择。下面我们详细介绍如何为网站域名申请该证书。 一、准备工作 域名 确保已注册要使用 SSL 证书的…...

【JAVA】Java基础—面向对象编程:继承—重写父类方法

在Java开发中,重写(Override)是面向对象编程(OOP)中的一个重要概念。它允许子类提供父类方法的具体实现,从而改变或扩展父类的行为。重写是实现多态性的重要手段,使得程序在运行时能够根据对象的…...

【C++初阶】C++入门

1、C第一个程序 C是脱胎于C语言的&#xff0c;所以也包含了C语言绝大多数的内容&#xff0c;C兼容C语言绝大多数的语法,在C语言中能实现的程序在C中也是可以执行的&#xff0c;但需要将定义文件代码的后缀改为.cpp 就比如hello world程序 // test.cpp #include<stdio.h&g…...

自然推理系统:的拒取式的解析

要推导出 **"非A"** 的拒取式 (rejection form)&#xff0c;首先我们要理解逻辑推理中几个基本的概念。 假设我们有以下前提&#xff1a; 1. **A → B** &#xff08;如果A成立&#xff0c;那么B成立&#xff09; 2. **非B** &#xff08;B不成立&#xff09; 我们…...

OceanBase 分区表详解

1、分区表的定义 在OceanBase数据库中&#xff0c;普通的表数据可以根据预设的规则被分割并存储到不同的数据区块中&#xff0c;同一区块的数据是在一个物理存储上。这样被分区块的表被称为分区表&#xff0c;而其中的每一个独立的数据区块则被称为一个分区。 如下图所示&…...

Java中 LinkedList<>,ArrayDeque<>的区别 || Queue和Deque的区别

我是你爹 LinkedList<> 和 ArrayDeque<> 的区别Queue接口 和 Deque接口区别Queue 的用法Deque 的用法 LinkedList<> 和 ArrayDeque<> 的区别 1. 数据结构实现方式&#xff1a; LinkedList&#xff1a; 基于链表结构&#xff0c;是一个双向链表。每个…...

freemarker 读取template.xml ,通过response 输出文件,解决中文乱码问题

采用 try (Writer writer new OutputStreamWriter(os, “UTF-8”)) UTF-8 内容转换 public static void setResponseHeader(HttpServletResponse response, String fileName) {try {// fileName "中文.xls";try {fileName new String(fileName.getBytes(),"…...

arkUI:水果选择与管理:基于 ArkUI 的长按编辑功能实现

水果选择与管理&#xff1a;基于 ArkUI 的长按编辑功能实现 1 主要内容说明2 相关内容2.1 相关内容2.1.1 源码1内容的相关说明2.1.1.1 数据结构与状态管理2.1.1.2 添加水果功能2.1.1.3 水果列表展示2.1.1.4 长按进入编辑模式2.1.1.5 复选框的多选功能2.1.1.6 删除水果功能2.1.1…...

docker使用,docker图形化界面+docker详细命令

DockerUI进入 docker container run --rm --name docker.ui -v /var/run/docker.sock:/var/run/docker.sock -p 8999:8999 joinsunsoft/docker.ui访问8999端口就行&#xff0c;就可以图形化管理Docker了 常规使用 搭建 sudo docker-compose build #有一些需要这条命令 su…...

idea项目运行时 java: 错误: 不支持发行版本 21

java项目运行时&#xff0c;同样的项目别的都是正常运行&#xff0c;单个这个项目一直报 java: 错误: 不支持发行版本 21&#xff0c; 报错的解释 这个错误表明你正在尝试使用Java编译器编译一个类&#xff0c;但是编译器遇到了一个它不支持的版本号&#xff0c;在这个上下文…...

hive alter table add columns 是否使用 cascade 的方案

结论 alter table xxx add columns 时加上 cascade 时&#xff0c;会把所有的分区都加上此字段。如果不加则只有新的分区会加上此字段&#xff0c;旧的分区没有此字段&#xff0c;即便数据文件里有对应的数据&#xff0c;也不能显示内容。 如果分区都是 insert overwrite 生成…...

手机怎么玩steam游戏?随时随地远程串流玩steam游戏教程

喜欢在steam上玩游戏的玩家有没有想过&#xff0c;其实这些游戏也能在手机上玩呢&#xff1f;不管是探索的开放世界游戏&#xff0c;还是紧张刺激的射击游戏&#xff0c;还是丰富剧情的视觉小说等等&#xff0c;这些游戏你都可以通过远程串流软件&#xff0c;来帮你实现在手机上…...

【使用antv g6实现拓扑图】

使用antv g6实现拓扑图 安装antv g6创建一个 div&#xff0c;并制定必须的属性 id定义初始化方法定义node节点数据将获取到的数据渲染进页面 安装antv g6 npm install antv/g6 --save import G6 from antv/g6;创建一个 div&#xff0c;并制定必须的属性 id 定义好展示id&…...

【数学 函数空间】拉普拉斯变换解微分方程步骤

拉普拉斯变换解微分方程 拉普拉斯变换解微分方程的一般步骤如下&#xff1a; 写出微分方程。对微分方程两边应用拉普拉斯正变换。求解变换后的代数方程&#xff0c;得到 Y ( s ) Y(s) Y(s)。如果需要&#xff0c;进行部分分式分解。对 Y ( s ) Y(s) Y(s)进行拉普拉斯逆变换&…...

vue3: toRef, reactive, toRefs, toRaw

vue3&#xff1a; toRef, reactive, toRefs, toRaw <template><div>{{ man }}</div><hr><!-- <div>{{ name }}--{{ age }}--{{ like }}</div> --><div><button click"change">修改</button></div&g…...

Unity读取Json

参考 Unity读取Json的几种方法_unity读取json文件-CSDN博客...

基于STM32的智能语音识别饮水机系统设计

功能描述 1、给饮水机设定称呼&#xff0c;喊出称呼&#xff0c;饮水机回答&#xff1a;我在 2、语音进行加热功能&#xff0c;说&#xff1a;请加热&#xff0c;加热片运行 3、饮水机水位检测&#xff0c;低于阈值播报“水量少&#xff0c;请换水” 4、检测饮水机水温&#xf…...

c++的几种构造函数

c的几种构造函数 构造函数拷贝构造函数转换构造函数移动构造函数 析构函数 构造函数 C中的构造函数可以分为5类&#xff1a;默认构造函数、普通构造函数、拷贝构造函数、转换构造函数、移动构造函数。 好像还有委托构造 默认构造和普通构造和java基本一样 详细 拷贝构造函…...

FRP 实现内网穿透

如何通过 FRP 实现内网穿透&#xff1a;群晖 NAS 的 Gitea 和 GitLab 访问配置指南 在自建服务的过程中&#xff0c;经常会遇到内网访问受限的问题。本文将介绍如何利用 FRP&#xff08;Fast Reverse Proxy&#xff09;来实现内网穿透&#xff0c;以便在外网访问群晖 NAS 上的…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关

在水泥厂的生产流程中&#xff0c;工业自动化网关起着至关重要的作用&#xff0c;尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关&#xff0c;为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多&#xff0c;其中不少设备采用Devicenet协议。Devicen…...

Spring Boot + MyBatis 集成支付宝支付流程

Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例&#xff08;电脑网站支付&#xff09; 1. 添加依赖 <!…...

基于开源AI智能名片链动2 + 1模式S2B2C商城小程序的沉浸式体验营销研究

摘要&#xff1a;在消费市场竞争日益激烈的当下&#xff0c;传统体验营销方式存在诸多局限。本文聚焦开源AI智能名片链动2 1模式S2B2C商城小程序&#xff0c;探讨其在沉浸式体验营销中的应用。通过对比传统品鉴、工厂参观等初级体验方式&#xff0c;分析沉浸式体验的优势与价值…...