Créez rapidement un environnement d'exécution d'application Web Python3.4 + Nginx + uWSGI + Flask en utilisant pyenv sur Ubuntu 12.04

Personnage

--JE Un lycéen ordinaire qui fréquente un lycée privé qui était une école de filles jusqu'à l'année dernière. Je déteste les humains. Il n'apparaîtra plus après cela.

Paramètres Pyenv et installation de Python

Je ne touche pas Python sur le système avec un seul doigt. De plus, je ne modifierai pas directement Python installé avec pyenv. Utilisez virtualenv pour toutes les installations de packages. De plus, je pense que le répertoire pyenv est généralement créé sous $ HOME, Ce n'est pas facile à utiliser depuis le système sous $ HOME, donc ici il est préparé sous / opt. Par conséquent, le travail lié à pyenv est souvent effectué en tant que root.

J'ai besoin de git pour le moment.

$ sudo apt-get install git

Installation de packages pour la construction de Python

Les packages suivants sont nécessaires pour construire Python, alors installez-les.

Compilateur C etc.

$ sudo apt-get install build-essential

Bibliothèque SQLite pour la prise en charge de SQLite, etc.

$ sudo apt-get install libsqlite3-dev
$ sudo apt-get install sqlite3
$ sudo apt-get install bzip2 libbz2-dev

Bibliothèque SSL requise par pip

$ sudo apt-get install libssl-dev openssl

Bibliothèque Readline requise par l'extension readline

$ sudo apt-get install libreadline6 libreadline6-dev

Installation de pyenv lui-même et du plug-in pyenv-virtualenv

Je vais le faire en tant que root.

sudo su
cd /opt
git clone git://github.com/yyuu/pyenv.git pyenv

echo 'export PYENV_ROOT="/opt/pyenv"' >> ~/.bashrc
echo 'if [ -d "${PYENV_ROOT}" ]; then' >> ~/.bashrc
echo '    export PATH=${PYENV_ROOT}/bin:$PATH' >> ~/.bashrc
echo '    eval "$(pyenv init -)"' >> ~/.bashrc
echo 'fi' >> ~/.bashrc

exec $SHELL -l

cd $PYENV_ROOT/plugins
git clone git://github.com/yyuu/pyenv-virtualenv.git

Installer Python 3.4.0

sudo su
pyenv install 3.4.0

Pyenv facile à utiliser

Comme mémo.

--Afficher la liste des versions installables

  pyenv install --list

--Installez 3.4.0

  pyenv install 3.4.0

--Liste des versions installées

  pyenv versions

--Création d'un environnement virtualenv

  pyenv virtualenv 3.4.0 my-virtual-env-3.4.0

--Liste des environnements virtualenv

  pyenv virtualenvs
  pyenv activate my-virtual-env-3.4.0

--Supprimer l'environnement installé

  pyenv uninstall my-virtual-env-3.4.0

Installation de Nginx

Installez le package python-software-properties pour utiliser la commande ʻadd-apt-repository`

sudo apt-get install python-software-properties

Ajout du référentiel stable Nginx

$ sudo add-apt-repository ppa:nginx/stable

Mise à jour / mise à niveau habituelle

sudo apt-get update
sudo apt-get upgrade

Installez et lancez Nginx

sudo apt-get install nginx
sudo /etc/init.d/nginx start

Connectez-vous à votre navigateur et vérifiez que vous voyez la page d'accueil Nginx.

application d'échantillon de flacon de construction

Créer un répertoire d'applications

Créez un répertoire d'applications. Tous les fichiers liés à l'application sont stockés ici. _ * Cependant, l'environnement virtualenv est géré collectivement par pyenv sous / opt. _

sudo mkdir -p /var/www/demoapp

Si l'autorité utilisateur reste root, remplacez-la par l'utilisateur que vous utilisez

sudo chown -R username:username /var/www/demoapp/

Création d'une virtualenv pour l'exemple d'application

sudo -s
pyenv virtualenv 3.4.0 demoapp

Installation du flacon

Installer Flask dans virtualenv

sudo -s
pyenv activate demoapp
pip install flask

Créer une application Flask

Créez / var / www / demoapp / hello.py.

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

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

test de démarrage de l'application flask

pyenv activate demoapp
python /var/www/demoapp/hello.py

Vérifiez en vous connectant au port du serveur: 8080 avec un navigateur Web.

Installation de uWSGI

Création d'un environnement virtualenv pour uWSGI

Je pense que uWSGI sera partagé par plusieurs applications, donc Préparez-le séparément du virtualenv pour l'application.

Si vous avez activé le virtualenv demoapp pour votre application, désactivez.

deactivate

virtualenv pour uWSGI

sudo -s
pyenv virtualenv 3.4.0 uwsgi-3.4.0

Installation de uWSGI

sudo -s
pyenv activate uwsgi-3.4.0
pip install uwsgi

Paramètres Nginx

Supprimer les paramètres de site par défaut

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

Créer un fichier de configuration pour l'exemple d'application

Créez / var / www / demoapp / demoapp_nginx.conf

server {
    listen      80;
    server_name localhost;
    charset     utf-8;
    client_max_body_size 75M;

    location / { try_files $uri @yourapplication; }
    location @yourapplication {
        include uwsgi_params;
        uwsgi_pass unix:/var/www/demoapp/demoapp_uwsgi.sock;
    }
}

Mettre un lien symbolique dans le répertoire du fichier de configuration Nginx

sudo ln -s /var/www/demoapp/demoapp_nginx.conf /etc/nginx/conf.d/

Redémarrez Nginx

sudo /etc/init.d/nginx restart

Connectez-vous au serveur avec un navigateur Web et vérifiez. ** À ce stade, vous devriez obtenir une erreur «502 Bad Gateway». ** **

Paramètres uWSGI

Créez un fichier de configuration uWSGI pour votre application

Créez / var / www / demoapp / demoapp_uwsgi.ini

[uwsgi]
#application's base folder
base = /var/www/demoapp

#python module to import
app = hello
module = %(app)

#virtualenv folder
home = /opt/pyenv/versions/demoapp

pythonpath = %(base)

#socket file's location
socket = /var/www/demoapp/%n.sock

#permissions for the socket file
chmod-socket    = 666

#the variable that holds a flask application inside the module imported at line #6
callable = app

#location of log files
logto = /var/log/uwsgi/%n.log

Création d'un répertoire de destination de sortie de journal

sudo mkdir -p /var/log/uwsgi
sudo chown -R username:username /var/log/uwsgi

Démarrez uWSGI

pyenv activate uwsgi-3.4.0
uwsgi --ini /var/www/demoapp/demoapp_uwsgi.ini

Connectez-vous au serveur avec un navigateur Web et vérifiez. Si Nginx et uWSGI sont capables de communiquer avec le socket sans aucun problème, «Hello World!» S'affiche.

uWSGI Emperor

uWSGI Emperor est une fonction qui lit le fichier de configuration uWSGI et démarre le processus uWSGI. Plusieurs paramètres peuvent être lus et le démarrage du processus peut être géré collectivement.

Créer un fichier Upstart

Créez / etc / init / uwsgi.conf

description "uWSGI"
start on runlevel [2345]
stop on runlevel [06]
respawn

env UWSGI=/opt/pyenv/versions/uwsgi-3.4.0/bin/uwsgi
env LOGTO=/var/log/uwsgi/emperor.log

exec $UWSGI --master --emperor /etc/uwsgi/vassals --die-on-term --uid www-data --gid www-data --logto $LOGTO

La dernière ligne ci-dessus signifie rechercher le fichier de configuration qui existe dans / etc / uwsgi / vassals et démarrer le démon uWSGI, donc Créez un lien symbolique vers le fichier d'installation uWSGI de l'exemple d'application dans / etc / uwsgi / vassals.

sudo mkdir -p /etc/uwsgi/vassals
sudo ln -s /var/www/demoapp/demoapp_uwsgi.ini /etc/uwsgi/vassals

Paramètres d'autorisation

Le démon uWSGI est configuré pour démarrer en tant qu'utilisateur www-data. Par conséquent, gardez le propriétaire de l'application et enregistrez les répertoires en tant que «www-data».

sudo chown -R www-data:www-data /var/www/demoapp/
sudo chown -R www-data:www-data /var/log/uwsgi/

Puisque Nginx et uWSGI fonctionnent avec le même utilisateur www-data, modifiez l'autorisation de socket sur 644.

Modifier / var / www / demoapp / demoapp_uwsgi.ini

...
#permissions for the socket file
chmod-socket = 644

Démarrez uWSGI

sudo start uwsgi

Connectez-vous au serveur avec un navigateur Web et vérifiez. Si tout va bien jusqu'à présent, "Hello World!" Sera affiché.

À la fin

Vous pouvez maintenant exécuter l'application Flask. Je pense qu'il y a plusieurs points à prendre en compte. Surtout autour de Nginx et uWSGI, veuillez presser les paramètres dans leurs documents et googles respectifs.

référence

http://vladikk.com/2013/09/12/serving-flask-with-nginx-on-ubuntu/

Recommended Posts

Créez rapidement un environnement d'exécution d'application Web Python3.4 + Nginx + uWSGI + Flask en utilisant pyenv sur Ubuntu 12.04
Créez rapidement un environnement d'exécution d'application Web Python3.4 + Nginx + uWSGI + Flask en utilisant venv sur Ubuntu 14.04 LTS
[Pyenv] Construire un environnement python avec ubuntu 16.04
Créer un environnement Python + uWSGI + Nginx avec Docker
Application Web réalisée avec Python + Flask (en utilisant VScode) # 1-Construction d'environnement virtuel-
Créer un environnement python avec pyenv sur EC2 (ubuntu)
Créer un environnement de Nginx + uWSGI + Python (Django) avec docker
[Venv] Créer un environnement virtuel python sur Ubuntu
Créez un environnement Python 3 avec pyenv sur Mac et affichez des graphiques Network X
Créer un environnement d'exécution Python sur IBM i
J'ai créé un environnement Python3 sur Ubuntu avec direnv.
Lancer une application Web Python sur Nginx + Gunicorn avec Docker
Créer un environnement de développement Python à l'aide de pyenv sur MacOS
Créer un environnement django avec docker-compose (MariaDB + Nginx + uWSGI)
Application Web avec Python + Flask ② ③
Application Web avec Python + Flask ④
Comment mettre Pyenv sur Amazon Linux et Ubuntu pour créer un environnement Python 3.6.0
Créer une application Web avec Flask ②
Construire un environnement Python sur Ubuntu
Créer un environnement Python sur Mac (2017/4)
Créez un environnement virtuel avec Python!
Créer un environnement python dans centos
Créer une application Web avec Flask ①
Créer une application Web avec Flask ③
Créer une application Web avec Flask ④
Créer un environnement d'exécution Windows Python avec VScode + Remote WSL
Créer une application Web de type Flask / Bottle sur AWS Lambda avec Chalice
Comment créer un environnement Python à l'aide de Virtualenv sur Ubuntu 18.04 LTS
Créez un environnement d'exécution Python à l'aide de GPU avec GCP Compute Engine
Créer un Ubuntu de démarrage USB avec un environnement Python pour l'analyse des données
[Ubuntu 18.04] Créer un environnement Python avec pyenv + pipenv
Créez un environnement python sur votre Mac
[Python] Créez un environnement virtuel avec Anaconda
[Python] Créer un environnement Batch à l'aide d'AWS-CDK
[Python] Une application web rapide avec Bottle!
Créez une application Web simple avec Flask
Exécutez une application Web Python avec Docker
Créez un environnement virtuel pour python avec pyenv
Créer un service Web avec Docker + Flask
Procédure de création d'un environnement virtuel Python avec VS Code sous Windows
[GCP] Procédure de création d'une application Web avec Cloud Functions (Python + Flask)
Je souhaite créer une application Web en utilisant React et Python flask
Implémentez une application simple avec Python full scratch sans utiliser de framework web.
Construire l'environnement Python3.5 + matplotlib sur Ubuntu 12 en utilisant Anaconda
Créez simplement un environnement d'exécution Python 3 sous Windows
Créez un environnement python avec ansible sur centos6
Gagnez l'application Web Python + Flask avec Jenkins
Créer un environnement virtuel avec conda avec Python
Créer un environnement de construction python3 avec Sublime Text3
Hello World avec nginx + uwsgi + python sur EC2
Créer une carte Web en utilisant Python et GDAL
Lancer un serveur Web avec Python et Flask
Exécutez Flask sur CentOS avec python3.4, Gunicorn + Nginx.
Facile à créer une application console Python avec Click
Utilisation de Flask avec la configuration Nginx + gunicorn [Environnement local]
Créer un environnement d'exécution python avec VS Code