Eine Geschichte über mich, der sowohl die CentOS- als auch die Webserverkonstruktion nicht kennt, hat Flask, Nginx und uWSGI betreten. Das Verfahren ist hier zusammengefasst.
[](Ein separater Artikel beschreibt die verschiedenen Schwierigkeiten, die dabei aufgetreten sind ↓)
Sie sollten es entsprechend ersetzen und lesen.
user
: Benutzername
proj
: Projektverzeichnis
test.py
: Schreiben Sie den Code, der Flask ausführt. Direkt unter proj platziert
$ cd /home/user/proj
Erstellen Sie mit Flask eine Umgebung, die das Erstellen von Webanwendungen mit Python vereinfacht.
$ sudo yum install epel-release #Legen Sie das Repository
$ sudo yum install python3-devel #Fügen Sie python3 ein
$ pip3 install pipenv #Pipenv eingeführt
$ export PIPENV_VENV_IN_PROJECT=true #Legen Sie fest, dass im Projektverzeichnis eine virtuelle Umgebung erstellt werden soll
$ pipenv --python 3 #Erstellen einer virtuellen Umgebung
$ ls -a #Überprüfen Sie die Dateiliste
Wenn Sie bestätigen können, dass .venv
erstellt wurde, ist dies in Ordnung.
Dies ist das erforderliche Minimum.
$ pipenv install flask markupsafe
Wenn Sie sich keine Gedanken über die Migration machen möchten, installieren Sie mit pipenv
anstelle von pip
.
Wenn andere Module erforderlich sind, installieren Sie sie auf die gleiche Weise mit "pipenv install".
Erstellen Sie test.py
.
$ vi test.py
Rufen Sie den Einfügemodus mit "i" auf und schreiben Sie Folgendes.
Wenn Sie mit dem Schreiben fertig sind, beenden Sie mit Esc
→: wq
.
test.py
from flask import *
app = Flask(__name__)
@app.route("/")
def main():
return 'Hello, World!\n'
if __name__ == "__main__":
app.run(debug=True, host='0.0.0.0', port=80)
Es ist ein Code, der nur "Hallo, Welt!" Ausgibt, wenn auf die oberste Seite zugegriffen wird.
Unabhängig davon, wie viele Module Sie installieren, wird es nicht gestartet, ohne die virtuelle Umgebung zu betreten.
$ pipenv shell #Betreten Sie die virtuelle Umgebung
Führen Sie test.py
aus!
$ python test.py
Verwenden Sie einen Browser wie Google Chrome, um die IP-Adresse des Servers einzugeben, der dies ausgeführt hat, um darauf zuzugreifen. Wenn "Hallo Welt!" Angezeigt wird, ist dies in Ordnung. Kehren Sie zum Terminal zurück und beenden Sie die Ausführung mit "Strg + C".
Einführung des Webservers mit Nginx. [](Wenn Sie bereits Apache usw. verwenden und diese Gelegenheit nutzen möchten, um sich von Apache zu lösen hier.)
Öffnen Sie zuerst nginx.repo
mit vim usw.
$ sudo vi /etc/yum.repos.d/nginx.repo
Beschreiben Sie Folgendes.
nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
Stellen Sie die Firewall so ein, dass HTTP-Dienste zugelassen werden.
$ sudo firewall-cmd --add-service=http --zone=public --permanent
$ sudo firewall-cmd --reload
$ sudo systemctl start nginx #Sofort-Start
$ lsof -i:80 #OK, wenn Nginx angezeigt wird
uWSGI ist ein Anwendungsserver, der als Vermittler zwischen Flask und Nginx fungiert.
$ pipenv install uwsgi
$ vi test_uwsgi.ini
Beschreiben Sie Folgendes.
test_uwsgi.ini
[uwsgi]
base = /home/user/proj
app = test
module = %(app)
virtualenv = /home/user/proj/.venv
pythonpath = %(base)
socket = /tmp/test_uwsgi.sock
chmod-socket = 666
callable = app
logto = /home/user/proj/log/%n.log
Wenn Sie es selbst arrangieren möchten ↓ Zusammenfassung der Syntax der uWSGI-INI-Datei
Erstellen Sie auch ein Verzeichnis für Protokolle.
$ mkdir log
Erstellen Sie eine Konfigurationsdatei für Nginx im Verzeichnis "proj".
$ vi test_nginx.conf
Beschreiben Sie Folgendes.
test_nginx.conf
server {
listen 80;
server_name [IP Adresse];
charset utf-8;
location / { try_files $uri @yourapplication; }
location @yourapplication {
include uwsgi_params;
uwsgi_pass unix:/tmp/test_uwsgi.sock;
}
}
Platzieren Sie einen symbolischen Link, damit Nginx beim Start darauf verweisen kann.
sudo ln -s /home/user/proj/test_nginx.conf /etc/nginx/conf.d/
Stellen Sie sicher, dass Sie einen absoluten Pfad angeben.
SELinux scheint den Zugriff unter Linux ständig zu überwachen und zu kontrollieren. Minimierung des Schadens beim Eindringen eines PCs. Wenn beim Starten von Nginx eine Fehlermeldung angezeigt wird, können Sie diese möglicherweise wie folgt beheben.
$ setenforce 0
Dadurch wird die Zugriffskontrolle deaktiviert. Es scheint, dass nur das Aktivieren des Permissive-Modus nicht bedeutet, dass es vollständig ausgeschaltet wird.
Bearbeiten Sie die Einstellungsdatei selbst so, dass sie auch nach einem Neustart nicht wiederhergestellt wird.
$ vi /etc/selinux/config # "SELINUX=enforcing"Zu"SELINUX=permissive"Umschreiben an
Ist Sicherheit ohne SELinux sicher? Es ist gut, es zu verwenden, aber ich kam zu dem Schluss, dass es in Ordnung ist, wenn Sie die Firewall fest einstellen.
$ sudo systemctl restart nginx #Wenn Sie SELinux nicht deaktivieren, wird hier möglicherweise eine Fehlermeldung angezeigt
$ uwsgi --ini test_uwsgi.ini #Starten Sie uWSGI über die Konfigurationsdatei
Laden Sie den Browser neu und wenn "Hallo, Welt!" Angezeigt wird, ist es in Ordnung.
Lassen Sie diese automatisch starten, wenn der Server gestartet wird.
vi /etc/systemd/system/uwsgi.service
Beschreiben Sie Folgendes.
uwsgi.service
[Unit]
Description=uWSGI
After=syslog.target
[Service]
ExecStart=/home/user/proj/.venv/bin/uwsgi --ini /home/user/proj/test_uwsgi.ini
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all
[Install]
WantedBy=multi-user.target
$ cat /lib/systemd/system/nginx.service #OK, wenn der gerade geschriebene angezeigt wird
$ sudo systemctl daemon-reload # uwsgi.Dienst neu laden
$ sudo systemctl enable uwsgi nginx #Aktivieren Sie die uWSGI- und Nginx-Dienste
Starten Sie den Server neu und überprüfen Sie dies mit dem Browser. Wenn "Hallo Welt!" Angezeigt wird, ist dies in Ordnung. Danke für deine harte Arbeit! !!