티스토리 뷰

Python Flask Web Application on Raspberry Pi with NGINX and uWSGI

Flask

Raspberry Pi는 제한된 수의 사용자를 대상으로하는 웹 응용 프로그램을 호스트 할만큼 강력합니다. 일반적인 사용 사례는 스마트 홈 또는 빌딩을 위해 설계된 IoT 애플리케이션 일 수 있습니다.


SQLite 또는 MySQL DB를 사용하여 라스베리 파이에 전체 스택 응용 프로그램 (Web + App + DB)을 가질 수 있지만, 여기서는 웹 및 앱 티어를 사용하여 간단하게 유지할 것입니다.


HTTP 요청과 관련하여 Python 코드를 실행하려면 Web Server와 Python Web Application간에 uWSGI Server가 필요합니다. 이 예에서는 가장 인기있는 uWSGI 서버 중 하나 인 "uwsgi"를 사용하려고합니다.


다음 다이어그램에서는 Raspberry Pi의 다양한 구성 요소에 대한 정보 흐름과 배치를 볼 수 있습니다.


다음 단계는 기본적인 플라스크 응용 프로그램을 배포하는 데 필요한 패키지의 설치 및 구성 과정을 안내합니다.


1. 업데이트 및 라즈베리 파이 패키지 업그레이드 :

업데이트 라스베리 파이 패키지 -

sudo apt-get update

라스베리 파이 패키지 업그레이드 -

sudo apt-get upgrade



2. NGINX 설치 :

apt-get와 함께 Raspberry Pi에 NGINX를 설치하십시오 -

sudo apt-get install nginx

NGINX 서비스 시작 -

sudo service nginx start

NGINX 설치를 확인하려면 브라우저에 Raspberry Pi의 IP 주소를 입력하면 기본 NGINX 페이지의 "Welcome to nginx on Debian!"메시지가 표시됩니다.


3. 플라스크를 설치:

sudo pip install flask

4. uWSGI 설치 :

Raspberry Pi에 build-essentials와 python-dev 설치 -

sudo apt-get install build-essential python-dev

pip를 사용하여 uWSGI 설치 -

sudo pip install uwsgi


5. 간단한 Python Flask App을 만듭니다.

"/ home / pi"디렉토리에 폴더 만들기 -

mkdir /home/pi/sampleApp

이 디렉토리의 소유자 변경 -

sudo chown www-data /home/pi/sampleApp

"/ home / pi / sampleApp"디렉토리에 "sample_app.py"라는 새 파일 만들기 -

sudo nano /home/pi/sampleApp/sample_app.py


"sample_app.py"파일에 다음 코드 추가 -

from flask import Flask
first_app = Flask(__name__)

@first_app.route("/")
def first_function():
 return "<html><body><h1 style='color:red'>I am hosted on Raspberry Pi !!!</h1></body></html>"

if __name__ == "__main__":
 first_app.run(host='0.0.0.0



6. Python과 uWSGI로 Flask App 테스트하기 :

다음 명령으로 "sample_app.py"파일을 실행하십시오. 브라우저 (http : //x.x.x.x : 5000 /)에서 포트 5000의 모든 오류 유형 Raspberry Pi의 IP 주소를 볼 수 없으면 "나는 Raspberry Pi !!!에서 호스팅 중입니다."라는 메시지가 빨간색으로 표시됩니다.


python /home/pi/sampleApp/sample_app.py

Flask 응용 프로그램을 Python으로 테스트 한 후에는 uWSGI로 테스트 할 수 있습니다.

cd /home/pi/sampleApp/

uwsgi --socket 0.0.0.0:8000 --protocol=http -w sample_app:first_app

이제 Raspberry Pi의 IP 주소 (http : //x.x.x.x : 8000 /)로 포트 8000을 사용하여 앱을 테스트 할 수 있습니다.


7. uWSGI 초기화 파일 생성 :

"/ home / pi / sampleApp"디렉토리에 "uwsgi_config.ini"라는 새 파일을 만듭니다.

sudo nano /home/pi/sampleApp/uwsgi_config.ini

"uwsgi_config.ini"파일에 다음 코드를 추가하십시오 -

[uwsgi]

chdir = /home/pi/sampleApp
module = sample_app:first_app

master = true
processes = 1
threads = 2

uid = www-data 
gid = www-data
socket = /tmp/sample_app.sock
chmod-socket = 664
vacuum = true

die-on-term = true


8. uWSGI 초기화 파일 테스트 :

다음 명령을 실행하십시오 -

uwsgi --ini /home/pi/sampleApp/uwsgi_config.ini

Raspberry Pi에 대한 다른 세션을 열고 "/ tmp"디렉토리에 "sample_app.sock"파일이 있는지 확인하십시오.

ls /tmp/ |grep sample_app.sock

명령 출력에 "sample_app.sock"파일이 표시되면 구성이 올바른 것입니다.



9. 재부팅 후 uWSGI를 자동 시작으로 구성하십시오.

다음 명령을 사용하여 "/etc/rc.local"파일을 편집하십시오 -

sudo nano /etc/rc.local

"exit 0"줄 앞의이 파일에 다음 명령을 추가하십시오.

/usr/local/bin/uwsgi --ini /home/pi/sampleApp/uwsgi_config.ini --uid www-data --gid www-data --daemonize /var/log/uwsgi.log


10. 웹 트래픽을 uWSGI (역방향 프록시)로 리디렉션하도록 NGINX를 구성합니다.

"/ etc / nginx / sites-enabled /"에서 "default"파일을 제거하십시오 -

sudo rm /etc/nginx/sites-enabled/default

"/ etc / nginx / sites-available /"에 "sample_app_proxy"라는 새 파일을 만듭니다.

sudo nano /etc/nginx/sites-available/sample_app_proxy

"sample_app_proxy"파일에 다음 구성을 추가하십시오 -

server {
 listen 80;
 server_name localhost;

 location / { try_files $uri @app; }
 location @app {
 include uwsgi_params;
 uwsgi_pass unix:/tmp/sample_app.sock;
 }
}


"/ etc / nginx / sites-available / sample_app_proxy"파일을 "/ etc / nginx / sites-enabled"디렉토리에 링크 -

sudo ln -s /etc/nginx/sites-available/sample_app_proxy /etc/nginx/sites-enabled

NGINX 서비스 재시작 -

sudo service nginx restart

이것으로 당신의 라즈베리 파이는 샘플 파이썬 플라스크 웹 애플리케이션으로 준비되었습니다. 웹 브라우저에서 Raspberry Pi의 IP 주소를 입력하여 HTML 페이지에 액세스 할 수 있습니다.

댓글
최근에 달린 댓글
글 보관함
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Total
Today
Yesterday
    뽀로로친구에디
    최근에 올라온 글