写点什么

终于“打造”出了一个可以随时随地编程的工具

作者:老表
  • 2022 年 1 月 14 日
  • 本文字数:3715 字

    阅读完需:约 12 分钟

终于“打造”出了一个可以随时随地编程的工具

这是老表 1 月的第 1 篇更文分享~记得关注我,坚持分享编程开发、数据分析、机器学习等学习笔记。


跟老表一起学云服务器开发相关文章(如果是第一次阅读该系列文章, 强烈建议先学习下面文章):


先导篇:拥有有一台服务器后,我竟然这么酷?


替代项目:10行代码写一个简历页面!


和不安全访问 Say goodbye,手把手教大家如何给域名申请免费 SSL 证书


Linux里的宝塔,真正的宝塔!详细教程


终于有了一个人人可以访问的网站了


如何用 Python 发送告警通知到钉钉?


如何用 Python 自动发送微博?

一、前情回顾

上周开启了一个新的专栏(视频教程):跟老表学 Python,主要针对零基础小白,在第一集里包含了 6 个部分,从 Python 入门学习思路到环境、工具安装使用,其中最后一节讲了如何开启 jupyter 远程连接功能,实现随时随地编程。



视频教程是使用 windwos 系统演示的,本问将图文分享如何将自己的 Linux 服务器打造成一个随时随地可以访问和编程的平台。


本质过程是差不多的,使用 windows 的读者可以直接看视频教程(点击阅读原文直达/复制链接浏览器访问):点击观看

二、分享概要

  • 系统:阿里云 ECS 共享型 n4 服务器 1 核 2g 存储 50g(双十一便宜买的,180 元/3 年)



  • 环境:自带 python3.6.8 方便演示,直接使用它

三、开始动手动脑

首先我们需要连接上服务器,我直接使用宝塔面板登录,如果还不知道如何安装使用宝塔的读者可以看Linux里的宝塔,真正的宝塔!详细教程,直接通过宝塔连接上服务器后,点击终端,即可进入服务器命令模式,进行操作。


3.1 安装 jupyter

pip3 install jupyter
复制代码


3.2 生成 jupyter 配置文件

jupyter notebook --generate-config
复制代码



如上图显示,我的配置文件目录为:/root/.jupyter/jupyter_notebook_config.py

3.3 进入配置文件,修改配置

这里给大家推荐一个 Linux 下比 vim 更适合初学者的文件编辑工具:nano


直接输入 nano + 需要修改的文件路径即可进入对应文件的编辑模式。


nano /root/.jupyter/jupyter_notebook_config.py
复制代码



  • 修改 host,设置为*,表示允许所有 ip 进行访问



  • 修改远程访问设置,改为 True,表示允许远程连接访问



这时我们可以先进行保存文件,按ctrl+o保存文件,然后按ctrl+x退出编辑模式。


  • 设置连接登录密码(远程连接需要 token,设置密码更简单)


终端输入下面指令进行设置密码:


jupyter notebook password
复制代码



设置好密码后,jupyter 会对密码进行 hash 加密,然后会以 json 格式存储到本地,我们需要打开密码文件,复制出密码对应的 hash 值,然后配置到 jupyter 的配置文件中。


nano /root/.jupyter/jupyter_notebook_config.json
复制代码



复制出密码 hash 值后,我们再次打开 jupyter 配置文件,


nano /root/.jupyter/jupyter_notebook_config.py
复制代码


按住ctrl+w进入搜索模式,输入notebookapp.password进行搜索,然后将复制好的密码 hash 值粘贴到对应位置即可,然后按ctrl+o保存文件,然后按ctrl+x退出编辑模式。



总共修改了三个配置,如下:


## The IP address the notebook server will listen on.c.NotebookApp.ip = '*'
# Local IP addresses (such as 127.0.0.1 and ::1) are allowed as local, along# with hostnames configured in local_hostnames.c.NotebookApp.allow_remote_access = True
## 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.c.NotebookApp.password = '你的密码hash值'
复制代码

3.4 进入服务器后台,允许外部通过 8888 端口访问服务器

阿里云服务器是安全策略组,腾讯云服务器是防火墙,到对应位置添加端口即可。


进入服务器后台(以阿里云为例子),点击实例->安全组->配置规则,即可进入。



入方向,点击手动添加,其他不管,主要输入端口范围:8888/8888,授权对象:0.0.0.0,然后保存即可。


3.5 终端启动 jupyter,尝试远程连接

如果出现下面错误,不慌。


[root@xxx ~]# jupyter notebook[W 15:24:56.017 NotebookApp] WARNING: The notebook server is listening on all IP addresses and not using encryption. This is not recommended.[C 15:24:56.021 NotebookApp] Running as root is not recommended. Use --allow-root to bypass.
复制代码


第一个关于 ip 的警告我们不用管,主要是第二个不能使用 root 权限运行,我们可以按提示直接输入:


jupyter notebook --allow-root
复制代码


或者修改下 jupyter 的配置文件中的allow_root为 True 即可。



## Whether to allow the user to run the notebook as root.c.NotebookApp.allow_root = True
复制代码


再次输入jupyter notebool即可成功启动 jupyter 服务,默认开启在 8888 端口。


我们本地可以通过:服务器公网ip:8888进行访问,首先进入输入密码界面。



密码输入成后,即可进入到 jupyter 的首页(home 页面),默认是根目录(可以改)。



新建一个 ipynb 文件,随便输入点代码,nice。


  • 电脑显示


  • ipad 横屏显示


  • 手机横屏显示


3.6 后台设置守护进程,避免关闭终端后杀死进程

以我自己为例,我们登录宝塔面板后,进入/etc/systemd/system文件夹下,新建一个jupyter_me.service文件,并写入下面内容:


[Unit]Description=Jupyter Service
[Service]Type=forkingExecStart=/usr/bin/python3 -m IPython notebookKillMode=processRestart=on-failureRestartSec=3s
[Install]WantedBy=multi-user.target
复制代码


简单解释下Service里设置的含义,Type=forking表示程序启动后,会放到后台运行;ExecStart服务的具体执行指令(执行 scheduler.py 文件即可);KillMode=process表示服务停止的同时也会杀死程序主进程;Restart=on-failure表示系统发生意外导致程序退出时,程序自动重启。


保存好文件后,我们直接终端内执行下面指令即可开启进程守护,运行后会进入守护进程状态,我们可以按 ctrl+c 退出,不会影响守护进程:


systemctl start jupyter_me
复制代码


如果不确定是否启动成功,可以通过下面命令查看对应进程状态。


systemctl status jupyter_me
复制代码



如果不想设置这个守护进程了,执行 stop 指令可以停止该 service(程序也会停止),指令如下:


systemctl stop jupyter_me
复制代码

3.7 关于 jupyter 的其他配置修改

  • jupyter 首(Home)页对应的目录(默认为用户根目录)


## The directory to use for notebooks and kernels.#  Default: ''c.NotebookApp.notebook_dir = '你自己想用的目录'
复制代码


  • 启动 jupyter 的同时是否自动浏览器打开(默认开启),我们在 linux 下使用,就可以设置为 False。


## Whether to open in a browser after starting.#                          The specific browser used is platform dependent and#                          determined by the python standard library `webbrowser`#                          module, unless it is overridden using the --browser#                          (NotebookApp.browser) configuration option.#  Default: Truec.NotebookApp.open_browser = False
复制代码


  • jupyter 默认启动在哪个端口(默认 8888),可以修改成自己想要的,默认值大家都知道,容易被攻击。


## The port the notebook server will listen on (env: JUPYTER_PORT).#  Default: 8888c.NotebookApp.port = 7777
复制代码


  • 使用 SSL 进行加密通信,更安全


另外,为了更安全的进行远程连接访问、使用 jupyter,我们可以给其使用 SSL 进行加密通信,确保数据传输更安全。


我们需要先生成证书(和给服务器配置证书一样),你可以看看

和不安全访问 Say goodbye,手把手教大家如何给域名申请免费 SSL 证书


按官网提示,我们也可以直接使用 openssl 去创建自签名 SSL 证书。



官网相关介绍地址:https://jupyter-notebook.readthedocs.io/en/stable/public_server.html#using-ssl-for-encrypted-communication


我这边 Linux 下是自带 openssl 的,如果没有,你可以直接使用yum install openssl进行安装。



创建一个目录存放证书,然后输入创建自签名 SSL 证书的指令,按要求输入国家、省、城市、公司、部门、常用名、邮箱即可。


mkdir ssl && cd sslopenssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mykey.key -out mycert.pem
复制代码



生成好证书后,我们需要修改下 jupyter 配置文件,首先进入:


nano /root/.jupyter/jupyter_notebook_config.py
复制代码


找到certfilekeyfile,写入对应文件的路径即可。


## The full path to an SSL/TLS certificate file.c.NotebookApp.certfile = '/root/ssl/mycert.pem'
## The full path to a private key file for usage with SSL/TLS.c.NotebookApp.keyfile = '/root/ssl/mykey.key'
复制代码


理论上,我们再重启下 jupyter 守护进程(重启服务),就可以了。


systemctl restart jupyter_me
复制代码


但是我本地访问https://公网ip地址:8888,却显示不是私密连接。。。



然后关了守护进程,直接服务器启动 jupyter,再访问,看日志显示SSL: SSLV3_ALERT_CERTIFICATE_UNKNOWN,查了下,说是证书问题?改成之前申请的证书也不行,我再研究研究,下次聊!



欢迎大家有了解的读者进行学习交流,一起进步。

下期预告

之前说的钉钉企业机器人自动回复配置,也有读者在催稿了,最近两天安排上哦~


好的,那么下期见,我是爱猫爱技术,更爱思思的老表⁽⁽ଘ( ˙꒳˙ )ଓ⁾⁾

发布于: 刚刚阅读数: 2
用户头像

老表

关注

公众号|简说Python 2018.09.23 加入

【公众号:简说Python】爱猫爱技术,Python终身学习者、数据分析爱好者、Go语言内卷机。

评论

发布
暂无评论
终于“打造”出了一个可以随时随地编程的工具