» »

[Ka-ko] Config za Flask + uWSGI + Nginx

[Ka-ko] Config za Flask + uWSGI + Nginx

HotBurek ::

Poydravljeni.


Par dni nazaj sem postavil semple flask app in naletel na nekaj config težav, ki jih prej nisem imel. Razlika je v tem, kako poganjaš Python kodo. Iz log fajlov:

- raw: *** no app loaded. going in full dynamic mode ***
- pre: *** Operational MODE: preforking ***

Flask in ostala ogrodja so ta druga opcija.



[----------------Flask------------------]

Python kodo sem postavil v /var/flask/test1/.

Tu notri je file server1.py, kjer so definirani klici na različne URLje:

server1.py
#!/usr/bin/python3.7

from flask import Flask, render_template;
app1 = Flask(__name__);

@app1.route("/")
def home():
    return render_template("home.html");

@app1.route("/test/")
def test():
    return render_template("test.html");

@app1.route("/about/")
def about():
    return render_template("about.html");

if __name__== "__main__":
    app1.debug = True;
    app1.run(host = "127.0.0.1", port = 5000);


V istem folderju je file uwsgi1.py, ki je kot nek posrednik med uWSGU servisom in server1.py kodo:

uwsgy1.py
#!/usr/bin/python3.7

from server1 import app1;

if __name__ == "__main__":
    app1.run(debug=True);


V tem trenutku lahko potestiramo, če se strežnik požene.

/usr/bin/python3.7 /var/flask/test1/uwsgi1.py

Server izpiše:

* Serving Flask app "server1" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 123-456-789


Ter še test z wget:

wget http://127.0.0.1:5000/



[-----------------uWSGI--------------------]

Najprej je potrebno namestit plugin uwsgi-plugin-python3.

apt-get install uwsgi-plugin-python3

Sledi konfiguracija uWSGI. Ta se nahaja v /etc/uwsgi/apps-available/:

test1.ini
[uwsgi]

# plugins
plugins = python3

# module
module = uwsgi1:app1

# socket
socket = /var/flask/test1/test1.socket
#http-socket = 127.0.0.1:3031
chmod-socket = 666
vacuum = true

# processes config
master = true
processes = 4
enable-threads = false

# sig
#die-on-term = true

# move to dir
chdir = /var/flask/test1/
wsgi-file = uwsgi1.py


To konfiguracijo je potrebno zlinkat v apps-enabled:

ln -s /etc/uwsgi/apps-available/test1.ini /etc/uwsgi/apps-enabled/

Ko je to narejeno restartamo servis:

service uwsgi restart

In pogledamo, če je vse vredu:

service uwsgi status


In če je, se v direktoriju /var/flask/test1/ pojavi file test1.socket.

Socket-e zlistamo tako:

ss -l | grep test1

Primer izpisa:

u_str LISTEN 0 100 /var/flask/test1/test1.socket 137094 * 0


[------------------Nginx----------------]

Sedaj sledi še konfiguracija Nginx-a.

Tole je primer konfiguracije:

location / {
    include uwsgi_params;

    uwsgi_pass unix:///var/flask/test1/test1.socket;

    uwsgi_pass_request_body on;
    uwsgi_pass_request_headers on;
    uwsgi_param HTTP_REFERER $http_referer;
}


Zelo pomembno: V konfiguracij se ne sme pojavit uwsgi_modifier1 9;, sicer zadeva v prefork mode nea dela (v dynamic pa).


Da še dodam glede pravic; imel sem težavo, ko Nginx ni moral dostopati do test1.socket fajla. Zato je v uwsgi configu vnešen chmod-socket = 666. Error se pa pojavi v Nginx error fajlu:

[crit] 15584#15584: *195 connect() to unix:///var/flask/test1/test1.socket failed (13: Permission denied) while connecting to upstream

V kontektsu pravic so sigurno še opcije, da se config izboljša in naredi bolj varen.


[------------------uporaba----------------]

Ko servis uWSGI startamo, se v /var/flask/test1/ kreira folder __pycache__. Zadeve ne poznam, ugibam pa, da je notri "skompajlana" verzija.

Zelo pomembno: Če spremenimo vsebino templejtov (naprimer iz zgornjega primera ~/templates/home.html), moramo narediti restart uWSGI-ja (service uwsgi restart). Sicer se spremembe ne vidijo na output-u.


To je to. Gut luck.
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
  • spremenilo: HotBurek ()

LimitaL ::

Pozdravljen,

service uwsgi restart
in
service uwsgi status
Od kod iz strežnika jih lahko poženemo?
Napiše:
-bash: service: command not found

jype ::

Reči je treba pognati kot root, ali pa "sudo service uwsgi restart".


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Postavitev mySQL

Oddelek: Programiranje
92231 (1809) M01O
»

Python v Wordpress

Oddelek: Programiranje
81295 (1090) Halfdead987
»

[Python3] Izvajanje ukazov po določenem času

Oddelek: Programiranje
211447 (1057) noraguta
»

Kako narediti request z "\" v URL-ju

Oddelek: Programiranje
172140 (1415) Horejšio
»

Python, prosim za pomoc pri programiranju (strani: 1 2 3 )

Oddelek: Programiranje
10413980 (10082) lenika

Več podobnih tem