将Dashapp项⽬部署在阿⾥云服务器上
⼀、购买云服务器
我蹭学⽣优惠,花了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云服务器让我有点⼼烦意乱,呜呜
想了⼀想,这个国内访问似乎是要的,所以我还是隐忍着抑郁的情绪继续吧......
get pip3.7,这是⼀个⾮常实⽤的python install package,专属于python的包安装管理器
安装 web server, apache2
flask下载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+x, y, enter)】
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/f
Inputting:
<VirtualHost *:80>
ServerName 192.168.0.1
ServerAdmin youremail@email
WSGIScriptAlias / /var/www/FlaskApp/FlaskApp.wsgi
<Directory /var/www/FlaskApp/FlaskApp/>
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/FlaskApp-error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/FlaskApp-access.log combined </VirtualHost>
只需要变动⼀个地⽅,就是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__)
@ute('/')
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的话,先下载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 = ['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上各路⼤侠“指点迷津”,⼀切都还算⽐较顺利。长路漫漫,继续加油吧!?