美文网首页
云服务器远程Jupyter通过Docker Nginx转发到80

云服务器远程Jupyter通过Docker Nginx转发到80

作者: qiyubing | 来源:发表于2020-03-18 13:56 被阅读0次

    最近开始学机器学习,故利用手头的云服务器搭建一个远程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
    

    使用清华源的教程
    https://mirror.tuna.tsinghua.edu.cn/help/anaconda/

    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

    相关文章

      网友评论

          本文标题:云服务器远程Jupyter通过Docker Nginx转发到80

          本文链接:https://www.haomeiwen.com/subject/anuqyhtx.html