使用 FRP 进行 Jupyter Notebook 的内网穿透访问

/ 0评 / 0

树莓派闲着也是闲着,现在宿舍不断网了,不如在上面跑个 Jupyter 当演草本。

安装 FRP

首先,在这里获得 frp 的安装包。树莓派对应 -linux_arm 包,而服务器则对应 -linux_amd64 包。

下载完成后解压,得到 frpsfrpc 以及其对应的 .ini 文件。

配置服务器

服务器使用 frps. 编辑 frps.ini, 写入如下内容并保存:

[common]
bind_port = xxxx
dashboard_port = xxxy
dashboard_user = username
dashboard_pwd = password
token = token
vhost_http_port = xxyy

当然等号后面的值是需要自己改的。xxxxfrps 监听的端口;xxxy 为控制面板端口;username 为登录控制面板的用户名;password 为登录控制面板的密码;token 则为验证客户端身份的穿透口令;xxyy 则为代理 HTTP 访问端口。

frps 复制到 /usr/bin/ 并将 frps.ini 复制到 /etc/frp/ (目录不存在则新建),完成后将 systemd/frps.service 复制到 /lib/systemd/system/ 下。

文件操作完成后执行命令:

# systemctl daemon-reload
# systemctl enable frps
# systemctl start frps

即可启动 frps 服务。服务启动完成确认无异常后,将服务器的 xxxxxxxy 端口开放。

配置穿透端

树莓派上使用 frpc. 编辑 frpc.ini 并将如下配置写入并保存:

[common]
server_addr = a.b.c.d
server_port = xxxx
token = token

[web]
type = http
local_port = 8888
custom_domains = jupyter.my.domain
use_compression = true
http_user = user
http_pwd = pwd

其中,a.b.c.d 是服务器的 IP 地址;xxxxtoken 与上面的值相同;userpwd 为进入该页面的身份(可选);jupyter.my.domain 为访问该页面的域名。

frpc 复制到 /usr/bin/, frpc.ini 复制到 /etc/frp/, 之后将 systemd/frpc.service 复制到 /lib/systemd/system/.

之后执行如下命令:

# systemctl daemon-reload
# systemctl enable frpc
# systemctl start frpc

启动 frpc. 此时登录服务器 a.b.c.d:xxxy, 可以看见出现了一个活动的 HTTP 穿透连接,表示配置成功。此时配置服务器的域名解析,将 jupyter.my.domain 指向 a.b.c.d.

安装 Jupyter

在树莓派上安装 Jupyter 是很简单的,一句话安装:

# apt-get update && apt-get install python3-matplotlib python3-spicy && pip3 install --upgrade pip && pip3 install jupyter

如果发现安装不动,考虑换国内镜像(包括 APT 镜像和 PyPI 镜像)。

完成安装后,执行 $ jupyter notebook --generate-config 生成默认配置 ~/.jupyter/jupyter_notebook_config.py,并作出如下更改(可以手动解除每一项的注释,或者直接追加以下内容到文件尾部):

c.NotebookApp.allow_origin = '*'
c.NotebookApp.allow_remote_access = True
c.NotebookApp.base_url = '/'
c.NotebookApp.ip = 'localhost'
c.NotebookApp.open_browser = False
c.NotebookApp.port = 8888
c.NotebookApp.trust_xheaders = True

完成后执行 $ jupyter notebook password 设置访问密码,之后新建 /lib/systemd/system/jupyter.service, 写入如下内容:

[Unit]
Description = Jupyter Notebook Service
After = network.target

[Service]
Type = simple
User = <你的用户名>
Restart = on-failure
RestartSec = 1m
ExecStart = /usr/local/bin/jupyter notebook
WorkingDirectory = /home/<你的用户名>

[Install]
WantedBy = multi-user.target

完成后执行以下指令启动 Jupyter:

# systemctl daemon-reload
# systemctl start jupyter

若要使其在开机时自动启动,则额外执行 # systemctl enable jupyter.

配置服务器转发

以 Apache 为例,在其配置文件追加如下内容:

<VirtualHost *:80>
        ServerName jupyter.my.domain
        ProxyPreserveHost on
        ProxyRequests off
        ProxyPass /api/kernels/ ws://localhost:xxyy/api/kernels/
        ProxyPassReverse /api/kernels/ ws://localhost:xxyy/api/kernels/
        ProxyPass / http://localhost:xxyy/
        ProxyPassReverse / http://localhost:xxyy/
</VirtualHost>

注意更改域名和 xxyy 的值。完成后重启 httpd 服务。

测试

以上步骤完成后,访问 http://jupyter.my.domain. 浏览器会要求你登录(如果配置了),此时使用 user, pwd 进行登录;而后 Jupyter 也会询问密码,此时使用在 $ jupyter notebook password 设置的密码登录。完成授权后,将可以正常使用 Jupyter Notebook.

后记 - 安装 Wolfram 计算核心

Jupyter Notebook 支持一票的计算核心。既然我们上了树莓派,那么肯定是要好好利用一下系统自带的 Wolfram Mathematica 了!

首先去这里下载最新的 paclet 文件到树莓派,重命名为 WolframJupyter.paclet, 然后执行 $ wolfram 并输入如下指令:

PacletInstall["WolframJupyter.paclet"]
Needs["WolframLanguageForJupyter`"]
ConfigureJupyter["Add"]

完成之后,执行 $ jupyter kernelspec list, 应该出现一行包含 wolframlanguage12 的可用内核。此时即可在 Jupyter Notebook 中新建 Wolfram 计算内核的笔记本了。

发表回复

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

Your comments will be submitted to a human moderator and will only be shown publicly after approval. The moderator reserves the full right to not approve any comment without reason. Please be civil.