在树莓派上部署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 | # 启动: | 

