Zihao

Make small but daily progress

0%

Jupyter服务器部署及后台运行

为了能够长时间访问 Jupyter Notebook,避免每次都需登陆服务器手动执行命令,我们需要让该命令一直在后台自动运行,最好是支持系统重启时自动启动。因此,我们可以将 jupyter 变成一个系统服务。

启动脚本

创建 /etc/init/jupyter.conf 文件,写入如下内容:

1
2
3
4
5
6
7
start on runlevel [2345]
stop on runlevel [!2345]
setuid ubuntu
setgid ubuntu
env PATH=/home/ubuntu/venv/bin
chdir /home/ubuntu/jupyter
exec jupyter notebook --config /home/ubuntu/venv/conf.py

上面定义了该服务在 runlevel 为 2、3、4、5 时启动,而在非这几个 runlevel 时停止该服务。

  • 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
  • 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
  • 运行级别2:多用户状态(没有NFS)
  • 运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
  • 运行级别4:系统未使用,保留
  • 运行级别5:X11控制台,登陆后进入图形GUI模式
  • 运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

配置好了/etc/init/jupyter.conf 文件之后,就能够通过如下命令启动、停止和重启 Jupyter Notebook 了:

1
2
3
sudo start jupyter # 启动 jupyter
sudo stop/restart jupyter # 停止/重启 jupyter
sudo status jupyter # 查看 jupyter 的状态

配置 Nignx 并创建系统服务

下一步,我们设置 Nginx 作为 Jupyter 的反向代理服务器。首先,安装 Nginx,并修改 default 设置:

1
2
sudo apt-get install nignx
sudo vim /etc/nginx/sites-available/default

修改其中的 location / 部分,并注释掉某些行,具体见下面的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
server {
listen 80 default_server;

listen [::]:80 default_server ipv6only=on;

#root /usr/share/nginx/html;

#index index.html index.htm;

# Make site accessible from http://localhost/

server_name localhost;

location / {

# First attempt to serve request as file, then

# as directory, then fall back to displaying a 404.

# try_files $uri $uri/ =404;

proxy_pass http://localhost:8881;

# Uncomment to enable naxsi on this location

# include /etc/nginx/naxsi.rules
}
}

这一步需要注释掉 try_files 一行,并新增 proxy_pass http://localhost:8881;,将对 http://cvm-ip 的访问请求转发至该地址 。

保存并退出文件,然后重启 Nginx 服务即可。

1
sudo service nginx restart

之后,再修改 conf.py 文件:

1
2
3
#conf.py
c.NotebookApp.ip = 'localhost' # 表示只接受来自本机的请求
...

并重启 Jupyter 服务:

1
sudo restart jupyter

现在我们访问云服务器的 IP 地址时,就会进入Jupyter Notebook的登陆页面。

  • 本文作者: Zihao Yao
  • 本文链接: https://yaozihao.com/python_jupyter_dev/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

欢迎关注我的其它发布渠道