本篇文章将教你在 Ubuntu 服务器上安装 Jupyter Notebook,并使用 Nginx 和 SSL 证书进行安全配置。
我将带你一步步在云服务器上搭建 Jupyter Notebook 服务器。Jupyter Notebook 在数据科学和机器学习领域被广泛用于交互式编码、可视化和实验。在远程服务器上运行 Jupyter Notebook 可以让你安全地管理机器学习项目,共享笔记本,并利用服务器的计算能力。
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 进行远程连接。
输入 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