Sunday, December 23, 2018

How to Create Flask Server with Raspberry Pi


On this very basic tutorial, we gonna create a simple Flask Server with Raspberry Pi. Flask is python microframework which allows you to create a web based applications.





This time, we'll install Flask and using NGINX as the default webserver, altough the similar way can be reproduced using Apache.





Prepare your SD Card and burn the latest Raspbian Image onto the SD card using the tool like 'Etcher' or 'dd' command in Linux/MacOS.





Power on you raspberry pi, and take a moment, be sure your Raspberry Pi is connected to Internet, through Wi-Fi or LAN. Then update the repository and packages on Raspberry Pi with this command:





sudo apt-get update




Install the required software, like NGINX, pip3 (python installer) and uWSGI (micro-WSGI):





sudo apt-get install nginx
sudo apt-get install python3-pip
sudo pip3 install uwsgi




To install Flask Microframework, use the pip command:





sudo pip3 install flask




Create Flask App and Nginx Configuration





In your home directory, create new directory for flask app example, called 'flask'. Create new file, called 'testSite1.py' with nano containing this example script:





from flask import Flask
app = Flask(__name__)

@app.route("/")
def index():
return "<html><body><h1>Test site running under Flask</h1></body></html>"

if __name__ == "__main__":
app.run(host='0.0.0.0',debug=True)




then, test your script with uwsgi:





uwsgi --socket 0.0.0.0:8000 --protocol=http -w testSite1:app




you should read this page: Test site running under Flask





Next step, configure uwsgi init file in uwsgi.ini in your flask directory:





[uwsgi]chdir = /home/pi/flasktest
module = testSite1:app

master = true
processes = 1
threads = 2

uid = www-data
gid = www-data

socket = /tmp/flasktest.sock
chmod-socket = 664
vacuum = true

die-on-term = true




Create Autostart uWSGI by create new in /etc/systemd/system, called uwsgi.service





[Unit]
Description=uWSGI Service
After=network.target

[Service]
User=www-data
Group=www-data
WorkingDirectory=/home/pi/flask/
ExecStart=/usr/local/bin/uwsgi --ini /home/pi/flask/uwsgi.ini

[Install]
WantedBy=multi-user.target




reload the daemon using sudo systemctl daemon-reload and then start the uwsgi service with systemctl:





sudo systemctl start uwsgi.service




configure NGINX to use uWSGI by editing the default site configuration in /etc/nginx/sites-available/default





Delete all content on those file, and replace with this script:





server {
listen 80;
server_name localhost;

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




Restart NGINX with sudo systemctl restart nginx command.





Test and look your browser.


0 comments:

Post a Comment