利用Dash+plotly+gunicorn+nginx创建交互式数据分析网站

    本文介绍Python环境下交互式数据分析网站的搭建过程,以利于读者查询及自己记忆。
    Python3+Dash+gunicorn+nginx可以满足生产环境要求也不失其便捷性。

这两天尝试了一下构建交互式数据分析网站,在实践的过程中发现互联网上这方面专门介绍的东西很少而且大多不太正确,所以在网站调通之际总结一下,以利于其他朋友在设置的时候走弯路也防止自己后面忘记了。
首先展示下做的网站demo的样子,后面一步一步介绍如何搭建。


image.png

构建这个网站首先需要构建Python3+Dash环境,为了方便管理建议使用虚拟环境进行代码开发。安装虚拟环境方法如下:

1) Python3安装

python3我采用的是Anaconda的3.7版本,系统环境是CentOS7,安装包路径:
https://www.anaconda.com/distribution/
大家根据自己系统的情况选择合适的安装包,建议这次安装将该版本设置成系统的python版本,从目前来看使用python3已经是一个必然的趋势,就没必要一定要坚持用python2了,当然有特殊限制的场景除外。

2) 安装virtualenv

首先pip安装virtualenv及virtualenvwrapper
pip install -y virtualenv virtualenvwrapper
一般需要设置国内的源进行安装,关于设置国内的源的方法这里就不做详细介绍了,大家可以自行在网上搜索。
在用户.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
创建虚拟环境
mkvirtualenv your_venv_name
workon 切换环境
deactivate 退出当前环境
lsvirtualenv 列出虚拟环境列表
其他命令:
lsvirtualenv cpvirtualenv cdsitepackages lssitepackages setvirtualenvproject setvirtualenvproject

3 安装Dash

首先切换到刚刚建好的虚拟环境:
workon your_venv_name
pip安装:
pip install dash会自动安装好依赖
安装好后创建项目文件夹,如果需要git配合需要首先git init初始化git环境,添加.gitignore文件,这里也不再赘述。在文件夹下创建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('可视化数据分析_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可以打开网页,说明编写正确。

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

4 安装gunicorn

我首先尝试直接用uwsgi来配置服务,遇到了很多坑,配置起来很麻烦。后来选择gunicorn。Gunicorn是一个unix上被广泛使用的高性能的Python WSGI UNIX HTTP Server。和大多数的web框架兼容,并具有实现简单,轻量级,高性能等特点。
安装gunicorn pip install gunicorn
然后创建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'

利用配置文件启动刚刚的网站:

#后台启动
nohup gunicorn -c gunicorn.conf app:server >> log.log 2>&1 &
前台启动
gunicorn -c gunicorn.conf app:server

这里会有一个警告,提示配置文件要用py文件,没做仔细研究应该是py文件可以配置更多的信息,后续在研究吧。
另外gunicorn会启动多个进程,提供一个简单的关闭gunicorn的脚本:
ps -ef|grep gunicorn|grep -v grep|cut -c 9-15|xargs kill -9

5 安装配置nginx

Nginx 是异步框架的网页服务器,也可以用作反向代理、负载平衡器和 HTTP 缓存。 Nginx 是免费的开源软件,根据类 BSD 许可证的条款发布。


image.png

安装nginx方法不详细介绍,本文只用yum方式安装。

 server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /usr/share/dash_web;#这里设置你网站的跟路径

        # 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设置的一致,外网访问需要开放防火墙对应的外网端口,本设置中为80.
nginx加入到开机启动,更改配置时用nginx -s reload

6 总结

经过上述5个步骤,一个满足生产要求的基于Dash的数据分析网站框架搭建完毕,后面大家就可以在此基础上进行相应的开发工作。
希望上述介绍可以帮助到各位。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容