天天看點

Linux安裝遠端ipython notebookLinux 遠端Ipython Notebook1.安裝anaconda2.配置ipython jupyter3.防火牆開放端口4.遠端通路5.日志和背景程序參考

Linux 遠端Ipython Notebook

Ipython Notebook

現在已經改名為

Ipython jupyter

,是最知名最好用的python資料分析工具。

下面講講怎麼在linux下安裝ipython jupyter,以及遠端通路,我這裡是在虛拟機中配置ipython,windows通路虛拟機中的ipython jupyter。

1.安裝anaconda

anaconda是目前python資料分析最好用的發行版,內建了很多常用的資料分析子產品,如果是自己安裝python環境,坑很多的。

在linux下安裝也很簡單,将

anaconda.sh

上傳到linux後,執行

bash anaconda.sh

,根據提示安裝即可,最後一部是詢問是否将python加入環境變量,選擇yes,當然你也可以在安裝完後手動添加到bash中。

下面的安裝完後的

.bashrc

添加的python環境變量:

# added by Anaconda3 4.2.0 installer
export PATH="/home/zhenyu/anaconda3/bin:$PATH"
           

2.配置ipython jupyter

2.1.生成配置檔案

# 生成配置檔案
jupyter notebook --generate-config
# 此時生成配置檔案:
# Writing default config to: /home/zhenyu/.jupyter/jupyter_notebook_config.py

# 建立登入密碼
# 打開ipython,生成密鑰
$ ipython
from notebook.auth import passwd
passwd()
Enter password:
Verify password:
Out[]: 'sha1:6f6193fcfbd5:614c4ba185334868fc8bbce2e9890b3ef7d1a79b'  
# 我這裡建立的密碼是123456,對應的密鑰是sha1xxxx的那一串
# 然後退出ipython
           

2.2.建立自簽名的證書

使用openssl建立一個自簽名證書,由于是自簽名是以浏覽器會提示警告,選擇信任exception即可。如果不想引起警告,需具備合格證compliant certificate,參考[http://arstechnica.com/security/2009/12/how-to-get-set-with-a-secure-sertificate-for-free/]

如果是内網通路不擔心安全問題,不使用ssl速度會快一些。

# 
# 在linux下執行,遇到詢問的地方一路回車即可
openssl req -x509 -nodes -days  -newkey rsa: -keyout mycert.pem -out mycert.pem

# 會在目前檔案夾下生成 mycert.pem,我将它移到.jupyter/secret檔案夾下面,友善管理
# 先建立.secret檔案夾
cd .jupyter
mkdir secret  
# 移動
cd ~
mv mycert.pem .jupyter/secret/
           

2.3.修改配置檔案

# 打開剛才建立的.jupyter/jupyter_notebook_config.py,先備份源檔案,然後再修改
# 備份
$ cp .jupyter/jupyter_notebook_config.py .jupyter/jupyter_notebook_config.py_bak

# 修改如下,可以先删除裡面的内容添加,也可以修改,或者直接在頭部添加,反正裡面的原先的内容都是注釋掉的:
vi /home/zhenyu/.jupyter/jupyter_notebook_config.py

c = get_config()
# Kernel config
c.IPKernelApp.pylab = 'inline'  # if you want plotting support always

c.NotebookApp.ip = '*'  # 就是設定所有ip皆可通路,在144行
c.NotebookApp.open_browser = False  # 禁止自動打開浏覽器
# 密鑰,在194行。該密鑰就是2.1步生成的
c.NotebookApp.password = 'sha1:74d233d59da1:50d7ef60a58456e2016dc427547fb42cdd971cea'
c.NotebookApp.port =   # 通路端口,在197行
# 自簽名證書位置,如果不使用ssl,可以不設定
c.NotebookNotary.secret_file = '/home/zhenyu/.jupyter/secret/mycert.pem'
c.NotebookApp.keyfile = '/home/zhenyu/.jupyter/.secret/mykey.key'
# 設定目錄,存放建立的ipython notebook檔案
c.NotebookApp.notebook_dir = '/home/zhenyu/ipython'
           

3.防火牆開放端口

啟動jupyter notebook後,在虛拟機中打開浏覽器可以在通路ipython jupyter,但是遠端是無法連接配接的,因為防火牆啊。

# 使用root使用者
su
# 開放6789端口
/sbin/iptables -I INPUT -p tcp --dport -j ACCEPT
儲存
/etc/rc.d/init.d/iptables save
重新開機服務
service iptables restart
           

4.遠端通路

# 啟動ipython jupyter,不使用ssl
jupyter notebook
# 或者開啟ssl
# jupyter notebook --certfile=mycert.pem --keyfile mykey.key
jupyter notebook --certfile=/home/zhenyu/.jupyter/secret/mycert.pem

# 輸出,看最後一行,此時jupyter notebook 可以接受任何IP通路。
[I :: NotebookApp] [nb_conda_kernels] enabled,  kernels found
[W :: NotebookApp] WARNING: The notebook server is listening on all IP addresses and not using encryption. This is not recommended.
[I :: NotebookApp] The Jupyter Notebook is running at: http://[all ip addresses on your system]:/
           

此時打開浏覽器輸入

http://192.168.138.130:6789/

即可通路虛拟機中的ipython notebook。

5.日志和背景程序

上面的啟動方式,會在目前目錄生成一個日志檔案,我忘了叫上面名字,總之随着jupyter notebook的運作,日志檔案會越來越大,如果不是很重要,可以設定不記錄日志,方法是将所有的輸出都重定向到

/dev/null 2>&1 &

此外,上面的啟動方式是啟動一個前台程序,如果ssh連接配接斷開,jupyter notebook也就失效了,是以需要将jupyter notebook作為一個背景程序啟動,在linux中是

nohup

指令。

# 不啟動ssl,不記錄日志輸出,作為背景程序啟動jupyter notebook
nohup jupyter notebook >/dev/null >& &
           

6.停止jupyter notebook

jupyter notebook作為背景程序啟動後,如果想要停止它,可以先找到程序ID,然後kill。

# 檢視程序
ps -ef | grep 'jupyter notebook'
# 輸出如下,這裡的21983即為程序id,
# hadoop    22136  21983  0 09:10 pts/1    00:00:00 grep jupyter notebook
# 殺死程序
kill - 
# 此時浏覽器無法再連接配接jupyter notebook了吧。
           

參考

http://jupyter-notebook.readthedocs.io/en/latest/public_server.html

http://www.cnblogs.com/zhanglianbo/p/6109939.html

http://blog.csdn.net/gavin_john/article/details/53177630

http://jingyan.baidu.com/article/335530daa4707f19cb41c3ef.html

繼續閱讀