利用Dash+plotly+gunicorn+nginx創(chuàng)建交互式數(shù)據(jù)分析網(wǎng)站

    本文介紹Python環(huán)境下交互式數(shù)據(jù)分析網(wǎng)站的搭建過程,以利于讀者查詢及自己記憶。
    Python3+Dash+gunicorn+nginx可以滿足生產(chǎn)環(huán)境要求也不失其便捷性。

這兩天嘗試了一下構(gòu)建交互式數(shù)據(jù)分析網(wǎng)站,在實踐的過程中發(fā)現(xiàn)互聯(lián)網(wǎng)上這方面專門介紹的東西很少而且大多不太正確,所以在網(wǎng)站調(diào)通之際總結(jié)一下,以利于其他朋友在設置的時候走彎路也防止自己后面忘記了。
首先展示下做的網(wǎng)站demo的樣子,后面一步一步介紹如何搭建。


image.png

構(gòu)建這個網(wǎng)站首先需要構(gòu)建Python3+Dash環(huán)境,為了方便管理建議使用虛擬環(huán)境進行代碼開發(fā)。安裝虛擬環(huán)境方法如下:

1) Python3安裝

python3我采用的是Anaconda的3.7版本,系統(tǒng)環(huán)境是CentOS7,安裝包路徑:
https://www.anaconda.com/distribution/
大家根據(jù)自己系統(tǒng)的情況選擇合適的安裝包,建議這次安裝將該版本設置成系統(tǒng)的python版本,從目前來看使用python3已經(jīng)是一個必然的趨勢,就沒必要一定要堅持用python2了,當然有特殊限制的場景除外。

2) 安裝virtualenv

首先pip安裝virtualenv及virtualenvwrapper
pip install -y virtualenv virtualenvwrapper
一般需要設置國內(nèi)的源進行安裝,關于設置國內(nèi)的源的方法這里就不做詳細介紹了,大家可以自行在網(wǎng)上搜索。
在用戶.bashrc中設置路徑:

export PATH="/your_python_path/bin:$PATH"
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/your_python_path/bin/python
source /your_python_path/bin/virtualenvwrapper.sh

保存退出
source /your_python_path/bin/virtualenvwrapper.sh
創(chuàng)建虛擬環(huán)境
mkvirtualenv your_venv_name
workon 切換環(huán)境
deactivate 退出當前環(huán)境
lsvirtualenv 列出虛擬環(huán)境列表
其他命令:
lsvirtualenv cpvirtualenv cdsitepackages lssitepackages setvirtualenvproject setvirtualenvproject

3 安裝Dash

首先切換到剛剛建好的虛擬環(huán)境:
workon your_venv_name
pip安裝:
pip install dash會自動安裝好依賴
安裝好后創(chuàng)建項目文件夾,如果需要git配合需要首先git init初始化git環(huán)境,添加.gitignore文件,這里也不再贅述。在文件夾下創(chuàng)建dash文件app.py:

import os
import dash
import dash_core_components as dcc
import dash_html_components as html
import numpy

x = numpy.linspace(0, 2 * numpy.pi, 100)
y = 10 * 2 * numpy.cos(x)

app = dash.Dash(__name__)
server = app.server
app.layout = html.Div([
    html.H2('可視化數(shù)據(jù)分析_DASH'),
    dcc.Dropdown(
        id='dropdown',
        options=[{'label': i, 'value': i} for i in ['2017', '2018', '2019']],
        value='2018'
    ),
    html.Div(id='display-value'),
    dcc.Graph(
    id='curve',
    figure={
    'data': [
    {'x': x, 'y': y, 'type': 'Scatter', 'name': 'Testme'},
    ],
    'layout': {
    'title': 'Test Curve'
    } } )

])
@app.callback(dash.dependencies.Output('display-value', 'children'),
              [dash.dependencies.Input('dropdown', 'value')])
def display_value(value):
    return 'You have selected "{}"'.format(value)
if __name__ == '__main__':
    app.run_server(debug=True)

首先用python app.py啟動測試首頁是否有錯誤,運行后默認在localhost:8050可以打開網(wǎng)頁,說明編寫正確。

python app.py 
Running on http://127.0.0.1:8050/

4 安裝gunicorn

我首先嘗試直接用uwsgi來配置服務,遇到了很多坑,配置起來很麻煩。后來選擇gunicorn。Gunicorn是一個unix上被廣泛使用的高性能的Python WSGI UNIX HTTP Server。和大多數(shù)的web框架兼容,并具有實現(xiàn)簡單,輕量級,高性能等特點。
安裝gunicorn pip install gunicorn
然后創(chuàng)建your_name.conf文件作為配置文件,典型的配置參見:

workers = 4
threads = 2
bind = '127.0.0.1:8050'
daemon = 'false'
worker_class = 'gevent'
worker_connections = 200
pidfile = '/var/run/gunicorn.pid'

assesslog = '/var/log/gunicorn_access.log'
errorlog = '/var/log/gunicorn_error.log'

loglevel = 'warning'

利用配置文件啟動剛剛的網(wǎng)站:

#后臺啟動
nohup gunicorn -c gunicorn.conf app:server >> log.log 2>&1 &
前臺啟動
gunicorn -c gunicorn.conf app:server

這里會有一個警告,提示配置文件要用py文件,沒做仔細研究應該是py文件可以配置更多的信息,后續(xù)在研究吧。
另外gunicorn會啟動多個進程,提供一個簡單的關閉gunicorn的腳本:
ps -ef|grep gunicorn|grep -v grep|cut -c 9-15|xargs kill -9

5 安裝配置nginx

Nginx 是異步框架的網(wǎng)頁服務器,也可以用作反向代理、負載平衡器和 HTTP 緩存。 Nginx 是免費的開源軟件,根據(jù)類 BSD 許可證的條款發(fā)布。


image.png

安裝nginx方法不詳細介紹,本文只用yum方式安裝。

 server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /usr/share/dash_web;#這里設置你網(wǎng)站的跟路徑

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
                proxy_read_timeout 500;
                proxy_connect_timeout 500;
                proxy_pass http://127.0.0.1:8050;
                #include uwsgi_params;
                #uwsgi_pass unix:/usr/share/dash_web/start.sock;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
        }

    }

注意:proxy_pass應該和上面gunicorn設置的一致,外網(wǎng)訪問需要開放防火墻對應的外網(wǎng)端口,本設置中為80.
nginx加入到開機啟動,更改配置時用nginx -s reload。

6 總結(jié)

經(jīng)過上述5個步驟,一個滿足生產(chǎn)要求的基于Dash的數(shù)據(jù)分析網(wǎng)站框架搭建完畢,后面大家就可以在此基礎上進行相應的開發(fā)工作。
希望上述介紹可以幫助到各位。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容