将Dash app项目部署在阿里云服务器上

一、购买云服务器

我蹭学生优惠,花了9.5买了一个阿里云学生服务器,可以使用的期限是一个月。本来想用AWS的,但是每次绑定credit card的时候都出了一些问题,所以索性放弃,还是阿里云直接支付宝买起来比较方便。

轻量云服务器细节:

系统镜像:Ubuntu 16.04(最新的版本估计已经到了16.10+了)

二、用apt-get这个Ubuntu系统下适用的包管理器安装各种东西

start with an update and upgrade

sudo apt-get update && sudo apt-get upgrade 

这个ppa我也是第一次见,有机会了解一下

sudo add-apt-repository ppa:deadsnakes/ppa

更新

sudo apt-get update

get python3.7:因为服务器是国内的,所以下载起来有点慢,第一次下载还failed了,我就又下载了一次,成功了

sudo apt-get install python3.7 python3.7-dev

后面的详情我就不说了,rent云服务器让我有点心烦意乱,呜呜

Basic Flask Website Tutorial

想了一想,这个国内访问似乎是要的,所以我还是隐忍着抑郁的情绪继续吧......

get pip3.7,这是一个非常实用的python install package,专属于python的包安装管理器

curl https://bootstrap.pypa.io/get-pip.py | sudo python3.7

安装 web server, apache2

sudo apt-get install apache2 apache2-dev

安装WSGI (Web Server Gateway Inferface),这个sentdex介绍说是web server的gate,这个东东我还蛮眼熟,可惜就不知道它是什么,不知道的东西实在是太多了,一定要好好学啊

pip3.7 install mod_wsgi

接下来这个操作会得到两行输出,copy

mod_wsgi-express module-config

nano是一个“类似”与我用的比较多的vim的一个编辑器,下面这个命令运行之后,把刚刚copy的东西paste上去。注意格式,这点很重要!!!要不然就会想我一样浏览器报500【nano使用:Save and exit (ctrl+xyenter)】

nano /etc/apache2/mods-available/wsgi.load

enable wsgi

a2enmod wsgi

restart apache server

service apache2 restart

install flask

pip3.7 install flask

have an apache configuration

 

nano /etc/apache2/sites-available/FlaskApp.conf

Inputting:


                ServerName 192.168.0.1
                ServerAdmin [email protected]
                WSGIScriptAlias / /var/www/FlaskApp/FlaskApp.wsgi
                
                        Order allow,deny
                        Allow from all
                
                ErrorLog ${APACHE_LOG_DIR}/FlaskApp-error.log
                LogLevel warn
                CustomLog ${APACHE_LOG_DIR}/FlaskApp-access.log combined

只需要变动一个地方,就是ServerName, 换成自己的就可以啦

enable this site

sudo a2ensite FlaskApp

reload apache

service apache2 reload

开始准备运行 Flask app

mkdir /var/www/FlaskApp
cd /var/www/FlaskApp
nano FlaskApp.wsgi

input:

#!/usr/bin/python3.7
import sys
import logging
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0,"/var/www/FlaskApp/")

from FlaskApp import app as application

mkdir FlaskApp

cd FlaskApp

nano __init__.py

input:

from flask import Flask
import sys

app = Flask(__name__)

@app.route('/')
def homepage():
    return "Hi there, how ya doin?"

if __name__ == "__main__":
    app.run()

then compile

python3.7 __init__.py

ctrl+c interrupt 之后 重新加载服务器

service apache2 reload

在本地浏览器上访问ip地址应该就可以看到

Hi there, how ya doin?

啦!

下面贴出目录结构图(这个水印看着也太不舒服了8)

将Dash app项目部署在阿里云服务器上_第1张图片

运行dash app的话,先下载dash等各种框架和包

pip3.7 install dash dash-renderer dash-html-components dash-core-components plotly

接着把__init__.py中的代码替换成如下:

import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output

external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']
app = dash.Dash(__name__, external_stylesheets=external_stylesheets)

app.layout = html.Div([
    dcc.Input(id='my-id', value='initial value', type='text'),
    html.Div(id='my-div')
])


@app.callback(
    Output(component_id='my-div', component_property='children'),
    [Input(component_id='my-id', component_property='value')]
)
def update_output_div(input_value):
    return 'You\'ve entered "{}"'.format(input_value)

# nothing else needs changing except adding one more line code, like this
server = app.server
if __name__ == '__main__':
    app.run_server(debug=True)

之后返回上一级

cd ../

nano FlaskApp.wsgi

#!/usr/bin/python3.7
import sys
import logging
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0,"/var/www/FlaskApp/")

# from FlaskApp import app as application:将app换成server即可 
from FlaskApp import server as application

Finally,

python3.7 __init__.py

ctrl+c interrupt 之后 重新加载服务器

service apache2 reload

不出意外就能看到预期的网页啦!done!

最后十分感谢在Youtube上乐于分享的sentdex大神,这些步骤都是按照他分享的视频和文章走的,中间遇到了一些问题但还好有stackflow上各路大侠“指点迷津”,一切都还算比较顺利。长路漫漫,继续加油吧!?

你可能感兴趣的:(将Dash app项目部署在阿里云服务器上)