Difference between revisions of "Flask"

From wiki
Jump to navigation Jump to search
Line 96: Line 96:
  
 
===Super simple apps===
 
===Super simple apps===
In /var/www/flask/app1/app1/py
+
In /var/www/flask/app1/app1.py
 
<syntaxhighlight lang=python>
 
<syntaxhighlight lang=python>
 
#!/usr/bin/env python3
 
#!/usr/bin/env python3

Revision as of 20:09, 14 July 2021

Basics

Check this[1]

Hello world app:

#!/usr/bin/env python3

from flask import Flask
print(__name__)
app = Flask(__name__)

@app.route('/')

def welcome():
    return 'Welcome'

if __name__ == '__main__':         # When executed on the commandline (build in webserver)
    app.run(host='0.0.0.0',port=5000) # Listen to localhost port 5000, you can also use flask run for options
    #app.run(host='0.0.0.0',port=8080,Debug=True)  # Run in debug mode, listen to all hosts on port 8080

Run the build-in server listening to all

export FLASK_APP=welcome_app.py 
flask run --host=0.0.0.0
welcome_app
 * Serving Flask app "welcome_app"
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

Now you can browse to <serverIP>:5000

https://code.tutsplus.com/tutorials/creating-a-web-app-from-scratch-using-python-flask-and-mysql--cms-22972

Integrate with nginx

Mayor part is from this site [2].

  • Install uwsgi it's python plugin.
  • Create a virtual webserver (port 80 is save enough if you have a secure front-end server)
server {
    listen 80 ;
    listen [::]:80;

    root /var/www/flask;
    server_name <fqdn>;

    location /app1 {
        include uwsgi_params;
        uwsgi_param SCRIPT_NAME /app1;
        uwsgi_modifier1 30;
        uwsgi_pass unix://tmp/app1.sock;
    }
}

Generate web pages

https://flask.palletsprojects.com/en/1.1.x/patterns/templateinheritance/#template-inheritance


Source for this basic app

Put a index.html in <app-base>/templates/

#!/usr/bin/env python3

from flask import Flask, render_template

print(__name__)
app = Flask(__name__)

@app.route('/html')
def static_page():
  return render_template('index.html')

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

Microservices and/or more applications on 1 web-server

Starting with this page and additional a lot more we got it working on raspberry pi debian.

  1. Make python3 the default
    cd /usr/bin;rm python;ln -s python3 python
  2. Install uwsgi and python plugin
    apt install uwsgi uwsgi-plugin-python3
  3. install nginx
    apt install nginx-full

I had to make a small change in the nginx configuration;
vi /etc/nginx/conf.d/my.conf
server_names_hash_bucket_size 64;

Super simple apps

In /var/www/flask/app1/app1.py

#!/usr/bin/env python3

from flask import Flask
import os

application = Flask(__name__)

@application.route('/app1')
def app1():
    return "App 1 live and kicking"

if __name__ == '__main__':
    application.run(host='0.0.0.0', port=8080,debug=True)

/var/www/flask/app2/app2.py

#!/usr/bin/env python3

from flask import Flask
import os

application = Flask(__name__)

@application.route('/app2')
def app2():
    return "App 2 live and kicking"

if __name__ == '__main__':
    application.run(host='0.0.0.0', port=8080,debug=True)

Create a nginx virtual host

/etc/nginx/sites-enabled/apps.conf

server {
  listen 80;
  server_name <your webserver fdqn>;
  index index.html;

  root /var/www/flask;

  location /app1 {
    include uwsgi_params;
    uwsgi_param SCRIPT_NAME /app1;
    uwsgi_modifier1 30;
    uwsgi_pass unix://tmp/app1.sock;
  }

  location /app2 {
    include uwsgi_params;
    uwsgi_param SCRIPT_NAME /app2;
    uwsgi_modifier1 30;
    uwsgi_pass unix://tmp/app2.sock;
  }
}

Start things

service uwsgi start
service nginx start

That's it. Point your webbrowser to http://<your webserver fdqn>/app1

Optimization still to be done. I think I start on this place