Ich wollte Webentwicklung mit Python machen, also habe ich eine Umgebung für Python-Webanwendungen erstellt. Bisher war die Mainstream-Konfiguration "NGINX <-> uwsgi <-> Flask", aber im April 2018 veröffentlichte NGINX den leichten AP-Server "NGINX Unit". Dieses Mal werden wir NGINX Unit verwenden und eine Webanwendungsumgebung mit der Konfiguration "NGINX <-> NGINX Unit <-> Flask" erstellen.
Verwenden Sie "NGINX" als Webserver, "NGINX Unit" als AP-Server und "Flask" als Python-Webframework.
Der Server verwendet eine virtuelle Umgebung von Vagrant und VirtualBox. Bitte aktivieren Sie das private Netzwerk.
$ vagrant init centos/7
$ vi Vagrantfile
- # config.vm.network "private_network", ip: "192.168.33.10"
+ config.vm.network "private_network", ip: "192.168.33.10"
$ vagrant up
$ vagrant ssh
Stellen Sie mit vagrant ssh
eine Verbindung zur virtuellen Umgebung her und deaktivieren Sie selinux.
$ sudo vi /etc/selinux/config
- SELINUX=enforcing
+ SELINUX=disabled
$ sudo reboot
Erstellen Sie eine Python-Entwicklungsumgebung in einer virtuellen Umgebung. Standardmäßig ist in CentOS Python 2.7.5 installiert.
$ python --version
Python 2.7.5
Dieses Mal werden wir Python 3.7.4
verwenden.
Installieren Sie Python unter CentOS unter Bezugnahme auf die Vorgehensweise auf Python Offizielle Seite. Installieren Sie zunächst die erforderlichen Werkzeuge.
$ sudo yum -y groupinstall "development tools"
$ sudo yum install -y bzip2-devel gdbm-devel libffi-devel libuuid-devel ncurses-devel openssl-devel readline-devel sqlite-devel tk-devel wget xz-devel zlib-devel
Laden Sie das Installationsprogramm mit wget
von der offiziellen Python-Seite (https://www.python.org/downloads/release/python-374/) herunter.
Nach dem Herunterladen entpacken.
$ wget https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tgz
$ tar xzf Python-3.7.4.tgz
Erstellen Sie nach dem Entpacken des Quellcodes.
$ cd Python-3.7.4
$ ./configure --enable-shared
$ make
$ sudo make install
$ sudo sh -c "echo '/usr/local/lib' > /etc/ld.so.conf.d/custom_python3.conf"
$ sudo ldconfig
Der erstellte Befehl wird unter / usr / local / bin
installiert.
$ which python
/usr/bin/python
$ which python3
/usr/local/bin/python3
$ python3 --version
Python 3.7.4
$ which pip3
/usr/local/bin/pip3
Zum Schluss pip
upgraden.
$ pip3 install --upgrade pip --user
Die neueste Version des Befehls "pip" wird im lokalen "bin" installiert.
$ which pip
~/.local/bin/pip
$ pip --version
pip 19.2.3 from /home/vagrant/.local/lib/python3.7/site-packages/pip (python 3.7)
Das ist alles zum Erstellen der Python-Umgebung.
Erstellen Sie eine virtuelle Python-Umgebung, um Pakete für jedes Projekt zu wechseln und zu verwalten.
Python bietet venv
als Standardmodul an, das die Erstellung virtueller Umgebungen unterstützt.
Erstellen Sie eine virtuelle Umgebung mit venv
.
# flask_Erstellen Sie eine virtuelle Umgebung namens sample
$ python3 -m venv flask_sample
$ ls
venv
Aktivieren Sie die von venv erstellte virtuelle Umgebung.
$ source flask_sample/bin/activate
(flask_sample)$
Sie können die virtuelle Umgebung aktivieren, indem Sie das Skript "enable" in dem Verzeichnis ausführen, das vom Modul "venv" erstellt wurde. Wenn Sie die virtuelle Umgebung aktivieren, wird am Anfang der Eingabeaufforderung "(Name der virtuellen Umgebung)" angezeigt. Wechseln Sie in das Verzeichnis der von Ihnen erstellten virtuellen Umgebung und überprüfen Sie die Konfiguration.
(flask_sample)$ cd flask_sample
(flask_sample)$ ls
bin include lib lib64 pyvenv.cfg
Das Verzeichnis "bin" enthält das Skript "enable", das die virtuelle Umgebung aktiviert, und den Befehl "pip" des Python-Paketverwaltungstools.
Wenn Sie den Befehl pip
in einer virtuellen Umgebung ausführen, werden die Befehle in diesem Verzeichnis ausgeführt.
Installierte Pakete werden in "lib / python3.7 / site-packages" und "lib64 / python3.7 / site-packages" installiert.
Ignorieren Sie in der virtuellen Umgebung das Verzeichnis "site-packages" von Python selbst und verwenden Sie die Pakete in diesem Verzeichnis.
Sie können Apps entwickeln, ohne das Paket von Python selbst zu verschmutzen.
Flask
ist ein kleines Python-Mikroframework. Die standardmäßig aufgeführten Funktionen sind minimal und werden bei der Entwicklung kleiner Anwendungen verwendet.
Plugins werden bereitgestellt, damit Sie Ihre Funktionalität erweitern können.
Verwenden Sie Django
, wenn Sie von Anfang an eine große Anwendung entwickeln möchten.
Installieren Sie in der virtuellen Umgebung von venv Flask
.
(flask_sample)$ pip install Flask
Die Struktur des Beispielprojekts ist wie folgt.
/sample
|- app.py
|- templates
|- index.html
|- post.html
Jeder Code wird wie folgt implementiert.
app.py
from flask import Flask ,render_template,request
application = Flask(__name__)
@application.route('/')
def index():
return render_template('index.html')
@application.route('/sample',methods=['POST'])
def sample():
message = request.form['message']
return render_template('post.html',message=message)
if __name__=="__main__":
application.run(host='0.0.0.0')
index.html
<html>
<head>
<meta charset="utf-8" />
<title>Flask Sample</title>
</head>
<body>
<h1>Flask Smaple</h1>
<form action="sample" method="post">
<input type="text" name="message" />
<input type="submit" value="Senden" />
</form>
</body>
</html>
post.html
<html>
<head>
<meta charset="utf-8" />
<title>Flask Sample</title>
</head>
<body>
<h1>Flask Smaple</h1>
Botschaft:{{message}}
</body>
</html>
Führen Sie nach der Implementierung app.py
aus, um die Flask-Anwendung zu starten.
(flask_sample)$ python /sample/app.py
* Serving Flask app "app" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
Wenn Sie nach dem Start mit einem Browser auf die private IP: 5000 / virtuelle Umgebung von http: // zugreifen, wird index.html angezeigt. Wenn Sie dies bestätigen können, ist die Funktionsprüfung von "Flask" abgeschlossen. Erstellen Sie als Nächstes einen AP-Server mit "NGINX Unit".
NGINX Unit
NGINX Unit ist ein leichter Anwendungsserver, der von NGINX entwickelt wurde. Sie können Anwendungen in mehreren Sprachen ausführen, sodass Sie Anwendungen in verschiedenen Sprachen auf demselben Server ausführen können. Die Sprache unterstützt "Python", "PHP", "Go", "Perl", "Ruby", "Node.js", "Java". Darüber hinaus können verschiedene Versionen innerhalb der Sprache nebeneinander existieren und ausgeführt werden. (Python2.7 und Python3 usw.) Sie können die Einstellungen in Echtzeit ändern, ohne den Server über API oder JSON anzuhalten, sodass Sie die Einstellungen nahtlos ändern können, ohne den Dienst anzuhalten.
Das offizielle Dokument hat die Installationsmethode für jedes Betriebssystem veröffentlicht.
Verlassen Sie die virtuelle Umgebung von venv und fügen Sie ein leckeres Repository hinzu.
(flask_sample)$ deactivate
$ sudo vi /etc/yum.repos.d/unit.repo
[unit]
name=unit repo
baseurl=https://packages.nginx.org/unit/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
Es installieren.
$ sudo yum install -y unit
$ sudo yum install -y unit-devel unit-go unit-jsc8 unit-perl unit-php unit-python
Legt den automatischen Start der NGINX-Einheit fest.
$ sudo systemctl enable unit
Created symlink from /etc/systemd/system/multi-user.target.wants/unit.service to /usr/lib/systemd/system/unit.service.
$ sudo service unit start
Redirecting to /bin/systemctl start unit.service
$ sudo service unit status
Redirecting to /bin/systemctl status unit.service
● unit.service - NGINX Unit
Loaded: loaded (/usr/lib/systemd/system/unit.service; enabled; vendor preset: disabled)
Active: active (running)seit Di 2019-11-05 15:42:47 UTC; 7h ago
Main PID: 5714 (unitd)
CGroup: /system.slice/unit.service
├─5714 unit: main v1.12.0 [/usr/sbin/unitd --log /var/log/unit/unit.log --pid /var/run/unit/unit.pid --no-daemon]
├─5716 unit: controller
└─5717 unit: router
Sie können bestätigen, dass die NGINX-Einheit mit dem Status "Serviceeinheit" gestartet wurde.
Stellen Sie die NGINX-Einheit so ein, dass Kolbenanwendungen ausgeführt werden. Stellen Sie die Einstellungsdatei am Sockel der NGINX-Einheit auf "GET", um die Kolbenanwendung in "NGINX Unit" zu laden. Die Unix-Buchse zur Steuerung der "NGINX-Einheit" befindet sich unter "/ var / run / unit / control.sock". (Der Standort hängt vom Betriebssystem ab.)
$ cd /sample
$ sudo curl --unix-socket /var/run/unit/control.sock http://localhost/config/ > config.json
$ vi config.json
{
"listeners": {
"*:8080": {
"pass": "applications/flask_app"
}
},
"applications": {
"flask_app": {
"type": "python",
"processes": 2,
"path": "/sample/",
"module": "app"
}
}
}
--Listers: Stellen Sie den Port ein. Der Wert von "pass" von "*: 8080" ist mit der Hierarchie von "Anwendungen" verknüpft.
Legen Sie die erstellte Einstellungsdatei in den Sockel der NGINX-Einheit, um die Einstellung wiederzugeben.
$ sudo curl -X PUT --data-binary @config.json --unix-socket /var/run/unit/control.sock http://localhost/config
{
"success": "Reconfiguration done."
}
Wenn "Erfolg" zurückkehrt, ist die Einstellung abgeschlossen. Sie können auch die Einstellungen überprüfen.
$ sudo curl --unix-socket /var/run/unit/control.sock http://localhost/
{
"certificates": {},
"config": {
"listeners": {
"*:8080": {
"pass": "applications/flask_app"
}
},
"applications": {
"flask_app": {
"type": "python",
"processes": 2,
"path": "/sample/",
"module": "app"
}
}
}
}
Starten Sie die virtuelle Umgebung und greifen Sie auf "http: // localhost: 8080 /" zu.
$ source venv/bin/activate
(flask_sample)$ curl http://localhost:8080/
<html>
<head>
<meta charset="utf-8" />
<title>Flask Sample</title>
</head>
<body>
<h1>Flask Smaple</h1>
<form action="sample" method="post">
<input type="text" name="message" />
<input type="submit" value="Senden" />
</form>
</body>
</html>
Wenn index.html
angezeigt wird, ist die Konstruktion abgeschlossen. Selbst wenn Sie mit einem Browser darauf zugreifen, wird "index.html" angezeigt.
Das ist alles für den Bau der "NGINX Unit". Erstellen Sie als Nächstes den Webserver "NGINX".
NGINX
Es ist ein Open-Source-Webserver, der leicht und schnell ist und als potenzielle Alternative zu Apache Aufmerksamkeit erregt. Im Vergleich zu Apache ist es hinsichtlich Skalierbarkeit und Funktionen wie Verarbeitungsleistung, Parallelverarbeitung und geringer Speichernutzung überlegen. Dieses Mal wird es als Proxyserver verwendet.
NGINX
veröffentlicht offiziell ein yum-Repository, also installieren Sie es von diesem Repository.
Fügen Sie das Repository hinzu und installieren Sie es anhand der Beschreibung auf der offiziellen Seite.
Sobald Sie die virtuelle Python-Umgebung verlassen haben.
Fügen Sie das yum-Repository hinzu. Fügen Sie / etc / yum.repos.d / NGINX.repo
hinzu.
$ sudo vi /etc/yum.repos.d/NGINX.repo
[NGINX]
name=NGINX repo
baseurl=http://NGINX.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
Überprüfen Sie das Repository.
$ sudo yum info nginx
Available Packages
Name : NGINX
Arch : x86_64
Epoch : 1
Version : 1.16.1
Release : 1.el7_4.ngx
Size : 754 k
Repo : NGINX/x86_64
Summary : High performance web server
URL : http://NGINX.org/
License : 2-clause BSD-like license
Description : NGINX [engine x] is an HTTP and reverse proxy server, as well as
: a mail proxy server.
Wenn Sie mit dem Befehl yum info
bestätigen können, dass NGINX im Repository vorhanden ist, installieren Sie es.
$ sudo yum install nginx
Automatischen Start einstellen, Starten Sie NGINX.
$ sudo systemctl enable nginx
$ sudo service start nginx
$ ![nginx.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239179/0d818e0a-7aee-8a07-af95-72d34dfaa824.png)
service status nginx
● NGINX.service - NGINX - high performance web server
Loaded: loaded (/usr/lib/systemd/system/NGINX.service; enabled; vendor preset: disabled)
Active: active (running)
Greifen Sie nach dem Start von NGINX mit Ihrem Browser auf die private IP-Adresse http: // der virtuellen Umgebung zu. Wenn der folgende Bildschirm angezeigt wird, ist der Startvorgang abgeschlossen.
NGINX
arbeitet als WEB-Server oder Proxy-Server vor NGINX Unit
.
Proxy-Anfragen an die Anwendung an die Nginx-Einheit.
Die Konfigurationsdatei "NGINX" befindet sich in "/ etc / nginx / conf.d".
$ sudo vi /etc/nginx/conf.d/app.conf
upstream unit-python {
server 127.0.0.1:8080;
}
server {
listen 80;
server_name localhost;
location ~ / {
proxy_pass http://unit-python;
proxy_set_header Host $host;
}
}
Starten Sie NGINX neu und gehen Sie zu http: // localhost /
.
$ sudo service restart nginx
$ curl http://localhost/
<html>
<head>
<meta charset="utf-8" />
<title>Flask Sample</title>
</head>
<body>
<h1>Flask Smaple</h1>
<form action="sample" method="post">
<input type="text" name="message" />
<input type="submit" value="Senden" />
</form>
</body>
</html>
Wenn "index.html" angezeigt wird, ist die Proxy-Einstellung abgeschlossen. Sie können die index.html
überprüfen, indem Sie mit einem Browser auf die http: // private IP
der virtuellen Umgebung zugreifen.
Damit ist die Erstellung der Python-Webanwendungsumgebung abgeschlossen.
Wir haben die Umgebung der WEB-Anwendung mit NGINX
+ NGINX Unit
+ Flask
erstellt.
Da sich die "NGINX Unit" auf den Betrieb von Mikrodiensten spezialisiert hat, denke ich, dass sie auch in Zukunft Aufmerksamkeit erregen wird.
Ich möchte weiter darauf eingehen.
Recommended Posts