[PYTHON] Déployer un serveur Flask sur une machine virtuelle telle qu'Azure ou AWS

Pour vous comme ça

--Je veux créer et publier un serveur Web avec Python --Je souhaite créer un serveur API qui utilise le deep learning

J'ai fait beaucoup de recherches pour construire un serveur API en utilisant Flask dans Hackason, donc je l'ai résumé depuis le début.

supposition

environnement

Histoire principale

1. Installation des packages requis

#Installez apache2#
$ sudo apt install apache2 apache2-dev

#Installation de Python#
$ curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
#Le dernier paramètre affiché~/.Décrit en bashrc

#Afficher les versions anaconda installables
$ pyenv install -l | grep anaconda
#Installer anaconda
$ pyenv install anaconda3-5.3.1
#Activer anaconda
$ pyenv global anaconda3-5.3.1

#Créer un environnement pour anaconda
$ conda create -n <hoge> python=3.6
$ conda activate <hoge>
# flask, mod_installation wsgi
$ conda install flask
$ pip install mod_wsgi

2. Créez une application à l'aide de flask

Créez un répertoire flask_app sous` / var / www / ʻet placez les fichiers suivants.

/var/www/flask_app/app.py


from flask import Flask

app = Flask(__name__)

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

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

/var/www/flask_app/adapter.wsgi


import sys
sys.path.insert(0, '/var/www/flask_app')

from app import app as application

3. Ajoutez le fichier de configuration apache2

/etc/apache2/conf-available/flask.conf


LoadModule wsgi_module /home/<user>/.pyenv/versions/anaconda3-5.3.1/envs/<hoge>/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so
WSGIPythonHome /home/<user>/.pyenv/versions/anaconda3-5.3.1/envs/<hoge>/
<VirtualHost *:80>
  ServerName <server-ip>:80
  DocumentRoot /var/www/flask_app
  WSGIDaemonProcess flask_app user=<user> group=<user> threads=5
  WSGIScriptAlias / /var/www/flask_app/adapter.wsgi
  <Directory "/var/www/flask_app/">
    WSGIProcessGroup flask_app
    WSGIApplicationGroup %{GLOBAL}
    WSGIScriptReloading On
    Require all granted
  </Directory>
</VirtualHost>

Ce qui précède n'est qu'un exemple. Veuillez compléter les parties de «», «» et «» avec l'utilisateur de connexion, le nom de l'environnement anaconda et l'adresse IP du serveur (domaine), selon le cas. De plus, «LoadModule» et «WSGIPythonHome» peuvent différer selon l'environnement.

Comment trouver LoadModule

Si vous exécutez la commande suivante après avoir activé l'environnement dans lequel flask est installé, le répertoire dans lequel le package est installé apparaîtra.

$ python -c "import sys; print(sys.path)"

Recherchez mod_wsgi dedans et vérifiez le chemin. Ne vous y trompez pas lorsque vous complétez des onglets

$ ls /home/<user/.pyenv/versions/anaconda3-5.3.1/envs/<hoge>/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so

4. Activez le fichier de configuration ajouté

$ sudo a2enconf flask

5. Redémarrez apache2

$ sudo systemctl restart apache2.service

Confirmation de connexion

Accédez à http: // <serveur-ip> avec un navigateur. (Notez que ce n'est pas https) Si «Hello, Flask!» S'affiche, cela signifie que l'opération réussit.

Si vous ne pouvez pas vous connecter ou si une erreur se produit.

--Vérifiez si le port 80 de la machine virtuelle est ouvert --Il devrait être possible de définir à partir de la console du serveur

$ sudo systemctl status apache2.service

$ sudo tail /var/log/apache2/error.log

Future work

Recommended Posts

Déployer un serveur Flask sur une machine virtuelle telle qu'Azure ou AWS
Déployer l'application Flask sur heroku (amer)
Déployez l'application Flask sur Heroku
Déployez l'application Flask sur heroku
Créez une application Django sur Docker et déployez-la sur AWS Fargate