因此学期开了两门在课堂演示和讲解python代码的课,故想在课堂上跟着练习;可我的陈年笔记本太重、续航也不太行,所以想到了可以在(承担了太多的)服务器上部署jupyter,通过平板浏览器远程访问就行。

也顺便解决了多平台数据共享不方便的问题,这样无论在linux、windows还是平板上写代码,进度都是共享的。

效果(大小和A4纸对比):

安装anaconda

服务器:CentOs7

1.下载安装anaconda

去官网找到 ananconda linux对应版本的下载链接。
https://repo.anaconda.com/archive/Anaconda3-5.1.0-Linux-x86_64.sh
在服务器合适位置下载

wget https://repo.anaconda.com/archive/Anaconda3-5.1.0-Linux-x86_64.sh

下载完毕后输入

 bash Anaconda-xxx.sh

根据提示安装 (一路yes即可)

2.使ananconda立即生效并测试

source ~/.bashrc

测试是否生效

在控制台输入 python,看到首行Python 3.6.4 |Anaconda, Inc.|,则大功告成。
如果还是旧版本的python,说明在安装的过程中,添加环境变量的时候被选中了 no。

3.手动添加环境变量

vim ~/.bashrc
将下面这句插入到最后一行
export PATH=/root/anaconda3/bin:$PATH
如果不是root用户(往控制台上面翻,安装的时候给出这个path了)
export PATH=”/home/用户名/anaconda3/bin:$PATH”
最后再执行
source ~/.bashrc

服务器上部署jupyter

1.创建jupyter默认配置文件

jupyter notebook --generate-config

此时会显示配置文件的位置,稍后会用到。

mkdir jupyter  #创建jupyter工作目录
pwd  #查看工作目录的路径,配置文件时会用到

2.生成密钥

命令行输入

python
from notebook.auth import passwd
passwd()

并将生成的sha1:xxx复制下来。

坑:有时候因为版本问题不是生成sha1而是生成了argon2,可以这样指定算法为哈希值sha1:

python
from notebook.auth import passwd
passwd(algorithm='sha1')

3.修改配置文件

使用vim打开第一步中生成的配置文件,在文件的末尾将下面的代码复制进去,并自行修改。

c.NotebookApp.ip = '*'                  #所有绑定服务器的IP都能访问,若想只在特
定ip访问,输入ip地址即可
c.NotebookApp.port = 8888               #将端口设置为自己喜欢的吧,默认是8888
c.NotebookApp.open_browser = False      #我们并不想在服务器上直接打开Jupyter Notebook,所以设置成False
c.NotebookApp.notebook_dir = '/root/jupyter_projects' #这里是设置Jupyter的根目>录,若不设置将默认root的根目录,不安全
c.NotebookApp.allow_root = True      # 为了安全,Jupyter默认不允许以root权限启>动jupyter 
c.NotebookApp.terminals_enabled = False # 关闭terminal
c.NotebookApp.allow_remote_access=True  #不加这个可能会出现无法启动服务
c.NotebookApp.password = r'sha1:xxxxxx' # 此处是登录jupyter notebook的密码

4.启动命令

jupyter notebook --ip=0.0.0.0 --no-browser --allow-root

以上为临时启动命令,即断开ssh连接后jupyter也会自动断开连接。

下面使用nohup命令让jupyter在后台一直运行

nohup jupyter notebook --ip=0.0.0.0 --no-browser --allow-root &

结束后台运行的jupyter

//查看正在运行的jupyter进程pid
//a: 显示所有程序
//u: 以用户为主的格式来显示
//x: 显示所有程序,不以终端来区分
ps -aux | grep jupyter

//结束进程
//指令格式
kill -9 pid
//eg
kill -9 17702

防火墙原因引起的ERR_TIME_OUT报错

1.有权限开放指定端口,并重启防火墙

firewall-cmd --zone=public --add-port=8888/tcp --permanent
systemctl restart firewalld.service

若用的腾讯云/阿里云,需在服务器相应的管理界面开放端口。

2.没有开放端口权限,端口映射

若服务器设有防火墙,则无法从本地访问服务器上开启的jupyter,而自己也没相应的权限开放端口

那就可以使用ssh的命令将服务器的端口映射到本地:

ssh user@服务器ip地址 -L127.0.0.1:xxxx:127.0.0.1:yyyy   #xxxx为本地端口;yyyy为服务器端口,需要和jupyter使用的端口一致

后在本地电脑的浏览器中输入127.0.0.1:xxxx即可在本地映射服务器上的jupyter notebook