树莓派虚拟环境部署flask:python3.7+Ngnix+Gunicorn+virtualenv
自己的树莓派3B+吃灰很久了,它做个小服务器还是可以的,查阅了许多资料,最终确定python3.7+Ngnix+Gunicorn+flask的方案。
网上有的说树莓派3B+不能用64G的卡,实测能用,只不过在用sdCardFormatter格式化的时候,需要一个比较靠谱的读卡器。mac系统用sdCardFormatter格式化sd卡,用BalenaEtcher写入树莓派系统。用最新的系统就行,默认已经装好了python3.7.3.
网上一些方案用uwsgi,但是我自己在配置的时候频繁出现Operational MODE: preforking+threaded错误和no app loaded. going in full dynamic mode,大意是容器里面是空的,无论如何改变.ini配置,就是无法运行,所以放弃了uwsgi。
开始的时候特别想不用虚拟环境,嫌麻烦,但是最终还是用了虚拟环境,不得不说:真香!在普通用户权限下根本无法pip包,提示网络错误。但是在虚拟环境下,很正常地下载,不清楚为什么,反正管用。
接下来简述一下步骤。
- 安装树莓派,树莓派设置中将SSH服务打开。并在自己的电脑准备工具,我用ZenTermlite和FileZilla传文件,为了方便,把树莓派的python命令默认改为启动python3,要不好像是默认python2.7的。
- 安装Ngnix+Gunicorn+virtualenv,最开始我pip安不上包,所以都是用的离线的tar.gz安装的。在本机上下载解压,再ftp传到树莓派的home/pi/Downloads文件夹下,再cd到该文件夹,python setup.py install。
- 安装flask包。我是在home/pi/flask文件夹下建的flask项目。在本机建好项目后,把flask项目的app.py拷贝到flask文件夹中,并python app.py,在树莓派上访问127.0.0.1:8080,确定这个项目能跑起来,注意flask内的app.run(debug=True, host='0.0.0.0', port=8080)。因为之前用的是5000,无论如何都无法再外网访问,所以换了个端口8080。
- 设置虚拟环境。虚拟环境可以理解为项目里面的一个“环境设置”。flask文件夹就是项目地址,flask文件夹下面的venv就是这个项目运行需要的环境。常见命令如下:
mkdir venv #创建venv的项目文件夹
cd venv #进入venv文件夹
virtualenv venv #创建虚拟环境
source venv/bin/activate #激活虚拟环境,此时最左边应该会有env的显示字样
deactivate #退出虚拟环境
我是将venv文件夹放在flask项目文件夹内。
接下来的Ngnix和Gunicorn都在激活虚拟环境时进行。
- 开启Ngnix。
配置命令:sudo nano /etc/nginx/sites-available/default
server {
listen 80;
server_name raspberry;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
启动Ngnix服务:sudo /etc/init.d/nginx start
重启Ngnix:sudo service nginx restart
配置Gunicorn。在虚拟环境中gunicorn -w 4 -b 127.0.0.1:8080 app:app 这时候局域网机器访问其ip地址就可以看到flask项目设置的主页了。
- 配置树莓派启动时就开启各种服务:su root命令启用root账户,
sudo nano /home/pi/flask/flaskS.sh添加执行的命令内容如下:
sudo /etc/init.d/nginx start
cd /home/pi/flask
gunicorn -w 4 -b 127.0.0.1:8080 app:app
上面的命令是模仿pi用户登入时,写的命令,也就是执行一遍这个脚本,就能启动flask服务了。
然后编辑启动文件
sudo nano /etc/rc.local
在文件的 exit 0 之前,添加执行sh文件的脚本:
su pi -c "exec /home/pi/flask/flaskS.sh "
这句至关重要。su pi -c会登入pi账户并执行sh脚本,之后会切换为原来的用户。
root用户命令行shutdown -r now,回车之后重启。非root用户sudo reboot重启树莓派。再在浏览器中输入树莓派的ip地址,就能看到flask项目的主页了。
个人注意要点:虚拟环境设置,和开机启动。
参考资料:
https://zhuanlan.zhihu.com/p/72610135?utm_source=qq