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

推荐订阅源

V
V2EX
Recent Announcements
Recent Announcements
博客园 - 司徒正美
P
Proofpoint News Feed
博客园 - 聂微东
小众软件
小众软件
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
aimingoo的专栏
aimingoo的专栏
量子位
MyScale Blog
MyScale Blog
云风的 BLOG
云风的 BLOG
博客园 - Franky
B
Blog RSS Feed
F
Full Disclosure
The Cloudflare Blog
宝玉的分享
宝玉的分享
Last Week in AI
Last Week in AI
D
DataBreaches.Net
N
News and Events Feed by Topic
S
Secure Thoughts
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
V2EX - 技术
V2EX - 技术
L
LINUX DO - 最新话题
H
Heimdal Security Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Apple Machine Learning Research
Apple Machine Learning Research
L
LangChain Blog
Hugging Face - Blog
Hugging Face - Blog
C
Check Point Blog
U
Unit 42
G
Google Developers Blog
Forbes - Security
Forbes - Security
S
Schneier on Security
T
Threatpost
W
WeLiveSecurity
I
Intezer
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Security Latest
Security Latest
T
Troy Hunt's Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
I
InfoQ
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
有赞技术团队
有赞技术团队
S
Security Affairs
Cisco Talos Blog
Cisco Talos Blog
T
Tenable Blog
Simon Willison's Weblog
Simon Willison's Weblog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
V
Vulnerabilities – Threatpost

HANG ♥ WRITING

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 Data Jar:为捷径设计的数据库
云主机上快速搭建 Jupyter Notebook 服务
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 来查看容器终止运行的日志,进一步排查错误。

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