多數狀況下咱們都是在本地使用 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, 就不用每次都弄一遍了.