Comme le titre l'indique, créez un environnement dans lequel l'application flask utilisant tensorflow s'exécute sur ceontos 7.1. Introduction On suppose que l'environnement de centos 7.1 est configuré avec conoha comme indiqué dans cet article.
J'utilise python, flask, anaconda, tensorflow, dlib, opencv. La configuration de l'application est la suivante.
.
├── evaluation.py #Jugez l'image. Utilisez dlib, opencv, tensorflow.
├── guniconf.py
├── lib #Où placer les données entraînées de dlib et tensorflow
├── model.py #Utilisez un format appelé Modèle pour faciliter la gestion des données d'image
├── static
│ ├── css
│ │ └── style.css
│ ├── images/
│ ├── js
│ │ └── main.js
│ └── robots.txt
├── templates
│ ├── index.html
│ └── layout.html
└── web.py #Reçoit une demande et renvoie le résultat
J'utiliserai pyenv pour mettre anaconda. Je me suis référé ici pour l'installation de pyenv avec centos. http://qiita.com/glostuan/items/6030e309542615470e0d
$ sudo yum install epel-release #Ajouter un référentiel epel
$ sudo yum install gcc zlib-devel bzip2 bzip2-devel readline readline-devel sqlite sqlite-devel openssl openssl-devel git
$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
$ vim .bash_profile
#ajouter
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
$ source .bash_profile #Réfléchir
$ pyenv install --list
# anaconda3-4.0.Vérifiez s'il y a 0
$ pyenv install anaconda3-4.0.0
$ pyenv global anaconda3-4.0.0
$ pyenv versions
system
* anaconda3-4.0.0 (set by /home/develop/.pyenv/version)
Vous pouvez maintenant utiliser anaconda.
Au début, j'ai fait beaucoup de recherches pour mettre opencv, et j'ai pensé que je mettrais les bibliothèques dépendantes une par une, mais le montant était si grand que je ne pouvais pas le mettre correctement. Enfin, comme indiqué sur le site ci-dessous, j'ai installé l'ancien opencv avec yum et installé les bibliothèques dépendantes, puis j'ai supprimé l'ancien opencv, et j'ai pu l'obtenir avec succès. https://daichan.club/linux/78330 Cependant, il y avait une bibliothèque qui n'était pas installée pour exécuter opnecv cette fois, donc je l'ai installée séparément avec yum.
$ sudo yum install epel-release #Ajouter un référentiel epel
$ sudo yum update
$ sudo yum install opencv #Insérez l'ancien opencv
#Installation de bibliothèque dépendante
$ sudo yum remove opencv #Supprimer l'ancien opencv
$ conda install -c menpo opencv3
$ conda install -c menpo dlib
$ conda install -c meznom boost-python
$ conda install -c conda-forge tensorflow=1.1.0
#Déplacer vers le répertoire des applications
$ python web.py server
#Confirmer le démarrage et l'exécution
#Lisez l'erreur et installez les bibliothèques requises
$ sudo yum install libpng12
Ensuite, exécutez l'application avec nginx + gunicorn. Nous allons le mettre en place en référence à cet article. http://qiita.com/Alice1017/items/fb28e1055c6e498d021e
Installez gunicorn. Vous pouvez le mettre à partir de pip, mais j'ai pensé qu'il serait préférable de l'unifier avec d'autres choses, alors je l'ai mis à partir de conda.
$ conda install -c anaconda gunicorn
$ gunicorn web:app --config guniconf.py
# /tmp/gunicorn_my_app.Vérifiez si la chaussette est générée
guniconf.py est défini comme suit.
guniconf.py
import multiprocessing
# Server Socket
bind = 'unix:/tmp/gunicorn_my_app.sock'
backlog = 2048
# Worker Processes
workers = multiprocessing.cpu_count() * 2 + 1
worker_class = 'sync'
worker_connections = 1000
max_requests = 0
timeout = 30
keepalive = 2
debug = False
spew = False
# Logging
logfile = '/var/www/app/log/error.log'
loglevel = 'error'
logconfig = None
# Process Name
proc_name = 'gunicorn_my_app'
Ensuite, installez nginx. Puisque nginx dans epel est ancien, enregistrons et installons le référentiel nginx afin que vous puissiez installer vous-même le dernier nginx.
$ sudo vim /etc/yum.repos.d/nginx.repo
#Ajout du contenu suivant
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=0
enabled=1
$ sudo yum -y --enablerepo=nginx install nginx
Modifiez le fichier nginx conf. Gardons le fichier original au cas où.
$ cd /etc/nginx/conf.d/
$ sudo mv default.conf default.conf.org
$ sudo vim default.conf
Réglez comme suit.
default.conf
upstream my_app_server{
server unix:/tmp/gunicorn_my_app.sock;
}
server {
listen 80 default_server;
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location / {
try_files $uri @my_app;
client_max_body_size 20M;
}
location @my_app {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_redirect off;
proxy_request_buffering off;
proxy_pass http://my_app_server;
}
}
client_max_body_size
et proxy_request_buffering
sont définis comme ceci à cause de l'application que j'ai créée.
Nous vous serions reconnaissants de bien vouloir revoir les paramètres le cas échéant.
Redémarrez nginx et voyez si cela fonctionne.
$ sudo systemctl restart nginx
$ sudo systemctl enable nginx
# guniconf.Déplacer vers le répertoire où se trouve py
$ gunicorn web:app --config guniconf.py
#Vérifier avec le navigateur
Si vous pouvez le vérifier avec le navigateur, arrêtez avec ctrl + c
.
Ensuite, j'utiliserai Supervisor pour faciliter le fonctionnement du démon gunicorn. Il est plus facile d'utiliser yum.
$ sudo yum install supervisor
$ sudo vim /etc/supervisord.d/my_app.ini
my_app.ini
[program:my_app]
command = /home/develop/.pyenv/shims/gunicorn web:app --config /var/www/app/guniconf.py
directory = /var/www/app/
user = root
Enregistrez le superviseur avec systemd.
$ sudo vim /etc/systemd/system/supervisord.service
supervisord.service
[Unit]
Description=Supervisor process control system for UNIX
Documentation=http://supervisord.org
After=network.target
[Service]
ExecStart=/usr/bin/supervisord -n -c /etc/supervisord.conf
ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown
ExecReload=/usr/bin/supervisorctl $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=50s
[Install]
WantedBy=multi-user.target
$ sudo systemctl list-unit-files --type=service
#Vérifiez si superviseur est enregistré
$ sudo systemctl start supervisord
$ sudo systemctl status supervisord
$ sudo systemctl stop supervisord
#Vérifiez si les trois ci-dessus fonctionnent correctement
$ sudo systemctl enable supervisord.service
#Configuré pour démarrer automatiquement
#S'il est correctement défini, il fonctionne déjà, mais juste au cas où, exécutez-le et vérifiez
$ sudo supervisorctl reread
$ sudo supervisorctl update
$ sudo supervisorctl start my_app
Vous devriez maintenant pouvoir y accéder depuis votre navigateur.