티스토리 뷰
Python Flask Web Application on Raspberry Pi with NGINX and uWSGI
뽀로로친구에디 2018. 8. 20. 21:36Python Flask Web Application on Raspberry Pi with NGINX and uWSGI
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 페이지에 액세스 할 수 있습니다.