[PYTHON] De l'introduction de Flask sur CentOS au service sur Nginx et uWSGI

Une histoire sur moi, qui ignore à la fois CentOS et la construction de serveurs Web, j'ai mis le pied sur Flask, Nginx et uWSGI. La procédure est résumée ici.

[](Un article distinct décrit les diverses difficultés qui se sont produites au cours du processus ↓)

supposition

Préparation

Personnage

Vous devez le remplacer comme il convient et le lire.

ʻUser: nom d'utilisateur proj: répertoire du projet test.py`: écrivez le code qui exécute Flask. Placé directement sous proj

Le travail est toujours effectué sous le répertoire du projet

$ cd /home/user/proj

Introduction de Flask

À l'aide de Flask, créez un environnement qui facilite la création d'applications Web avec Python.

Installation de Python 3

$ sudo yum install epel-release  #Mettez le référentiel
$ sudo yum install python3-devel  #Insérer python3

Créer un environnement virtuel

$ pip3 install pipenv  #Introduit pipenv
$ export PIPENV_VENV_IN_PROJECT=true  #Définir pour créer un environnement virtuel dans le répertoire du projet
$ pipenv --python 3  #Créer un environnement virtuel
$ ls -a  #Consultez la liste des fichiers

Si vous pouvez confirmer que «.venv» est créé, c'est OK.

Installation des modules requis

C'est le minimum requis.

$ pipenv install flask markupsafe

Si vous ne voulez pas vous soucier de la migration, installez avec pipenv au lieu de pip. S'il y a d'autres modules requis, installez-les avec pipenv install de la même manière.

Essayez d'utiliser Flask

Ecrire un flacon

Créez test.py.

$ vi test.py

Entrez dans le mode d'insertion avec ʻi et écrivez ce qui suit. Lorsque vous avez fini d'écrire, quittez avec ʻ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)

C'est un code qui affiche uniquement "Bonjour, Monde!" Lorsque la page d'accueil est accédée.

Exécuter le flacon

Peu importe le nombre de modules que vous installez, il ne démarre pas sans entrer dans l'environnement virtuel.

$ pipenv shell  #Entrez dans l'environnement virtuel

Exécutez test.py!

$ python test.py

Utilisez un navigateur tel que Google Chrome pour saisir l'adresse IP du serveur qui l'a exécuté pour y accéder. Lorsque "Hello, World!" S'affiche, c'est OK. Revenez au terminal et arrêtez l'exécution avec Ctrl + C.

Introduction de Nginx

Introduction du serveur Web utilisant Nginx. [](Si vous utilisez déjà Apache etc. et que vous voulez profiter de cette opportunité pour rompre avec Apache ici.)

Installation de Nginx

Tout d'abord, ouvrez nginx.repo avec vim etc.

$ sudo vi /etc/yum.repos.d/nginx.repo

Décrivez ce qui suit.

nginx.repo


[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

Ouvrir le port HTTP

Configurez le pare-feu pour autoriser les services HTTP.

$ sudo firewall-cmd --add-service=http --zone=public --permanent
$ sudo firewall-cmd --reload

Démarrez Nginx

$ sudo systemctl start nginx  #Démarrage immédiat
$ lsof -i:80  #OK si nginx est affiché

Introduction de uWSGI

uWSGI est un serveur d'applications qui sert d'intermédiaire entre Flask et Nginx.

Installation de uWSGI

$ pipenv install uwsgi

Créer un fichier de configuration

$ vi test_uwsgi.ini

Décrivez ce qui suit.

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

Si vous voulez l'organiser vous-même ↓ Résumé de la syntaxe du fichier ini uWSGI

Créez également un répertoire pour les journaux.

$ mkdir log

Paramètres latéraux Nginx

Créez un fichier de configuration pour Nginx dans le répertoire proj.

$ vi test_nginx.conf

Décrivez ce qui suit.

test_nginx.conf


server {
  listen      80;
  server_name [adresse IP];
  charset     utf-8;

  location / { try_files $uri @yourapplication; }
  location @yourapplication {
    include uwsgi_params;
    uwsgi_pass unix:/tmp/test_uwsgi.sock;
  }
}

Placez un lien symbolique pour que Nginx puisse s'y référer au démarrage.

sudo ln -s /home/user/proj/test_nginx.conf /etc/nginx/conf.d/

Assurez-vous de le spécifier avec un chemin absolu.

(Facultatif) Désactivez SELinux

SELinux semble constamment surveiller et contrôler l'accès à l'intérieur de Linux. Pour minimiser les dégâts lorsqu'il est envahi par un PC. Si vous obtenez une erreur lors du démarrage de Nginx, vous pourrez peut-être la résoudre en procédant comme suit.

$ setenforce 0

Cela désactive le contrôle d'accès. Il semble que le simple fait de passer en mode Permissif ne signifie pas qu'il sera complètement désactivé.

Modifiez le fichier de paramètres lui-même afin qu'il ne soit pas restauré même s'il est redémarré.

$ vi /etc/selinux/config  # "SELINUX=enforcing"À"SELINUX=permissive"Réécrire dans

La sécurité est-elle sûre sans utiliser SELinux? C'est bien de l'utiliser, mais j'ai conclu que ce n'était pas grave si vous définissiez fermement le pare-feu.

Vérification du fonctionnement uWSGI

$ sudo systemctl restart nginx  #Si vous ne désactivez pas SELinux, vous pouvez obtenir une erreur ici
$ uwsgi --ini test_uwsgi.ini  #Démarrez uWSGI à partir du fichier de configuration

Rechargez le navigateur et si «Hello, World!» S'affiche, c'est OK

Un service

Faites-les démarrer automatiquement au démarrage du serveur.

Créer un fichier de configuration pour le service uWSGI

vi /etc/systemd/system/uwsgi.service

Décrivez ce qui suit.

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 si celui que vous venez d'écrire est affiché

Paramètres de service

$ sudo systemctl daemon-reload  # uwsgi.Service de rechargement
$ sudo systemctl enable uwsgi nginx  #Activer les services uWSGI et Nginx

Essayez de redémarrer le serveur et vérifiez avec le navigateur. Si "Hello, World!" S'affiche, c'est OK. Je vous remercie pour votre travail acharné! !!

référence

Recommended Posts

De l'introduction de Flask sur CentOS au service sur Nginx et uWSGI
Créez une application flask faite avec tensorflow et dlib pour travailler sur centos7
Un mémo contenant Python2.7 et Python3 dans CentOS
Exécutez Flask sur CentOS avec python3.4, Gunicorn + Nginx.
Configurez un serveur de référentiel yum sur la série CentOS 7 et faites-y référence localement et à partir d'autres serveurs, etc.
Journal de sortie vers la console avec Flask + Nginx sur Docker
API avec Flask + uWSGI + Nginx
Connectez-vous à centos6 sur Virtualbox avec une connexion SSH depuis Mac
Jusqu'à Hello World avec Flask + uWSGI + Nginx @ Sakura's VPS (CentOS 6.6)
J'ai créé un serveur avec socket Python et ssl et j'ai essayé d'y accéder depuis le navigateur
Étapes pour configurer Pipenv, créer une application CRUD avec Flask et la conteneuriser avec Docker
Création d'un environnement de développement Python sur Windows - De l'installation d'Anaconda à la liaison d'Atom et de Jupyter Notebook -
Obtenez des données de VPS MySQL avec Python 3 et SQL Alchemy
La route pour installer Python et Flask sur un PC hors ligne
Créez rapidement un environnement d'exécution d'application Web Python3.4 + Nginx + uWSGI + Flask en utilisant pyenv sur Ubuntu 12.04
Tout, de la création d'un environnement Python à son exécution sous Windows
Mettez à jour les données en les téléchargeant sur s3 d'aws avec une commande, et supprimez les données utilisées (en chemin)
2.Faites un arbre de décision à partir de 0 avec Python et comprenez-le (2. Bases du programme Python)
Créez un arbre de décision à partir de 0 avec Python et comprenez-le (4. Structure des données)
Créez un arbre de décision à partir de 0 avec Python et comprenez-le (5. Entropie des informations)
Faire de Jupyter Notebook un service sur CentOS
Connexion de python à MySQL sur CentOS 6.4
Créer un service Web avec Docker + Flask
Histoire de créer un planétarium virtuel [jusqu'à ce que les débutants créent un modèle avec un script et parviennent à l'assembler]
J'ai essayé de faire un processus périodique avec CentOS7, Selenium, Python et Chrome
Une histoire d'essayer d'installer uwsgi sur une instance EC2 et d'échouer
Fabriquez un thermomètre avec Raspberry Pi et rendez-le visible sur le navigateur Partie 3
Créons une application Web de conversion A vers B avec Flask! De zéro ...
La route pour lutter contre la connexion entre Nginx, Django et uwsgi et gagner un peu
Je veux écrire un élément dans un fichier avec numpy et le vérifier.
J'ai essayé d'exécuter Flask sur Raspberry Pi 3 Model B + en utilisant Nginx et uWSGI
WEB grattage avec python et essayez de créer un nuage de mots à partir des critiques
Jusqu'à ce que Python soit installé avec pythonbrew et que Flask s'exécute sur le serveur WSGI
Un mémorandum pour faire WebDAV uniquement avec nginx
Créez un environnement python avec ansible sur centos6
Hello World avec nginx + uwsgi + python sur EC2
Lancer un serveur Web avec Python et Flask
Démarrez CentOS 8 à partir de Windows 10 avec Wake On LAN
Comment définir un dossier partagé avec le système d'exploitation hôte dans CentOS7 sur Virtual BOX
De l'état initial de CentOS8 à l'exécution de php python perl ruby avec nginx
Contrôlez la lecture de musique sur un smartphone connecté à Raspberry Pi 3 et Bluetooth avec AVRCP
Procédure d'attachement et de débogage de VS Code vers Jupyter Lab sur un serveur distant
Effectuez une recherche Twitter à partir de Python et essayez de générer des phrases avec la chaîne de Markov.
[Introduction au trading système] J'ai dessiné un oscillateur stochastique avec python et joué avec ♬
Un système simple qui prend automatiquement des photos avec détection d'objet et l'envoie à LINE
Création d'une application Web qui mappe les informations sur les événements informatiques avec Vue et Flask
C'était un peu difficile de faire flacon avec la version docker de nginx-unit
Créez rapidement un tableau de bord d'analyse de données Python avec Streamlit et déployez-le sur AWS
Étapes pour créer rapidement un environnement d'apprentissage en profondeur sur Mac avec TensorFlow et OpenCV
Jusqu'à ce que vous créiez un environnement d'apprentissage automatique avec Python sur Windows 7 et que vous l'exécutiez
Mémo Un débutant a essayé de créer un environnement Java et de le traduire en japonais sur Ubuntu 18.04.2 LTS.
Un lycéen a créé un service de conversion linguistique en temps réel et l'a poussé vers Github.
Procédure de génération et d'enregistrement d'un modèle d'apprentissage par machine learning, en faisant un serveur API et en communiquant avec JSON depuis un navigateur
Je veux découper uniquement le visage d'une image de personne avec Python et l'enregistrer ~ Détection de visage et rognage avec face_recognition ~
Essayez de créer un site Web simple avec responder et sqlite3
Je veux faire la transition avec un bouton sur le ballon