当前位置: 首页 > 编程日记 > 正文

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

9b97ae3fe9722e1f7d81b9ea5de3449f.gif

作者 | 老表

来源丨简说Python

分享概要

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

2949a60342e30b439b5726e67a25e845.png

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

开始动手动脑

首先我们需要连接上服务器,我直接使用宝塔面板登录,直接通过宝塔连接上服务器后,点击终端,即可进入服务器命令模式,进行操作。

2649da37314687aec7db0b775b03b18c.png

安装jupyter

pip3 install jupyter

1cd8a71d37411d903075201f242d7aa6.png

生成jupyter配置文件

jupyter notebook --generate-config

b9a77016927d74f679d0964aebabb29c.png

如上图显示,我的配置文件目录为:

/root/.jupyter/jupyter_notebook_config.py

进入配置文件,修改配置

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

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

nano /root/.jupyter/jupyter_notebook_config.py

61f84ab9f42637918852ee5249f75fc3.png

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

5f7c30764e5c9c0666a5d7a6d013f42f.png

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

5ecbaee0e8d03c3061c67026bdb879c1.png

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

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

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

jupyter notebook password

05dd72b7c84cef1b881d16287027dd42.png

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

nano /root/.jupyter/jupyter_notebook_config.json

627d047a5f0d1d03c47a49e48d4920e1.png

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

nano /root/.jupyter/jupyter_notebook_config.py

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

e176a0b7c84641195eeddf03b5f6b6d0.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值'

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

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

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

823ce0f12387144cc066150fd39ac61a.png

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

0854579c3ddd28f26d5467d014d0190f.png

终端启动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即可。

1dbd07ddb7ac181fad2edc6108161e1b.png

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

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

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

ba46598959ff575973866d30fd494a1b.png

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

60c8e91fc9604c620f4f6931ee0a4721.png

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

ceeeafaaabfd78e2b6d95ae292a74ba4.png

电脑显示
b6ea1c1759eabfc2751d7eff3fe346fc.png
ipad横屏显示
d85691d67affb6b852e52f1380f4bb2d.png
手机横屏显示

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

以我自己为例,我们登录宝塔面板后,进入/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

aba638ca0922409c5bba9caf9af0bf12.png

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

systemctl stop jupyter_me

关于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进行加密通信,确保数据传输更安全。

我们需要先生成证书(和给服务器配置证书一样),按官网提示,我们也可以直接使用openssl去创建自签名 SSL 证书。

f83ae66a7609b38c4f79a59ad03f0c97.png

官网相关介绍地址:

https://jupyter-notebook.readthedocs.io/en/stable/public_server.html#using-ssl-for-encrypted-communication

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

72b576d763a1c346b004ee42efc99541.png

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

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

baaa333ae8730e7a49a320f993a3f619.png

生成好证书后,我们需要修改下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,却显示不是私密连接。。。

d3a28633f9e5cac902c95cf283874a20.png

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

e11159f1664d2ab6c0a488c87e301172.gif

技术

用Python写了个使命召唤外挂

资讯

俄罗斯 Android 系统受限

技术

这个插件超赞!还能自动生成代码

技术

一行Python代码能干嘛?来看!

85281fac4ca9f5148fcf57d2a31f4a81.png

分享

ce2c098751120ba7ade6f729601a5af1.png

点收藏

d359563ccedefd974b561b90f3991b85.png

点点赞

95d86e630fb5ef8f43a9f1b5875df422.png

点在看

相关文章:

JVM堆 栈 方法区详解

一、栈 每当启用一个线程时,JVM就为他分配一个JAVA栈,栈是以帧为单位保存当前线程的运行状态 栈是由栈帧组成,每当线程调用一个java方法时,JVM就会在该线程对应的栈中压入一个帧 只有在调用一个方法时,才为当前栈分配一…

ECSHOP学习笔记

帮助 http://help.ecshop.com/index.phpECSHOP各文件夹功能说明 1、根目录:前台程序文件2、admin:后台程序文件夹 --根目录:后台程序文件 *.php文件 --help\zh_cn:各功能的帮助文件 *.xml文件 --images:后台页面…

Redis主从复制配置

环境描述Redis Master:192.168.1.100 6379(Ubuntu系统)Redis Slave1:192.168.1.101 6380(Ubuntu系统)Redis Slave2:192.168.1.102 6381(Ubuntu系统) 安装redis分别在192.168.1.100、192.168.1.101、192.168.1.102三台机器上安装redis&#xf…

利用 Python 打造一个语音合成系统

作者 | thedaydreamer来源丨CSDN博客背景一直对语音合成系统比较感兴趣,总想能给自己合成一点内容,比如说合成小说,把我下载的电子书播报给我听等等。语音合成系统其实就是一个基于语音合成的工具,但是这个东西由于很多厂家都提供…

干货:排名前 16 的 Java 工具类!

2019独角兽企业重金招聘Python工程师标准>>> 干货:排名前 16 的 Java 工具类! 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类。以下工具类、方法按使用流行度排名&#xf…

使用ecshop电子商务系统的100个小问题

总结100条关于操作ecshop电子商务系统的小问题。1:如何修改网站"欢迎光临本店"回答:languages\zh_cn\common.php文件中, $_LANG[welcome] 欢迎光临本店;将他修改成你需要的字样。2:如何修改首页"热门搜索关键字"回答:后台->系统设置->网…

MyCAT常用分片规则之分片枚举

MyCAT支持多种分片规则,下面测试的这种是分片枚举。适用场景,列值的个数是固定的,譬如省份,月份等。 在这里,需定义三个值,规则均是在rule.xml中定义。 1. tableRule 2. function 3. mapFile 首先&#xff…

手把手带你打造一款 签名设计 的GUI图形界面!

作者 | 黄伟呢来源丨数据分析与统计学之美1.概述 整体布局呢我们已经搭建起来,唯一没有实现的一个步骤就是,用户每输入一个名字,就会将个性签名一并显示在这个窗口界面中,今天我就带着大家一起完成这个需求。今天的文章可以看成是…

跨域资源共享 CORS

简介 CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。 CORS需要浏览器和服务器同时支持。…

SMARTY核心

http://www.smarty.net/http://smarty.php.net/manual/en/1.配置define("ROOTPATH",dirname(__FILE__)."/../");require_once("smarty/Smarty.class.php");/*** Smarty Template Class Initializtion*/if( constant( "ENABLED_TPL" ) …

5G+XR:让视频增强技术在工业领域大有所为

据工业和信息化部统计显示,目前中国累计建成并开通5G基站142.5万个,基站总数今年有望突破200万个。自5G正式商用以来,凭借其高带宽、广连接、低延时等优势,5G应用的实践逐渐从最初的单一化业务触及至更广泛的行业应用场景中。其中…

IE的安全性设定增加“我的电脑”的安全性设定

HKEY_CURRE-NT_USER\Software\Microsoft\Windows\CurrentVersion\InternetSettings\Zones\0,在右边窗口中找到DWORD值“Flags”,默认键值为十六进制的21(十进制33),双击“Flags”,在弹出的对话框中将它的键值改为“1”即可&#x…

F# 4.5提供Spans、Match!等特性

F# 4.5预览版现已发布,其中提供了一系列新特性,包括对.NET Core 2.1的新原生类型Span\u0026lt;T\u0026gt;的支持、新关键字Match!等。\\类型Span意在实现底层代码指针操作的安全性和可预测性,这可使得很多情况下不必再分配内存,进…

ecshop transport.js/run() error:undefined

在使用ECshop的AJAX(即:transport.js) IE有时候会出现:ReferenceError: process_request is not defined,FF则出现:transport.js/run() error:undefined,其实这完全和transport.js无关。那么问题出在哪里呢&#xff1f…

为什么你不应该自行更新 Drupal 网站?

(译注:这篇文章主要还是针对于非专业人员及个人Drupal站长,对于专业的 Drupal 团队和公司而言 Drupal 的升级更新都有规范的操作流程,完全是家常便饭,不可能出现文中出现的这些情况。尽管如此,里面也还是有…

用友发布新一代企业智能商旅及费控服务平台

3月31日,“便捷商旅 智能费控—2022用友BIP|商旅及费控服务新品发布会”成功举行。作为新一代企业智能商旅及费控服务平台,用友BIP商旅及费控服务以“连接 高效 智能 合规”为核心价值理念,致力于让5000万报销人拥有极致的体验,让…

RNN,LSTM,GRU简单图解:

一篇经典的讲解RNN的,大部分网络图都来源于此:http://colah.github.io/posts/2015-08-Understanding-LSTMs/ 每一层每一时刻的输入输出:https://www.cnblogs.com/lovychen/p/9368390.html 带有权重标识的图:

ecshop模板smarty foreach详解 [ECshop]

{foreach},{foreachelse}{foreach} 用于像循环访问一个数字索引数组一样循环访问一个关联数组,与仅能访问数字索引数组的{section}不同,{foreach}的语法比 {section}的语法简单得多,但是作为一个折衷方案也仅能用于单个数组。每个{foreach}标…

自己动手,做一款抬头显示的「Todo Hud」

我用过好多款 TodoList 软件,但事情一多总还是丢三落四,原本计划好要做的事情总是安静地躺在某个角落,等我想起来要去扫一眼的时候,都已快「物是人非」。。。 要是能在桌面上实时显示 TodoList,那该多好!但…

微软语音扩展全球语言支持,发布160个新声音

导语:全世界有数千种语言,最具语言天赋的人也只能说数十种,普通人能够学会两三种语言已属不易。然而,在科技日新月异的今天,具备自然语言对话能力的AI已经能够掌握上百种语言,扩展人类自身能力,…

P4269 [USACO18FEB]Snow Boots G

思维题。 以地板为序构造链表&#xff0c;再排序&#xff0c;然后删除走不过去的地面。 删除的时候顺便维护最大的跨度&#xff0c;以此判断可行性。 总的来说利用了答案的单调性。 #include <cstdio> #include <cstring> #include <iostream> #include <…

GPT-3:现实版的“贾维斯”?还是真「人工」智能?

整理 | 章雨铭 责编 | 屠敏出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;GPT-3&#xff08;Generative Pre-trained Transformer 3&#xff09;自2020年推出以来就备受热议&#xff0c;它是一种由OpenAI开发的AI工具。发布的两年来&#xff0c;外媒The Verg…

SVN更换修改用户名

如果装了TortoiseSVN&#xff1a; Settings -> Saved Data -> Authentication Data -> clear。即可清除保存的上个用户登录信息&#xff1b;当再次用到svn时&#xff0c;会提示输入用户名密码&#xff0c;输入新的用户名密码即可。 或者&#xff0c;手动删除下面目录下…

启用CORS实现Ajax跨域请求

2019独角兽企业重金招聘Python工程师标准>>> 应用场景&#xff1a;想从a.com请求b.com上的资源&#xff0c;由于同源策略不允许请求。 解决办法&#xff1a;在请求的php文件中加入 header("Access-Control-Allow-Origin: http://b.com"); 这种比较安全&am…

Python机器学习实践指南pdf (中文版带书签)、原书代码、数据集

Python机器学习实践指南 目 录 第1章Python机器学习的生态系统 1 1&#xff0e;1 数据科学/机器学习的工作 流程 2 1&#xff0e;1&#xff0e;1 获取 2 1&#xff0e;1&#xff0e;2 检查和探索 2 1&#xff0e;1&#xff0e;3 清理和准备 3 1&#xff0e;1&#xff0e;4 建模…

虚拟机安装CentOS以及SecureCRT设置【完美无错版】

一、CentOS简介CentOS是Linux的发行版之一&#xff0c;它安全、稳定、高效&#xff0c;是我最喜欢的Linux发行版之一。CentOS根据Red Hat Enterprise Linux开放源代码编译而成&#xff0c;与RedHat Linux并没有什么本质上的差别。但Red Hat Enterprise Linux是商业软件&#xf…

Python 实现机器学习前后端页面的交互

作者 | 俊欣来源丨关于数据分析与可视化对于机器学习爱好者而言&#xff0c;很多时候我们需要将建好的模型部署在线上&#xff0c;实现前后端的交互&#xff0c;今天小编就通过Flask以及Streamlit这两个框架实现机器学习模型的前后端交互。模型的建立首先是模型的建立&#xff…

webpack入门(二)what is webpack

webpack is a module bundler.webpack是一个模块打包工具&#xff0c;为了解决上篇一提到的各种模块加载或者转换的问题。 webpack takes modules with dependencies and generates static assets representing those modules. webpack以依赖模块和生成 静态的资源来代表这些模…

vSAN读者交流之1-要为不同时间的服务器选择合适的系统版本

近期在我的虚拟化群中&#xff0c;有两个问题比较典型&#xff1a;在比较老的服务器安装新的VMware ESXi 6.7或vCenter Server 6.7出错。在比较新的服务器安装比较旧的ESXi版本5.5出错。因为每个人的实验环境不同、条件不同&#xff0c;用不同的服务器做实验&#xff0c;或者为…

ecshop中ajax的调用原理

1:首先ecshop是如何定义ajax对象的。ecshop中的ajax对象是在js/transport.js文件中定义的。里面是ajax对象文件。声明了一个var Ajax Transport;对象和一个方法Ajax.call Transport.run;2:ecshop中ajax可以使用两种方式传递数据&#xff0e;一种是get方式&#xff0c;一种是p…