[PYTHON] Full-Scale-Server mit Nginx + uWSGI + Flask + Ubuntu (Implementierung)

Fortsetzung von Installation

Eine grobe Beschreibung und Installation jeder Anwendung Siehe Vorheriger Artikel

Flask

Erstellen Sie eine Datei mit der folgenden Struktur
flask_web_application/
├── application/
│   ├── __init__.py
│   └── views.py
└── server.py

Erstellen Sie zunächst den Hauptteil von Flask mit dem Namen app

__init__.py


from flask import Flask

app = Flask(__name__)

import application.views

Nach dem Zugriff auf das Stammverzeichnis Gib einfach "Hallo Welt" zurück.

views.py


from application import app

@app.route('/')
def show_entries():
    return "Hello World"

Von uWSGI ausgeführte Dateien Der Prozess beginnt hier

server.py


from application import app

if __name__ == "__main__":
    app.run(host='0.0.0.0')

Dieses Mal habe ich es übrigens in / home / ubuntu / application / </ code> geschafft Für andere Verzeichnisse Übergeben Sie die Berechtigung mit chown an den Benutzer, der uWSGI ausführt Stellen Sie die Berechtigung mit chmod auf ungefähr "775" ein Ich werde später erklären, aber diesmal uWSGI

Gruppenname: www-data Benutzername: www-Daten

Laufen weiter

uWSGI

Erstellen Sie zuerst uwsgi.ini uwsgi.ini ist eine Konfigurationsdatei, die beim Starten von uwsgi gelesen werden muss

Es wird nur beim Start gelesen, damit Sie es überall platzieren können Diesmal leicht verständliche Kolbenanwendung gemacht Legen Sie es direkt unter

uwsgi.ini



[uwsgi]
base = /home/ubuntu/application/flask_web_application

module = server:app

virtualenv = /home/ubuntu/py36_flask_server

pythonpath = %(base)

callable = app

uid = www-data
gid = www-data
master = true
processes = 1
threads = 1
socket = /tmp/uwsgi.sock
chmod-socket = 666
vacuum = true
die-on-term = true
thunder-lock = true

Nur der Hauptteil

Variable Erläuterung
base Anwendungsverzeichnis
module app = Flask(__name__)Die App gemacht in
virtualenv Python-Verzeichnis für virtuelle Umgebungen
pythonpath Gleich wie Basis
callable Modul zum Aufrufen(app)
uid Wird mit dem Benutzernamen ausgeführt
gid Wird nach Gruppennamen ausgeführt
processes Die Anzahl der Kerne wird je nach Umgebung und Anwendung empfohlen
threads FlaskDie Anzahl der von Flask verwendeten Threads und das Ausführen von Flask in mehreren Threads wird nicht empfohlen.(GIL-Problem)
socket UNIX-Domain-Socket

Erstellen Sie im Voraus den von uid und gid angegebenen Benutzernamen und Gruppennamen. www-Daten sollten bereits vorhanden sein Wenn Sie es nicht angeben, wird es als root ausgeführt, sodass es für die Sicherheit nicht sehr gut ist

Verschiedene Artikel, die hilfreich sein werden https://uwsgi-docs.readthedocs.io/en/latest/ThingsToKnow.html https://qiita.com/yasunori/items/64606e63b36b396cf695 https://qiita.com/wapa5pow/items/f4326aed6c0b63617ebd https://qiita.com/11ohina017/items/da2ae5b039257752e558

Fügen Sie uWSGI zum Dienst hinzu
$ sudo vi /etc/systemd/system/uwsgi.service

#Fügen Sie Folgendes hinzu
[Unit]
Description=uWSGI
After=syslog.target

[Service]
ExecStart=/home/ubuntu/py36_flask_server/bin/uwsgi --ini /home/ubuntu/application/flask_web_application/uwsgi.ini
# Requires systemd version 211 or newer
RuntimeDirectory=uwsgi
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all

[Install]
WantedBy=multi-user.target

Führen Sie uWSGI aus, das in der virtuellen Umgebung in ExecStart installiert ist Geben Sie die zuvor in --ini erstellte Einstellungsdatei an

Fügen Sie uWSGI zum Service hinzu

$ sudo systemctl enable uwsgi

Nginx

Deaktivieren Sie die Standard-Nginx-Begrüßungsseite

Löschen Sie conf.d / default.conf, falls vorhanden

$ sudo rm /etc/nginx/conf.d/default.conf

Entfernen Sie / nginx / sites-enabled / default, falls vorhanden

$ sudo rm /etc/nginx/sites-enabled/default

Dadurch wird die Standardwebsite ausgeblendet

Erstellen Sie verfügbare und aktivierte Sites, wenn diese nicht vorhanden sind

$ sudo mkdir /etc/nginx/sites-available
$ sudo mkdir /etc/nginx/sites-enabled

Was sind Sites-verfügbar und Sites-fähig? Grundsätzlich für die Verwendung mehrerer Domänen auf einem Server Einfach zu verwalten

Diesmal verwende ich jedoch nicht mehrere Domains separat Aufgrund der Struktur von Ubuntu + Nginx + uWSGI Stabiler als mit conf.d.

Wie benutzt man

  • Erstellen Sie eine Einstellungsdatei für jede Domain in den verfügbaren Sites ・ Erstellen Sie einen symbolischen Link für Websites, die in Websites verfügbar sind

Sehr einfache Sache Symbolische Links sind sogenannte Verknüpfungen

Im http-Blockteil von /etc/nginx/nginx.conf Schreiben Sie /etc/nginx/conf.d/*.conf neu

$ sudo vi /etc/nginx/nginx.conf

http{
…
include /etc/nginx/conf.d/*.conf;
}

http{
…
include /etc/nginx/sites-enabled/*;
}

Hinzugefügt /etc/nginx/sites-available/myapplication.conf

$ sudo vi /etc/nginx/sites-available/myapplication.conf

#Fügen Sie Folgendes hinzu
server {
    listen       80;
    root /var/www/html;
    location / { try_files $uri @yourapplication; }
    location @yourapplication {
        include uwsgi_params;
        uwsgi_pass unix:///tmp/uwsgi.sock;
    }
}

Grob gesagt, try_files mit der URL wie sie ist Eine Struktur, die von root sucht und intern zu uWSGI umleitet (mit der URL wie sie ist), wenn sie nicht vorhanden ist root hat nichts besonderes Sie können alles an uWSGI senden, aber die Formel lautet wie oben

uwsgi_params ist eine uWSGI-Konfigurationsdatei unix: ///tmp/uwsgi.sock ist ein UNIX-Domain-Socket Dies wird als Kommunikation mit uWSGI bezeichnet.

Sie können auch eine Verbindung mit TCP herstellen, der jedoch den Port belegt. Besser Domain Socket verwenden

Wenn Sie eine Verknüpfung erstellen, sind die Nginx-Einstellungen abgeschlossen

$ sudo ln -s /etc/nginx/sites-available/myapplication.conf /etc/nginx/sites-enabled/myapplication

Zugriff Es wird empfohlen, das gesamte System hier einmal neu zu starten. Wenn nicht, starten Sie Nginx einfach neu
$ sudo systemctl restart nginx

Wenn uwsgi nicht ausgeführt wird, starten Sie es

& sudo systemctl start uwsgi

uwsgi Fehlerprüfung

$ sudo systemctl status uwsgi

Nginx-Fehlerprüfung

$ sudo systemctl status nginx

Lesen Sie durch und versuchen Sie den Zugriff, wenn kein Fehler vorliegt

$ curl http://127.0.0.1
Hello, World

Zusammenfassung Grundsätzlich ist es schneller, Nginx statische Dateien verarbeiten zu lassen

Bitte lassen Sie mich wissen, wenn etwas nicht stimmt

Recommended Posts