Le déploiement d'applications Flask à l'aide de mod_wsgi (+ Apache) est également une méthode populaire décrite dans la documentation officielle (https://flask.palletsprojects.com/en/0.12.x/deploying/mod_wsgi/). Cependant, d'après ce que j'ai lu, l'explication n'est pas conviviale pour les débutants. Je ne savais pas quoi faire car le script était cassé à des moments clés.
De plus, j'essayais d'utiliser Pipenv pour la gestion des packages des applications Flask, mais quand il s'agissait de combiner Pipenv avec mod_wsgi et flask, je n'ai pas trouvé de succès en anglais.
Lorsque j'ai vraiment essayé pendant environ une journée entière, le déploiement de l'application avec la combinaison ci-dessus nécessitait une procédure légèrement compliquée, alors j'aimerais l'écrire ici comme un mémorandum pour moi-même.
$ sudo apt install apache2
$ sudo apt install libapache2-mod-wsgi-py3
Il semble que vous deviez spécifier libapache2-mod-wsgi-py3
au lieu de libapache2-mod-wsgi
lorsque vous utilisez Python 3. Je pense que c'est un point assez addictif.
Ajoutez l'application Flask sous / var / www / html
. Cette fois, faisons en sorte que le programme affiche uniquement Hello, World pour des raisons de simplicité.
Créez un dossier wsgi-scripts
sous html et enregistrez les fichiers suivants sous le nom hello.py
.
/var/www/html/wsgi-scripts/hello.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello from flask!'
if __name__ == '__main__':
app.run()
Si tu peux écrire
$ pipenv install
$ pipenv install flask
Créons un environnement virtuel avec.
Ajoutez le fichier wsgi dans le même dossier que l'application flask. C'est le fichier dont vous aurez besoin pour exécuter sur votre serveur de production. Cela semble un peu étrange, mais il semble que ce soit un script wsgi. Cela semble compliqué, mais à l'exception de la dernière ligne, c'est une préparation pour l'utilisation de mod-wsgi et pipenv.
/var/www/html/wsgi-scripts/myapp.wsgi
activate_this = '/home/hoge/.local/share/virtualenvs/wsgi-scripts-XXXXXX/bin/activate_this.py'
with open(activate_this) as file_:
exec(file_.read(), dict(__file__=activate_this))
import sys
sys.path.insert(0, 'var/www/html/wsgi-scripts')
from hello import app as application
Ici, le chemin correspondant à ʻactivate_thisdoit être modifié en fonction de l'environnement individuel. Le point est le chemin de virtualenv, mais comme méthode de confirmation, vous pouvez copier le chemin qui apparaît lorsque vous démarrez
pipenv shell`.
De là, c'est le cadre d'Apache. Ajoutons wsgi.conf
à / etc / apache2 / conf-available /
.
```conf`
WSGIDaemonProcess myapp
WSGIProcessGroup myapp WSGIApplicationGroup %{GLOBAL}
WSGIScriptAlias /myapp /var/www/html/wsgi-scripts/myapp.wsgi
<Directory /var/www/html/wsgi-scripts> Require all granted
Si vous souhaitez simplement exécuter wsgi, il vous suffit d'écrire WSGIScriptAlias, mais si vous souhaitez déplacer l'application Flask, vous devez également écrire d'autres paramètres.
Après l'écriture, activez le site avec la commande suivante.
$ sudo a2enconf wsgi $ sudo sytemctl reload apache2
Allez maintenant sur http: // localhost / myapp et vous devriez voir `hello from flask`.
cette? Quand je l'ai écrit, la quantité de travail était étonnamment faible ...