如何在 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/918961.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Pikachu】XML外部实体注入实战

若天下不定&#xff0c;吾往&#xff1b;若世道不平&#xff0c;不回&#xff01; 1.XXE漏洞实战 首先写入一个合法的xml文档 <?xml version "1.0"?> <!DOCTYPE gfzq [<!ENTITY gfzq "gfzq"> ]> <name>&gfzq;</name&…

Docker安装稳定版本nginx-1.26.2

Linux 安装稳定版本nginx-1.20.2 1、下载镜像、场景配置文件目录 [rootTseng ~]# docker pull nginx:1.26.2 1.26.2: Pulling from library/nginx 2d429b9e73a6: Pull complete 40a0d865309c: Pull complete a949b43e642c: Pull complete 8a756fb620a9: Pull complete 93…

训练误差or测试误差与特征个数之间的关系--基于R语言实现

a 生成数据集&#xff0c;数据由 Y X β ϵ YX\beta\epsilon YXβϵ产生&#xff0c;其中 p 20 &#xff0c; n 1000 p20&#xff0c;n1000 p20&#xff0c;n1000 #way1 set.seed(1) p 20 n 1000 x matrix(rnorm(n*p), n, p) B rnorm(p) B[3] 0 B[4] 0 B[9] 0 B[19…

kafka基础

文章目录 一、Kafka入门1.1、JMS1.2、生产者-消费者模式1.3、ZooKeeper 二、kafka基础架构2.1、producer2.2、kafka cluster2.2.1、broker2.2.2、Controller2.2.3、Topic2.2.4、Partition2.2.5、Replication2.2.6、Leader & Follower 2.3、consumer 一、Kafka入门 Kafka是一…

HarmonyOs鸿蒙开发实战(10)=>状态管理-对象数组的属性数据变更刷新UI,基于@Observed 和@ObjectLink装饰器

1.条件:基于HarmonyOs5.0.0版本. 2.功能要求&#xff1a;横向列表中每个景点的名称&#xff08;eg: 第二项 “灵隐寺” &#xff09;, 在通过天气接口拿到对应天气后&#xff0c;拼接到名称后面 > 变成&#xff08;“灵隐寺” 天气&#xff09;&#xff09; 3.老规矩先看…

诡异错误:返回给前端的id被前端自动修改

使用mybatis-plus生成的id&#xff0c;使用雪花算法&#xff0c;是一个long类型的id。 当调用list接口返回给前端后&#xff0c;接口显示数据正常&#xff0c;但是界面上的id不对&#xff0c;多了好几个0&#xff0c;数据都是以0结尾。 由于前端使用vue编写&#xff0c;我不太会…

Django5 2024全栈开发指南(一):框架简介、环境搭建与项目结构

目录 一、Python Web框架要点二、Django流程2.1 Django介绍2.1.1 简介2.1.2 特点2.1.3 MVT模式2.1.4 Django新特性2.1.5 Django学习资料 2.2 搭建Django框架开发环境2.2.1 安装Python语言环境2.2.2 安装Django框架 2.3 创建Django项目2.4 Pycharm创建项目2.5 初试Django52.5.1 …

大模型研究报告 | 2024年中国金融大模型产业发展洞察报告|附34页PDF文件下载

随着生成算法、预训练模型、多模态数据分析等AI技术的聚集融合&#xff0c;AIGC技术的实践效用迎来了行业级大爆发。通用大模型技术的成熟推动了新一轮行业生产力变革&#xff0c;在投入提升与政策扶植的双重作用下&#xff0c;以大模型技术为底座、结合专业化金融能力的金融大…

深入内核讲明白Android Binder【一】

深入内核讲明白Android Binder【一】 前言一、Android Binder应用编写概述二、基于C语言编写Android Binder跨进程通信Demo0. Demo简介1. 服务的管理者server_manager.c2. Binder服务端代码实现 test_service.c2.1 实现思路2.2 完整实现代码 3. Binder客户端代码实现 test_clie…

新一代API开发工具,让API调试更快 更简单

新一代API开发工具 代理调试 请求测试一站式解决方案 Reqable Fiddler Charles Postman, 让API调试更快 &#x1f680; 更简单 &#x1f44c; 直接上下载地址 根据系统,下载对应的版本即可 https://reqable.com/zh-CN/download/

LVGL-从入门到熟练使用

LVGL简介 LVGL&#xff08; Light and Versatile Graphics Library &#xff09;是一个轻量、多功能的开源图形库。 1、丰富且强大的模块化图形组件&#xff1a;按钮 、图表 、列表、滑动条、图片等 2、高级的图形引擎&#xff1a;动画、抗锯齿、透明度、平滑滚动、图层混合等…

从视频帧生成点云数据、使用PointNet++模型提取特征,并将特征保存下来的完整实现。

文件地址 https://github.com/yanx27/Pointnet_Pointnet2_pytorch?spm5176.28103460.0.0.21a95d27ollfze Pointnet_Pointnet2_pytorch\log\classification\pointnet2_ssg_wo_normals文件夹改名为Pointnet_Pointnet2_pytorch\log\classification\pointnet2_cls_ssg "E:…

时间序列关于可解释性值得关注的论文汇总-第2篇

前言 这是时序可解释性论文汇总的第二篇&#xff0c;第一篇见这里&#xff08;后台回复&#xff1a;“论文合集”可直接获取整理的文章&#xff09;。深度学习的可解释性研究一直是热门&#xff0c;而时间序列的可解释性同样非常重要。这是因为时序模型被大量应用到特定领域&a…

DataStream编程模型之数据源、数据转换、数据输出

Flink之DataStream数据源、数据转换、数据输出&#xff08;scala&#xff09; 0.前言–数据源 在进行数据转换之前&#xff0c;需要进行数据读取。 数据读取分为4大部分&#xff1a; &#xff08;1&#xff09;内置数据源&#xff1b; 又分为文件数据源&#xff1b; socket…

Java面试题2024-Java基础

Java基础 1、 Java语言有哪些特点 1、简单易学、有丰富的类库 2、面向对象&#xff08;Java最重要的特性&#xff0c;让程序耦合度更低&#xff0c;内聚性更高&#xff09; 3、与平台无关性&#xff08;JVM是Java跨平台使用的根本&#xff09; 4、可靠安全 5、支持多线程 2、…

数据结构(基本概念及顺序表——c语言实现)

基本概念&#xff1a; 1、引入 程序数据结构算法 数据&#xff1a; 数值数据&#xff1a;能够直接参加运算的数据&#xff08;数值&#xff0c;字符&#xff09; 非数值数据&#xff1a;不能够直接参加运算的数据&#xff08;字符串、图片等&#xff09; 数据即是信息的载…

使用爬虫获取的数据如何有效分析以优化店铺运营?

在数字化时代&#xff0c;数据已成为电商运营的核心。通过爬虫技术&#xff0c;我们可以从淘宝等电商平台获取大量数据&#xff0c;这些数据如果得到有效分析&#xff0c;将极大助力店铺运营的优化。本文将探讨如何使用爬虫技术获取数据&#xff0c;并利用数据分析来优化店铺运…

c++类对象练习

#include <iostream> #include <cstring>using namespace std;class mystring {char* buf; public:mystring(); //构造函数mystring(const char* str); //构造函数void show(); //输出函数void setmystr(const mystring str); //设置函数const char* getmystr() co…

后端:Spring AOP原理--动态代理

文章目录 1. Spring AOP底层原理2. 代理模式3. 静态代理4. 动态代理4.1 jdk 实现动态代理4.2 cglib 实现动态代理4.3 jdk、cglib动态代理两者的区别 1. Spring AOP底层原理 创建容器 new applicationContext()&#xff1b;Spring把所有的Bean进行创建&#xff0c;进行依赖注入…

微信小程序 最新获取用户头像以及用户名

一.在小程序改版为了安全起见 使用用户填写来获取头像以及用户名 二.代码实现 <view class"login_box"><!-- 头像 --><view class"avator_box"><button wx:if"{{ !userInfo.avatarUrl }}" class"avatorbtn" op…