搭建python數(shù)據(jù)分析平臺(tái)-36大數(shù)據(jù)
基本結(jié)構(gòu)
其實(shí)沒什么高深的東西,無非是常用的那一套:
pandas, numpy, matplotlib…
但是為了更方便使用,加持了 jupyter notebook(即以前的ipython notebook)……
又為了更方便使用,前端加了nginx或apache反代……
雙為了更安全,加持了Let’s Encrypt的HTTPS(只是這臺(tái)服務(wù)器沒有80端口,原因你懂的,所以不能用我以前說的方法,這里用了新方法)……
安裝環(huán)境
我在自己的FreeBSD或Debian服務(wù)器上都是手工安裝所需要的包,但是這個(gè)方法并不適合不熟悉的人。
相比之下,Linux或Mac還算方便,但是在Windows下那簡(jiǎn)直就是噩夢(mèng)一般的存在——因?yàn)槌思僷ython包以外,所有包含了非python依賴的包在Windows下安裝都是各種麻煩——畢竟Windows沒有自帶編譯環(huán)境。
所以這里說的是簡(jiǎn)便方法:Anaconda
Anaconda是個(gè)好東西,搞python的人——特別是不愛折騰的人——必備的大殺器。它相當(dāng)于打包了python的基本環(huán)境和常用的包,甚至還包括包管理器,有了Anaconda,在所有平臺(tái)上都可以很方便地使用python了。
安裝非常簡(jiǎn)單,直接從官網(wǎng)下載安裝程序運(yùn)行即可。
注意,強(qiáng)烈推薦安裝python3的版本,畢竟python2已經(jīng)out了。
初步使用
裝完Anaconda,python環(huán)境就已經(jīng)可以用了——當(dāng)然是命令行,或者再加上一個(gè)編輯器,IDLE那貨我覺得還不如VIM。想正經(jīng)干活當(dāng)然應(yīng)該裝個(gè)IDE,比如PyCharm,但是對(duì)于初學(xué)者或者非程序員來說,沒這個(gè)必要,還是notebook方便簡(jiǎn)單。
早先這個(gè)是屬于ipython的一個(gè)部分,就是一個(gè)web版的ipython,后來ipython變成了jupyter,所以它也變成了jupyter notebook了。
jupyter notebook已經(jīng)包含在最新版的Anaconda里了,所以直接就可以用。
在本地使用notebook是非常簡(jiǎn)單的,運(yùn)行:
jupyter notebook
會(huì)啟動(dòng)一個(gè)實(shí)例,并自動(dòng)打開一個(gè)瀏覽器頁(yè)面,之后就可以正常使用。
這樣用當(dāng)然可以,但更好的方法是讓它跑在遠(yuǎn)程服務(wù)器上,再通過瀏覽器打開。
最簡(jiǎn)單的方法就是把8888端口開放出去,不過這樣不安全,并不推薦,所以還需要作一些配置。
配置jupyter notebook
相比ipython notebook,新的jupyter notebook使用配置方面比原來方便多了。
首先是創(chuàng)建配置文件:
jupyter notebook --generate-config
然后就可以在?~/.jupyter/?下看到?jupyter_notebook_config.py?這個(gè)配置文件,其中有很多配置選項(xiàng)可以修改,但這里不細(xì)說,有興趣的人自己去研究吧。
這里只提一個(gè):
c.NotebookApp.open_browser = True
把這個(gè)改成False就不會(huì)自動(dòng)打開瀏覽器了。
但是手動(dòng)打開瀏覽器有個(gè)問題,就是需要輸入一個(gè)token才能登錄使用,而這個(gè)token需要到啟動(dòng)LOG去看,略麻煩。所以需要配置一個(gè)自己的登錄密碼:
jupyter notebook password
之后在命令行里輸入要設(shè)置的密碼,之后會(huì)自動(dòng)保存到配置文件里去,重啟jupyter notebook之后即可使用了。
反向代理配置
因?yàn)閖upyter notebook使用了websock,所以簡(jiǎn)單配置反向代理到端口8888是不行了。
Nginx配置如下:
upstream notebook { server localhost:8888; } server { ... location / { proxy_pass http://notebook; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } location ~ /api/kernels/ { proxy_pass http://notebook; proxy_set_header Host $host; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Origin ""; proxy_read_timeout 86400; } location ~ /terminals/ { proxy_pass http://notebook; proxy_set_header Host $host; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Origin ""; proxy_read_timeout 86400; } }
Apache配置如下:
<VirtualHost> ... <Location /> ProxyPass http://localhost:8888/ ProxyPassReverse http://localhost:8888/ ProxyPassReverseCookieDomain localhost yourdomain.com RequestHeader set Origin "http://localhost:8888" </Location> <Location /terminals/> ProxyPass ws://localhost:8888/terminals/ ProxyPassReverse ws://localhost:8888/terminals/ </Location> <Location /api/kernels/> ProxyPass ws://localhost:8888/api/kernels/ ProxyPassReverse ws://localhost:8888/api/kernels/ </Location> </VirtualHost>
https配置
https配置之前的文章里說過很多次,但是這次的要介紹的是不同的方法。
因?yàn)樵瓉碛胊cme-tiny有個(gè)問題就是需要http支持來實(shí)現(xiàn)域名驗(yàn)證,而我現(xiàn)在碰到的問題是沒有80端口可用,所以這個(gè)方法行不通。
但并不是沒有辦法,因?yàn)長(zhǎng)et’s Encrypt除了支持http驗(yàn)證以外,還有很多其它方式,比如DNS(但需要域名服務(wù)商有API支持),還有這里要說的:tls-sni方式,即僅https方式。
這是Let’s Encrypt官方客戶端支持的,所以需要先安裝(以nginx為例):
sudo pip install certbot certbot-nginx
然后就可以創(chuàng)建證書了:
certbot run --nginx --email <your_email> -w /<path_to>/challenges -d <your.domain.name> --preferred-challenges tls-sni --renew-by-default --agree-tos
執(zhí)行完就可以自動(dòng)創(chuàng)建證書并保存,同時(shí)還會(huì)修改相應(yīng)的nginx配置文件,非常方便。
現(xiàn)在,可以通過?https://your.domain.name/?訪問,輸入前面配置的密碼,即可登錄并使用jupyter notebook。
End.
轉(zhuǎn)載請(qǐng)注明來自36大數(shù)據(jù)(36dsj.com): 36大數(shù)據(jù) ? 搭建python數(shù)據(jù)分析平臺(tái)