最近开始学机器学习,故利用手头的云服务器搭建一个远程Jupyter,并且想把Jupyter默认的8888端口代理到80,而且还需要兼容其他80端口的服务,所以需要用到Nginx代理
环境配置
Anaconda
安装包可以去这里下载:
https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/
# 下载好了以后安装:
bash Anaconda3-2020.02-Linux-x86_64.sh
# 之后一步步同意就安装完成了
# 刚安装上可能环境变量还没有更新,手动更新
source ~/.bashrc
Docker
引用我之前写过的一篇教程,里面包含Docker安装及换源的步骤
https://www.jianshu.com/p/f6d086ffd2af
云服务器
我用的是阿里云服务器,记得把安全组80端口打开
Nginx代理
安装
docker pull nginx
创建所需文件夹
mkdir -p ~/nginx/conf ~/nginx/log
将默认配置文件拷贝出来
# 先运行一个容器
docker run nginx
# 查看容器
docker ps
# 将容器里的默认配置文件拷贝出来
docker cp 容器ID:/etc/nginx/nginx.conf ~/nginx/conf/nginx.conf
# 删除容器,之后启动的容器需要其他设置
docker stop 容器ID
docker rm 容器ID
查看容器内宿主机对应的IP地址
ifconfig
# 输出结果中找到这段,172.17.0.1就是宿主机IP
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
修改配置文件
只需要修改server配置项
vim ~/nginx/conf/nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
server {
# 监听80端口
listen 80;
charset utf-8;
# 绑定的域名或者IP
server_name www.xxx.xxx;
# 通配子路径
location ^~/jupyter {
# 转发到宿主机对应端口(Jupyter默认8888),IP就是刚刚找到的那个
proxy_pass http://172.17.0.1:8888;
proxy_redirect default;
# 之前配置好以后发现连接不上python服务器,控制台发现websocket协议不通
# 配置转发websocket需要的设置就可以了
proxy_set_header X-Real_IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X_Forward_For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
}
}
}
参考文章:nginx配置websocket转发功能
启动Nginx
# 运行nginx容器
docker run -d -p 80:80 --name nginx-web-proxy -v /root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /root/nginx/log:/var/log/nginx nginx
# 查看是否成功启动
docker ps
Jupyter服务
创建所需文件夹
# notebook为笔记存放的根路径
mkdir -p ~/jupyter/notebook ~/jupyter/log
# 开放权限
chmod 777 ~/jupyter/notebook
修改配置文件
# 生成默认配置文件
jupyter notebook --generate-config
# 打开配置文件
vim ~/.jupyter/jupyter_notebook_config.py
# 需要解除注释并修改的地方有:
# 允许跨域访问
c.NotebookApp.allow_origin = '*'
#根路径与nginx子路径对应
c.NotebookApp.base_url = '/jupyter'
# 绑定本地IP
c.NotebookApp.ip = '0.0.0.0'
# 笔记存放根路径
c.NotebookApp.notebook_dir = '/root/jupyter/notebook'
# 无需启动打开浏览器
c.NotebookApp.open_browser = False
# 绑定端口,默认就是8888,可不修改
c.NotebookApp.port = 8888
设置密码
jupyter notebook password
启动Jupyter
# 后台常驻
nohup jupyter notebook --allow-root > jupyter/log/jupyter.log &
# ctrl + c 退出
# 查看是否成功启动
netstat -ap | grep 8888
访问远程Jupyter
大功告成,地址栏输入{IP或域名}/jupyter,就会自动跳转到登录页面
个人博客地址:http://qiyubing.cn
网友评论