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

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

简说Python,号主老表,Python终身学习者,数据分析爱好者,从18年开始分享Python知识,原创文章227篇,写过Python、SQL、Excel入门文章,也写过Web开发、数据分析文章,老表还总结整理了一份2022Python学习资料和电子书资源,关注后私信回复:2022 即可领取。

一、前情回顾

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


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

本质过程是差不多的,使用windows的读者可以直接看视频教程(点击阅读原文直达/复制链接浏览器访问):https://www.bilibili.com/video/BV1Rb4y1n7M5?p=6

B站账号:老表Max

image.png

二、分享概要

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

image.png

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

三、开始动手动脑

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

image.png

3.1 安装jupyter

pip3 install jupyter

image.png

3.2 生成jupyter配置文件

jupyter notebook --generate-config

image.png

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

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

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

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

nano /root/.jupyter/jupyter_notebook_config.py

image.png

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

image.png

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

image.png

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

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

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

jupyter notebook password

image.png

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

nano /root/.jupyter/jupyter_notebook_config.json

image.png

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

nano /root/.jupyter/jupyter_notebook_config.py

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

image.png

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

## 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端口访问服务器

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

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

image.png

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

image.png

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即可。

image.png

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

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

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

image.png

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

image.png

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

image.png电脑显示

image.png

ipad横屏显示

image.png

手机横屏显示

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

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

[Unit]
Description=Jupyter Service
[Service]
Type=forking
ExecStart=/usr/bin/python3 -m IPython notebook
KillMode=process
Restart=on-failure
RestartSec=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

image.png

如果不想设置这个守护进程了,执行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: True
c.NotebookApp.open_browser = False
  • jupyter默认启动在哪个端口(默认8888),可以修改成自己想要的,默认值大家都知道,容易被攻击。
## The port the notebook server will listen on (env: JUPYTER_PORT).
#  Default: 8888
c.NotebookApp.port = 7777
  • 使用 SSL 进行加密通信,更安全

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

我们需要先生成证书(和给服务器配置证书一样),你可以看看手把手教大家如何给域名申请免费SSL证书

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

image.png

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

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

image.png

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

mkdir ssl && cd ssl
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mykey.key -out mycert.pem

image.png

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

nano /root/.jupyter/jupyter_notebook_config.py

找到certfile和keyfile,写入对应文件的路径即可。

## 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,却显示不是私密连接。。。

image.png

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

image.png

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

下期预告

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

相关文章
|
9月前
|
前端开发 数据可视化 测试技术
自从用了这款接口神器,团队效率提升了 60%,必须推荐
做技术管理的童鞋,往往会陷入这样一种困境:疲于奔命,到处救火填坑,沟通推进,却挤不出时间思考对团队和项目来说真正重要的事情。
|
12天前
|
传感器 测试技术 项目管理
高效远程LabVIEW开发者的最佳实践与经验分享
高效远程LabVIEW开发者的最佳实践与经验分享
21 5
|
2月前
盘点效率工具RunFlow那些容易被忽略的功能
RunFlow隐藏实用功能一览:固定工作窗口、预览菜单、浏览器直接打开剪贴板URL、多行输入(Ctrl+Enter换行)、固定结果展示。提升效率,从发现这些小窍门开始。
25 4
盘点效率工具RunFlow那些容易被忽略的功能
|
2月前
|
机器学习/深度学习 测试技术 Android开发
安卓应用程序开发:构建高效、可靠的移动体验
【5月更文挑战第27天】 在数字化时代,安卓平台的应用程序已成为连接用户和信息的重要桥梁。本文深入探讨了安卓应用开发的关键要素,包括性能优化、内存管理、用户界面设计和最新技术的集成。通过分析具体案例和提供实践策略,旨在指导开发者构建既高效又可靠的移动体验。
|
2月前
|
JSON 开发者 数据格式
开发者的瑞士军刀:DevToys带你探索更简单、更便捷的开发方式
开发者的瑞士军刀:DevToys带你探索更简单、更便捷的开发方式
56 0
|
2月前
|
定位技术
推荐5款小而强大的工具,让生活更便捷丰富
随着科技的不断进步,我们的生活变得更加便捷和丰富。今天,让我们一同了解一些小而强大的工具,它们能够为我们的日常带来更多的便利和乐趣。
67 1
|
2月前
|
编解码 监控 安全
电脑高效率工作、学习工具软件推荐
电脑高效率工作、学习工具软件推荐
|
2月前
|
存储 固态存储 IDE
分享5款为你生活带来便捷的小工具
生活需要一些小巧而贴心的工具,它们能够在细节处为我们带来便捷。这五款工具简洁而实用,看看它们是否适合融入你的生活。
142 0
|
10月前
|
搜索推荐 数据安全/隐私保护 iOS开发
推荐5款我常用的免费软件,办公学习更高效
今天给大家推荐5个我自己也常用的软件,可以解决很多问题,给你的学习和办公带来巨大帮助。
111 0
|
XML SQL JSON
程序员开发常用的云在线工具
云在线开发工具:代码格式化,base64/md5加密解密,utf-8转换,时间戳在线生成
195 0