Flask Simple Manual
Flask
is a microframework for Python based on Werkzeug, Jinja 2 and good intentions.
Install
1
2
3
4
5
|
virtualenv ~/.env/flask/ --python=python2.7
source ~/.env/flask/bin/activate
pip install Flask
pip install uWSGI # Be used for production development
pacman -S nginx
|
Simple Example
We need a simple example to test our deployment. It returns ‘Hello World!’ when
client request ‘/’.
1
2
3
4
5
6
7
|
from flask import Flask
application = Flask(__name__)
@application.route('/')
def hello():
return "Hello World!"
|
We can test the code with the command below.
1
2
3
4
5
6
7
|
FLASK_APP=hello.py flask run
* Serving Flask app "hello.py"
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
|
And test with curl
.
1
2
|
curl localhost:5000
Hello World!
|
Production Deployment
uWSGI
Flaskās built-in server is not suitable for production. We can deploy Flask
in multiple ways. For more details, check
here.
We will use uWSGI
. You can start multiple servers with commands below. They can
listen to a http port or a unix domain socket.
1
2
3
|
uwsgi --http :8080 --manage-script-name --mount /hello=hello:application
uwsgi --socket ~/Documents/flask/hello.sock --manage-script-name --mount /hello=hello:application --chmod-socket=664
uwsgi --socket ~/Documents/flask/hello.sock --manage-script-name --mount /hello=hello:application --workers 3
|
All the uwsgi
command arguments can be set in a configuration file.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
; wsgi_hello.ini
[uwsgi]
workdir = /tmp/flask
; socket and http port
socket = /tmp/flask/hello.sock
chmod-socket = 664
;http = 127.0.0.1:8080
; enable the stats server on port 9191
stats = 127.0.0.1:9191
; master and process setting
master = true
processes = 4
threads = 2
; set mountpoints
plugin = python
mount = /hello=hello:application
manage-script-name = true
;wsgi-file = hello.py
;callable = application
|
Spawn the server with command below.
1
|
uwsgi --ini wsgi_hello.ini
|
Nginx
Nginx
will be the front server of uWSGI
. Here’s the config file.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
cat /etc/nginx/conf.d/flask.conf
upstream flask {
server unix:///tmp/flask/hello.sock;
#server 172.17.0.1:8080;
}
server {
listen 8080;
server_name flask_name;
location /hello {
include uwsgi_params;
uwsgi_pass flask;
#proxy_pass http://flask;
}
}
systemctl restart nginx
|
Test with 8080/tcp.