在树莓派上部署Nginx+uWSGI+Flask
第二季度接了一个有意思的任务——用机器学习算法做数据拟合,算法本身没什么,但是如何让一个在python中的算法变成一个有界面的服务就比较有意思了。我刚好又买了一块树莓派3,于是打算把后端程序放在树莓派上运行。经过上一篇的工作,树莓派已经具备python等工具的运行环境,接下来该调试发布程序了……
1. 部署Nginx
安装并启动Nginx
1 | sudo apt-get install nginx |
创建Nginx配置文件~/webapp/helloflask.conf
:
1 | #==========helloflask.conf========== |
这里使用80端口是为了配合Dataplicity的Wormhole:),这样可以直接通过互联网访问Nginx发布的内容。
删除默认配置的软链接:
1 | sudo rm /etc/nginx/sites-enabled/default |
备份默认配置:
1 | sudo mv /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak |
将配置用软链接配置在sites-enabled
文件夹中:
1 | sudo ln -s /home/pi/webapp/helloflask_nginx.conf /etc/nginx/sites-enabled/ |
重启Nginx服务:
1 | sudo /etc/init.d/nginx restart |
此时由于没有运行uwsgi
,所以访问 http://192.168.1.106 会出现502错误。(原因很明显,配置文件中的unix:/home/pi/webapp/helloflask_uwsgi.sock
并没有被创建)
2. 测试Flask
1 | pip install flask |
创建flask的hello world程序~/webapp/helloflask.py
,内容如下:
1 | #==========helloflask.py========== |
测试这个小程序:
1 | python helloflask.py |
访问 http://192.168.1.106:5001 (我的树莓派IP)出现Hello World!
。
3. 部署uWSGI
为了编译uwsgi,需要安装build-essential
以及python3.4-dev
:
1 | sudo apt-get install build-essential python3.4-dev |
为了便于包管理,我们依然使用webenv
环境,在conda的python3.4.3下uWSGI:
1 | source activate webenv |
为uWSGI编写配置文件,方便以后使用~/webapp/helloflask_uwsgi.ini
:
1 | #==========helloflask_uwsgi.ini========== |
运行uWSGI:
1 | uwsgi --ini helloflask_uwsgi.ini |
此时可以看到/home/pi/webapp/helloflask_uwsgi.sock
文件生成,再访问http://192.168.1.106则会看到我们的Hello World
。
此时在Dataplicity上将Wormhole设为Enabled,就可以通过Wormhole看到这个Hello World
了。
另外:常用Nginx命令:
1 | # 启动: |