Difference between revisions of "Flask"

From wiki
Jump to navigation Jump to search
Line 37: Line 37:
  
 
=Integrate with nginx=
 
=Integrate with nginx=
https://vladikk.com/2013/09/12/serving-flask-with-nginx-on-ubuntu/
+
 
 +
Mayor part is from this site [https://vladikk.com/2013/09/12/serving-flask-with-nginx-on-ubuntu/].
 +
 
 +
These are the configuration files I needed.
 +
 
 +
* Install uwgi-emperor and it's python plugin
 +
 
 +
Generic configuration file (/etc/uwsgi-emperor/emperor.ini):
 +
[uwsgi]
 +
# try to autoload appropriate plugin if "unknown" option has been specified
 +
autoload = true
 +
# enable master process manager
 +
master = true
 +
# spawn 2 uWSGI emperor worker processes
 +
workers = 2
 +
# automatically kill workers on master's death
 +
no-orphans = true
 +
# place timestamps into log
 +
log-date = true
 +
# user identifier of uWSGI processes (same as who runs the web-server)
 +
uid = www-data
 +
# group identifier of uWSGI processes (same as who runs the web-server)
 +
gid = www-data
 +
# vassals directory
 +
emperor = /etc/uwsgi-emperor/vassals
 +
plugins = python3
 +
 
 +
Application configuration file (/etc/uwsgi-emperor/vassals/welcome.ini)
 +
 
 +
[uwsgi]
 +
#application's base folder
 +
base = /opt/apo/flask
 +
#python module to import
 +
app = welcome
 +
module = %(app)
 +
#home = %(base)/venv
 +
pythonpath = %(base)
 +
#socket file's location
 +
socket = /var/local/uwsgi/%n.sock
 +
#permissions for the socket file
 +
chmod-socket    = 666
 +
#the variable that holds a flask application inside the module imported at line #6
 +
callable = app
 +
#location of log files
 +
logto = /var/log/uwsgi/%n.log
 +
plugins = python3
 +
 
 +
* Create a virtual webserver (port 80 is save enough if you have a secure front-end server)
 +
----
 +
 
 +
 
 +
<syntaxhighlight lang="nginx">
 +
server {
 +
listen 80 ;
 +
listen [::]:80 ;
 +
 
 +
root /var/www/flask;
 +
 
 +
server_name <fqdn>;
 +
 
 +
location / {
 +
include uwsgi_params;
 +
        uwsgi_pass unix:/var/local/uwsgi/welcome.sock;
 +
}
 +
}
 +
</syntaxhighlight>

Revision as of 23:29, 14 February 2020

basics

Check this[1]

Hello world app:

#!/usr/bin/env python3

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

@app.route('/')

def main():
    return 'Hello World'

if __name__ == '__main__':
    app.run()  # Default (listen to localhost port 5000, use flash 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

templates

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

Integrate with nginx

Mayor part is from this site [2].

These are the configuration files I needed.

  • Install uwgi-emperor and it's python plugin

Generic configuration file (/etc/uwsgi-emperor/emperor.ini):

[uwsgi]
# try to autoload appropriate plugin if "unknown" option has been specified
autoload = true
# enable master process manager
master = true
# spawn 2 uWSGI emperor worker processes
workers = 2
# automatically kill workers on master's death
no-orphans = true
# place timestamps into log
log-date = true
# user identifier of uWSGI processes (same as who runs the web-server)
uid = www-data
# group identifier of uWSGI processes (same as who runs the web-server)
gid = www-data
# vassals directory
emperor = /etc/uwsgi-emperor/vassals
plugins = python3

Application configuration file (/etc/uwsgi-emperor/vassals/welcome.ini)

[uwsgi]
#application's base folder
base = /opt/apo/flask
#python module to import
app = welcome
module = %(app)
#home = %(base)/venv
pythonpath = %(base)
#socket file's location
socket = /var/local/uwsgi/%n.sock
#permissions for the socket file
chmod-socket    = 666
#the variable that holds a flask application inside the module imported at line #6
callable = app
#location of log files
logto = /var/log/uwsgi/%n.log
plugins = python3
  • 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 / {
		include uwsgi_params;
        	uwsgi_pass unix:/var/local/uwsgi/welcome.sock;
	}
}