樹莓派部署Flask框架

我的博客部分文章講同步至簡書。

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
測試運(yùn)行1
測試運(yùn)行1

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

測試運(yùn)行
測試運(yùn)行

其中--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

此時會顯示一堆啟動信息

uwsgi
uwsgi

安裝并配置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)訪問。

q
q

原文地址:https://www.sfantree.com/flask_on_raspberrypi/

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容