Forum » Programiranje » [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
V istem folderju je file uwsgi1.py, ki je kot nek posrednik med uWSGU servisom in server1.py kodo:
uwsgy1.py
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
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:
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.
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
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
service uwsgi restart
in
service uwsgi status
Od kod iz strežnika jih lahko poženemo?
Napiše:
-bash: service: command not found
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Postavitev mySQLOddelek: Programiranje | 2231 (1809) | M01O |
» | Python v WordpressOddelek: Programiranje | 1295 (1090) | Halfdead987 |
» | [Python3] Izvajanje ukazov po določenem časuOddelek: Programiranje | 1447 (1057) | noraguta |
» | Kako narediti request z "\" v URL-juOddelek: Programiranje | 2140 (1415) | Horejšio |
» | Python, prosim za pomoc pri programiranju (strani: 1 2 3 )Oddelek: Programiranje | 13980 (10082) | lenika |