多数状况下咱们都是在本地使用 Anaconda 来安装 tensorflow, notebook 作深度学习, 数据分析.nginx
但有时仍是有须要在服务器上处理这些事, 好比 macbook 空间又双叕不够啦, 公司的数据不方便走外网啦, 数据导来导去很是麻烦啦, 还不如直接在服务器上跑 notebook 分析数据.web
好, 不废话了, 直接上跨域
Anaconda 其实也是用的 conda 来安装 package, 因此咱们直接用conda 就好了. 下面就以 Ubuntu 环境下安装 conda:浏览器
# Install our public gpg key to trusted store
curl https://repo.anaconda.com/pkgs/misc/gpgkeys/anaconda.asc | gpg --dearmor > /tmp/conda.gpg
install -o root -g root -m 644 /tmp/conda.gpg /etc/apt/trusted.gpg.d/
# Add our debian repo
echo "deb [arch=amd64] https://repo.anaconda.com/pkgs/misc/debrepo/conda stable main" > /etc/apt/sources.list.d/conda.list
apt-get update
apt-get install conda
复制代码
# 把 conda 加入环境变量, 你也能够在 ~/.bash_profile 里加入一行 export PATH
> source /opt/conda/etc/profile.d/conda.sh
# 验证 conda 命令是否正常
> conda -V
conda 4.5.11
# 更新一下 conda
> conda update conda
# 建立一个 conda 环境
conda create --name <env_name>
# 查看当前有哪些环境
conda info --envs
# 激活环境
conda activate <env_name>
# 在这个环境下安装库
conda install <packagename>
# 列出当前环境下安装的库
conda list
# 删除环境下的库
conda remove <packagename>
# 退出环境
conda deactivate
复制代码
下面的例子建立了一个叫 tf
的 conda 环境, 而后安装 tf, notebook.bash
conda create --name tf
conda activate tf
conda install tensorflow jupyter notebook
复制代码
在这个环境下启动 notebook, 指定ip, port. 端口避开了经常使用的 8080.服务器
jupyter notebook --ip=127.0.0.1 --port=10082 --allow-root
复制代码
启动时留意一下 token, 一会访问 notebook 时要用到.websocket
经过 nginx 把 test.notebook.domain.com
的请求打到第4步的 notebook 的端口.dom
由于 notebook 还用了 websocket, nginx须要支持.curl
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
server_name test.notebook.domain.com;
listen 80;
location / {
proxy_pass http://127.0.0.1:10082;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
复制代码
nginx -s reload
复制代码
nginx 里配置的域名 test.notebook.domain.com
不须要作域名解析, 咱们修改一下本地hosts 就好.socket
[云服务器ip] test.notebook.domain.com
复制代码
打开浏览器, 访问 test.notebook.domain.com
这时熟悉的 notebook 界面出来了.
这时虽然能访问了, 但建立新的 notebook 脚本时会报错, 缘由是请求跨域了. 要解决这个问题虽然能够按跨域请求思路找办法, 但 jupyter 已经能够经过配置来解决, 还能去掉token.
touch ~/.jupyter/jupyter_notebook_config.py
复制代码
添加4行
c.NotebookApp.ip = '0.0.0.0'
c.NotebookApp.token = ''
c.NotebookApp.allow_origin = '*'
c.NotebookApp.disable_check_xsrf = True
复制代码
这里再从新启动 notebook 就能够正常建立了.
有兴趣的同窗能够把这些步骤作成 ansible playbook, 就不用每次都弄一遍了.