惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

SecWiki News
SecWiki News
I
InfoQ
The Cloudflare Blog
人人都是产品经理
人人都是产品经理
博客园 - Franky
T
Tailwind CSS Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
量子位
博客园_首页
罗磊的独立博客
V
V2EX
李成银的技术随笔
大猫的无限游戏
大猫的无限游戏
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
True Tiger Recordings
Vercel News
Vercel News
Cyberwarzone
Cyberwarzone
Cisco Talos Blog
Cisco Talos Blog
F
Fox-IT International blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
M
Microsoft Research Blog - Microsoft Research
Know Your Adversary
Know Your Adversary
爱范儿
爱范儿
The Register - Security
The Register - Security
G
Google Developers Blog
The Hacker News
The Hacker News
Malwarebytes
Malwarebytes
S
Securelist
博客园 - 三生石上(FineUI控件)
Jina AI
Jina AI
T
Threat Research - Cisco Blogs
T
The Exploit Database - CXSecurity.com
S
SegmentFault 最新的问题
博客园 - 叶小钗
F
Fortinet All Blogs
Apple Machine Learning Research
Apple Machine Learning Research
宝玉的分享
宝玉的分享
博客园 - 聂微东
T
Threatpost
博客园 - 【当耐特】
D
Docker
P
Privacy & Cybersecurity Law Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
G
GRAHAM CLULEY
V
Visual Studio Blog
C
Cisco Blogs
IT之家
IT之家
S
Security Archives - TechRepublic
Latest news
Latest news
阮一峰的网络日志
阮一峰的网络日志

HANG ♥ WRITING

Agents 当道,我们都可以被蒸馏成 Skills ChatGPT 问世两年,我在 AI 的辅助下成为了一名 iOS 业余开发者 如何使用 Netcat 构建简单的安全聊天系统 QuakeSense 震感,一款简洁原生的 iOS 地震通知 App App Store 中国大陆 ICP 备案最佳实践 几款有意思的 Google Chrome 侧边栏扩展应用 GetVM 让编程学习更快一步 WildCard (野卡) - 国内用户零门槛订阅 ChatGPT、Claude、App Store 万里汇开发者收款使用全指南 | 注册、开户与账户绑定教程 中国大陆居民开通华侨银行(OCBC)海外账户完全指南 实用的 macOS 内置命令,省下买第三方应用的钱 《认知觉醒》之触动学习法 不是程序员也可以搞开发,一小时入门 Retool 低代码 疫情来袭,手把手教你在家制作美味炒鸡 企业微信机器人 Webhook 推送语雀更新消息 基于 Cloudflare Workers 部署的 JSON Database 数据库 印象时间:印象笔记出品的时间管理应用 Pixelmator Photo 2.0: 桌面级功能并适配 iPhone Shortery:Mac 快捷指令自动化 Pixelmator Pro 2.3:AI 背景去除 Quit All:一键退出应用程序 Raycast:推出官方扩展商店和开发者平台 简悦 API 2.0:收藏助手和快照功能 HomePod mini 使用体验 Prizmo 5.5:扫描效果增强并新增批注功能 Notion:近期值得关注的新特性 Google Analytics 替代品,零成本和零门槛搭建 umami.is Infuse 7:一款近乎完美的视频播放器 Gyroscope 4.14:新的产品名称和多项改进 V day:在手机上创作短视频 Things 3.14:备注支持 Markdown,同步速度加快 MoneyWiz 2021:新的通知选项和视觉改善 Doppler:管理和分享你的本地音乐 CARROT Weather:5.3 带了多项新特性 Obsidian:知名知识管理工具推出移动应用 NOMO RAW:专业 ProRAW 相机 Tape:全能且好用的录屏软件 Apple Design Award 2021 Craft 1.6:每日笔记重磅更新 Trakt:官方 iOS 应用全新上线 Notion:支持 API 和自动化集成 Varlens:iOS 专业相机应用 Infuse 7:不只是 M1,支持所有 Mac 简悦:支持 API 和自动化流程 奇妙组件:小而美的自定义 iOS 小组件 Farbox 2:支持自部署和多站点的开源博客系统 图图记账:高颜值记账应用 Coppice:帮助整理你的想法 DarkModeBuddy:基于光线切换深色模式 走进微软成都 Office,聊一聊 Microsoft 365 HapiGo:符合国情的效率启动器 Eagle 2.0:数十项功能更新 + 数倍的性能提升 无需记账,通过更新余额了解自己有「多少资产」 Dato:支持日历和时区的菜单栏时钟 极具潜力的效率启动器 App,Raycast 脚本功能详解 Pixelmator Pro 2.0.2:增加新效果,支持 ProRAW Raycast:面向开发人员的效率启动器 Sorted:全新的 Mac 版本,原生支持 Apple Silicon App Store 和 Google Play 的 2020 年度 App 榜单 VSCO:全新的视频效果和拍摄模式 Pixelmator Pro 2.0:全新设计并支持 M1 芯片 Maipo 4:全功能新浪微博 macOS 客户端 Bartender 4:Mac 菜单栏定制工具 JSBox:适配并支持 iOS 14 小组件 Little Snitch 5:macOS 上出色的流量监控与防火墙应用 Photoshop:更多的 AI 创意工具 Capslox:文本操作快捷键增强效率工具 Airport:TestFlight 测试应用商店 Disk Drill 4:全新设计,支持 macOS 11 Big Sur OneWidget:小组件中的瑞士军刀 Todoist:新增看板视图 IFTTT Pro:合理的定价、全新的特性 PooPoo Privacy Policy QuakeSense Privacy Policy | 震感 App 隐私政策 ThenNow Privacy Policy | 今昔 App 隐私政策 LaunchBar 6.13:支持 macOS Big Sur 24 Hour Wallpaper:近百张 Mac 动态壁纸 简悦 2.0 阅读模式 + 标注系统 + 稍后读 绕过 App Store 付费,Setapp 采用新的 iOS 付费应用解锁策略 Noto 笔记:2.3 版本带来 10 余项功能更新 PliimPRO:让 Mac 一键进入演示模式 Pixelmator Pro 1.7:文字输入、画布旋转和 ML 超分辨率更新 Ulysses 20:新增导航面板和中文拼写检查 Mailbrew:新增 Inbox 集中订阅 Newletter Fluent Reader:免费跨平台 RSS 阅读器 Moment:高颜值 Mac 状态栏倒数日应用 Meeter:集中管理你的远程会议 Adobe Lightroom:新版带来了众多实用特性 WWDC:在 Mac 上观看 WWDC 直播和视频 LongWe:Mac 上的文本长图生成工具 Photoshop Camera:风格独特的艺术效果 Empoche:任务管理和时间追踪二合一 Camera+ 2:Magic ML 带来照片处理新魔法 Tuck:将窗口停靠在屏幕边缘 Wormhole:在电脑上操作 iOS 和 Android 设备 Coherence X:一键将网页转换为桌面应用 Charty:让快捷指令支持图表可视化 Edison Mail:又一款免费邮件客户端 Service Station:定制 Mac 右键菜单 WatchSmith:前所未有地个性化 Apple Watch
云主机上快速搭建 Jupyter Notebook 服务
huhuhang@gmail.com (huhuhang) · 2018-07-12 · via HANG ♥ WRITING

Jupyter Notebook 是机器学习和数据分析领域经常会使用的的 Web IDE 工具,本地使用非常方便。那么,如果你想在自己的云主机 AWS, GCP 等上搭建 Jupyter Notebook,并支持远程访问,该如何做呢?

首先,非常建议大家在 AWS, GCP 等境外云主机上搭建,相比于国内阿里云等有两个非常明显的优势:

  • 外网在安装各种模块和组件时非常方便,不用另外配置 Proxy。
  • 外网机器支持绑定未备案域名。

安装 Docker 容器服务

搭建 Jupyter Notebook 最便捷的方式是基于 Docker 容器服务,方便管理,不会污染主机环境且支持多人开启多个镜像同时使用。

当然,JupyterHub 本身就是一个支持多人使用的 Jupyter Notebook 环境,但是本文不会使用 JupyterHub。

Docker 容器服务可以非常方便地通过 Docker 官网给出的步骤完成,没有任何难度。

获取 Jupyter Notebook 镜像

Jupyter 官方给出了数个不同用途的镜像,都位于:https://github.com/jupyter/docker-stacks 开源仓库中。

这些镜像均提供了 Docker Hub 地址,只需要通过 docker pull 即可方便拉取。例如,如果你经常做数据分析,那么推荐拉取:

$ docker pull jupyter/datascience-notebook

上面的进行提供了 Python 和 R 语言的 Kernel,按预先安装好了常用的模块及 Anaconda 环境。不过,该镜像大小超过 2 GB,如果你用不到可以拉取基础镜像:

$ docker pull jupyter/base-notebook

安装 Let’s Encrypt 支持 HTTPS 访问

如果你想通过域名或 IP 远程访问 Jupyter Notebook 服务,那么非常推荐安装 SSL 证书支持 HTTPS 访问。这里使用 Let’s Encrypt 提供的免费证书。

你可以通过 Certbot 非常方便快捷地为域名生成 Let’s Encrypt 提供的免费证书。选择你使用的服务和系统:

服务选择 None of the above 即可,以 Ubuntu 16.04 为例,安装 Certbot 组件:

$ sudo apt-get update
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install certbot

使用 sudo certbot certonly 生成证书,按照提示一步一步完成即可。注意,生成证书时要保证 80 端口没有被占用。一般情况下,生成好的证书会在 /etc/letsencrypt/live/ 路径的下方。

注意,Let’s Encrypt 提供的免费证书默认有效期为 30 天,所以到期后需要通过 $ sudo certbot renew 来更新证书。

启动 Docker 容器服务

一切准备就绪,现在就可以启动 Docker 容器服务了。非常推荐写一个类似于 run-noteboot.sh 的 Bash 脚本,方便重复使用。

启动 Jupyter Notebook 容器服务的命令如下。我们以 notebook.example.com 域名为例:

docker run -d -p 443:8888 --name="jupyter-notebook-ssl" \
	--user root -e GRANT_SUDO=yes -e JUPYTER_ENABLE_LAB=yes \
	-v /etc/letsencrypt/live/notebook.example.com:/etc/ssl/notebook \
	jupyter/base-notebook start-notebook.sh \
	--NotebookApp.password='sha1:67c9e60bb8b6:9ffede0825894254b2e042ea597d771089e11aed' \
	--NotebookApp.certfile=/etc/ssl/notebook/fullchain.pem \
	--NotebookApp.keyfile=/etc/ssl/notebook/privkey.pem

其中:

  • -p 443:8888 :把 Jupyter Notebook 默认的 8888 端口指向 443 端口,以便通过 HTTPS 访问。
  • --name="jupyter-notebook-ssl" :启动后容器名字指定为 jupyter-notebook-ssl ,也可以不设置。
  • --user root -e GRANT_SUDO=yes:设置用户权限,方便在 Jupyter Notebook 使用 sudo 命令。
  • -e JUPYTER_ENABLE_LAB=yes:默认以 Jupyter Lab 新界面启动。
  • -v /etc/letsencrypt/live/notebook.example.com:/etc/ssl/notebook:将主机上生成的证书复制到容器中,否则容器会因为找不到证书而无法正常启动。/etc/letsencrypt/live/notebook.example.com 路径需要根据主机证书放置位置设定,: 后面路径可以不做更改。

接下来,就是启动镜像名称(jupyter/base-notebook)及设置其他参数,其中:

  • —NotebookApp.password= 为 Jupyter Notebook 环境设置登录密码,参数值可以通过下方的命令生成:
In [1]: from notebook.auth import passwd
In [2]: passwd()
Enter password:
Verify password:
Out[2]: 'sha1:67c9e60bb8b6:9ffede0825894254b2e042ea597d771089e11aed'

最后的两个参数是容器中的证书路径,即上面从主机复制证书到容器中时的 /etc/ssl/notebook 路径。你可以自行修改,但要保证路径一致,否则容器将无法正常启动。

如果你将上面的启动命令写入了 run-noteboot.sh 脚本中,只需要运行即可:

$ sh run-noteboot.sh

如果你已经正确设置了域名解析,现在就可以通过 https://notebook.example.com 来访问你的线上 Jupyter Notebook 环境了。

错误排除

如果不能正常访问,一般是容器没有正常启动造成的。首先,通过 $ docker ps,查看正在运行容器的列表。如果没有 jupyter-notebook-ssl,即代表容器未运行。此时,可以通过 $ docker logs jupyter-notebook-ssl 来查看容器终止运行的日志,进一步排查错误。

搭建环境的小坑还是比较多,如果遇到报错无法解决,可以通过搜索引擎获得合适的解答。