USAGI NOTE | 木星进化理论

> U酱收藏了一篇笔记,小兔报告说。
> 据小兔观察,主要的内容是:
> Jupyter Notebook / Lab环境的折腾记录。


首先,木星是Jupiter,而今天的主角是Jupyter
不过活性酱寻思这也没差多少,就这样8

按活性酱的理解,Jupyter这种一个一个细胞的设计
最合适初学的玩家反复订正代码块了
还有markdown和shell嵌入也很好
总之好处都有啥,谁说对了就给她

Lv0 在本机玩Jupyter Notebook

其实这并不是活性酱最开始的做法,
不过和别的部分关联比较小,
所以还是单独拿出来说说吧

首先嘞,Python总是要装一个的,
pip组件也要一起装上,
然后开出一个管理员的抛瓦Shell其实cmd也行

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
python -m pip install -U pip
pip install -U jupyter

注意在Windows下绝对不可以执行pip install -U pip
因为Windows中运行pip就会占用自身
然后导致更新后的pip放不进去
这就算了吧,删除却还是能删除的
于是pip自爆了,只能手动重新安装

安装完之后,离开管理员的抛瓦,
开一个正常的,然后执行:

jupyter notebook

之所以强调离开管理员窗口,
是因为Jupyter默认使用的根目录就是运行目录
如果在管理员抛瓦下运行
就会跑到system32目录去
虽然Jupyter已经自动隐藏了系统文件
但这样的操作终究还是太危险了
而且跑点Python也用不着管理员权限嘛

想要到指定目录而不是用户目录的话,
好好利用Shift+右键吧
什么 你在cd……

其实,既然已经是在Windows上了
不妨把图形界面发挥到底
VS Code的Python插件现已支持jupyter
只要用它打开ipynb文件,
就会自动加载Notebook视图

VS Code它不香吗

唯一不好就是打开新的文件时
会先出现源代码,
又在右边开出一个Notebook视图
然后关闭原来的标签
过程看上去很生硬

但是,不用打命令行了,又有谁不说好呢 :)

Lv1 Simple but work的在线运行

比如说嘛,手里有个树莓派的话
把Jupyter挂在上面运行不是很好么
假设树莓派的域名是raspberrypi.local
而Jupyter运行在/jupyter目录下

这里可以用一下venv模块
使得Jupyter使用的包和系统隔离
同时也应该建立一个非特权用户
来负责服务端的运行

因为服务端本来就会产生一个.jupyter
所以活性酱干脆把venv也命了同一个名字
目前为止还没造成任何不良影响

apt install python3-venv -y
useradd -s /bin/bash -m venv
su - venv
python3 -m venv .jupyter
source .jupyter/bin/activate
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip install -U pip
pip install jupyter

先造出一个配置文件jupyter notebook --generate-config
然后编辑.jupyter/jupyter_notebook_config.py
在末尾增加以下参数

c.NotebookApp.allow_origin = '*'
c.NotebookApp.base_url = '/jupyter'
c.NotebookApp.notebook_dir = '/home/venv/jupyter_root'
c.NotebookApp.open_browser = False
c.NotebookApp.password = 'sha1:seyanasoyanasorenaarena'
c.NotebookApp.quit_button = False

关于c.NotebookApp.password,源文件的注释是这么写的

## Hashed password to use for web authentication.
#  To generate, type in a python/IPython shell:
#    from notebook.auth import passwd; passwd()
#  The string should be of the form type:salt:hashed-password.

活性酱的偷懒路线是这样的——

  • 在vim命令模式用/passwd查找并复制好这一行
    from notebook.auth import passwd; passwd()
  • 在命令模式下打出 UMB式密码生成
    :!uuid|md5sum|base64;python3
    有些系统的命令是uuidgen,TAB请
  • 执行,此时输出第一行是很长的一段字母数字混合字符串
    然后是Python的交互式命令行
    粘贴刚才复制的代码并执行
    出现Enter password:的询问
  • 从上面的字符串选择一段看得顺眼的
    粘贴回车 粘贴回车
    得到hash好的密码字符串
    随便开个记事本,或者Win+R
    总之把密码原文暂存一下
  • 把hash好的字符串复制起来
    回vim粘贴保存退出一气呵成
  • 创建配置文件中写的文件根目录
    这里是mkdir ~/jupyter_root
    打开tmux,载入venv
    最后运行jupyter notebook

正确无误的话,就会出现如下的输出

[I 23:11:06.931 NotebookApp] Serving notebooks from local directory: /home/venv/jupyter_root
[I 23:11:06.931 NotebookApp] The Jupyter Notebook is running at:
[I 23:11:06.932 NotebookApp] http://localhost:8888/jupyter/
[I 23:11:06.932 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).

此时可以访问http://raspberrypi.local:8888
并把刚存的密码打进去测试一下,顺便记住

如果是用公网服务器的话
就必须部署https才行了
活性酱继续用Apache :)
并且假定域名是example.org
这里主要注意的是
Jupyter有两个路径监听WebSocket
Apache不安装相应模块的话
就无法正常工作

a2enmod proxy_http
a2enmod proxy_wstunnel
service apache2 restart

然后我们来为难Apache配置文件

cd /etc/apache2/sites-available
cat 000-default.conf|grep -Ev '$^|#' > example.conf
vim example.conf

活性酱喜欢一个d$把ServerAdmin杀了
改成ServerName example.org
然后加入反向代理配置

    # Jupyter Notebook begin
    <Location /jupyter/api/kernels >
        ProxyPass ws://localhost:8888/jupyter/api/kernels
        ProxyPassReverse ws://localhost:8888/jupyter/api/kernels
    </Location>
    <Location /jupyter/terminals/websocket >
        ProxyPass ws://localhost:8888/jupyter/terminals/websocket
        ProxyPassReverse ws://localhost:8888/jupyter/terminals/websocket
    </Location>
    ProxyPass /jupyter http://localhost:8888/jupyter
    ProxyPassReverse /jupyter http://localhost:8888/jupyter
    # Jupyter Notebook end.

经过service apache2 reload
就可以访问http://example.org/jupyter
到这一步要部署https就极其简单
certbot随便涂两笔就好了

这个标记说明博文并没有完成

那么是谁放上来的呢

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注