我的博客部分文章講同步至簡書。
Flask又是一種輕量級 Web 應(yīng)用框架,這次將其部署在樹莓派上玩玩兒...
上傳flask項目文件
這里我只在github上克隆了一個模板,模板比較簡單,僅僅只有歡迎頁和基本框架。
mkdir -p /home/pi/study/flask
git clone https://github.com/Andrew-liu/flask_pure.git

項目里面的圖片加載不出來,這里我做了簡單的替換。
安裝必要組件
sudo apt-get install python-pip python-dev mongodb
其中mongodb是克隆的這個項目所依賴的
安裝VirtualEnv
VirtualEnv可以為我們的每個python項目搭建一個獨立的環(huán)境,互不影響,而且在沒有sudo的權(quán)限下也可以對庫進(jìn)行安裝和升級。
安裝虛擬環(huán)境
sudo pip install virtualenv
安裝完成后為我們的項目創(chuàng)建虛擬環(huán)境
cd /home/pi/study/flask
virtualenv venv
安裝完成后會多出一個venv文件夾,其中的lib就是虛擬環(huán)境中python庫的安裝位置
激活虛擬環(huán)境
source venv/bin/activate
進(jìn)入虛擬環(huán)境后命令符頭部會出現(xiàn)(venv),推出虛擬環(huán)境可以使用deactivate命令。
安裝Flask相關(guān)組件
一般一個flask項目中會包含一個requirements.txt,其中記錄著此項目依賴的flask擴(kuò)展包,這樣做會提高項目部署時的效率。
克隆的這個項目里面已經(jīng)包含了requirements.txt,注意此時應(yīng)該切換到虛擬環(huán)境下,命令行開頭有個(venv),否則擴(kuò)展包將全部安裝到系統(tǒng)環(huán)境下。
(venv)cd /home/pi/study/flask/flask_pure
(venv)pip install -r requirements.txt
虛擬環(huán)境下pip安裝可以不加sudo,等安裝完成過后就可以測試運(yùn)行一下flask。
測試運(yùn)行Flask
flask跑起來也特別簡單
(venv)cd /home/pi/study/flask/flask_pure
(venv)python runserver --host 0.0.0.0 -p 12345

瀏覽器打開樹莓派的ip:12345即可訪問。

其中--host指定主機(jī)地址,0.0.0.0代表默認(rèn)路由,全網(wǎng)都可以訪問,-p指定開放端口。
安裝和配置uWSGI
uwsgi的特點在于自帶的進(jìn)程控制程序.它是用c語言編寫,使用natvie函數(shù),其實和spawn-fcgi/php-fpm類似。所以uwsgi可以支持多種應(yīng)用框架,包括python,lua,ruby,erlang,go等等
安裝
和上面依賴包一樣安裝到虛擬環(huán)境
(venv)pip install uwsgi
配置文件
vim一個config.ini
[uwsgi]
# uwsgi 啟動時所使用的地址與端口
socket = 127.0.0.1:8001
# 指向網(wǎng)站目錄
chdir = /home/pi/study/flask/flask_pure/
# python 啟動程序文件
wsgi-file = manage.py
# python 程序內(nèi)用以啟動的 application 變量名
callable = app
# 處理器數(shù)
processes = 4
# 線程數(shù)
threads = 1
#狀態(tài)檢測地址
stats = 127.0.0.1:9191
注意:callable=app這個app是manage.py 程序文件內(nèi)的一個變量,這個變量的類型是Flask的application類。
測試運(yùn)行
(venv)cd /home/pi/study/flask/flask_pure
(venv)uwsgi ./config.ini
此時會顯示一堆啟動信息

安裝并配置Supervisor
Linux的后臺進(jìn)程運(yùn)行有好幾種方法,例如nohup,screen等,但是,如果是一個服務(wù)程序,要可靠地在后臺運(yùn)行,我們就需要把它做成daemon,最好還能監(jiān)控進(jìn)程狀態(tài),在意外結(jié)束時能自動重啟。
supervisor就是用Python開發(fā)的一套通用的進(jìn)程管理程序,能將一個普通的命令行進(jìn)程變?yōu)楹笈_daemon,并監(jiān)控進(jìn)程狀態(tài),異常退出時能自動重啟。
安裝
sudo apt-get install supervisor
新建配置文件
cd /etc/supervisor/conf.d/
vim flask.conf
加入以下內(nèi)容
[program:my_flask]
# 啟動命令入口
command=/home/pi/study/flask/venv/bin/uwsgi /home/pi/study/flask/flask_pure/config.ini
# 命令程序所在目錄
directory=/home/pi/study/flask
#運(yùn)行命令的用戶名
user=root
autostart=true
autorestart=true
#日志地址
stdout_logfile=/home/pi/study/flask/logs/uwsgi.log
重啟服務(wù)
sudo service supervisor start
安裝和配置 Nginx
nginx的優(yōu)點不用多介紹了
sudo apt-get install nginx
默認(rèn)配置文件在/etc/nginx/sites-enabled/default
sudo cp /etc/nginx/sites-enabled/default /etc/nginx/sites-enabled/default.bak
sudo vim /etc/nginx/sites-enabled/default
加入以下內(nèi)容
server {
listen 80;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8001; # 指向uwsgi 所應(yīng)用的內(nèi)部地址,所有請求將轉(zhuǎn)發(fā)給uwsgi 處理
uwsgi_param UWSGI_PYHOME /home/pi/study/flask/venv; # 指向虛擬環(huán)境目錄
uwsgi_param UWSGI_CHDIR /home/pi/study/flask/flask_pure/; # 指向網(wǎng)站根目錄
uwsgi_param UWSGI_SCRIPT manage:app; # 指定啟動程序
}
}
重啟nginx服務(wù)
sudo service nginx restart
測試運(yùn)行
接下來配合上一篇文章Ngrok內(nèi)網(wǎng)穿透實現(xiàn)外網(wǎng)訪問。

原文地址:https://www.sfantree.com/flask_on_raspberrypi/
本站原創(chuàng)文章采用 “署名-非商業(yè)性使用-相同方式共享 3.0 中國大陸 ”創(chuàng)作共用協(xié)議。轉(zhuǎn)載時請以鏈接形式標(biāo)明本文地址。