Il y a environ un an, j'ai utilisé Django pour développer une application Web simple.
Obtenir des données en grattant à partir de l'URL saisie → Inférer avec le modèle d'apprentissage automatique entraîné → Renvoyer la réponse
C'est une chose très simple. Cliquez ici pour l'appli ↓
AI de discrimination clé
Après l'avoir utilisé pour la première fois depuis longtemps, je n'ai pas pu obtenir le résultat correct en raison du changement de spécification du site de destination du scraping. J'ai pensé que c'était mauvais et j'ai décidé de le réparer.
J'ai jeté un coup d'œil au code pour la première fois depuis un moment, mais je ne suis pas sûr ... Au moment du développement, je voulais quand même le faire fonctionner, donc le code est sale et je ne sais même pas comment le déployer ...
Donc, étant donné qu'il sera réparé de manière irrégulière à l'avenir, nous avons construit un environnement avec ** Docker ** pour faciliter le développement et le déploiement. Le but est de pouvoir se développer par clonage et docker-composer, tout en étant capable de se déployer d'un conteneur à heroku.
De plus, comme cette application elle-même n'utilise pas DB et est très simple, il n'est évidemment pas nécessaire d'utiliser Django, donc je vais la réécrire pour flask à cette occasion.
Le code est disponible sur Github. https://github.com/hatena-hanata/KJA_app
Voici la structure finale des répertoires.
KJA_APP
├── Dockerfile
├── Procfile
├── app.py
├── docker-compose.yml
├── requirements.txt
└── src
├── modules
│ ├── module.py
│ └── music_class.py
├── static
│ └── model
│ ├── le.pkl
│ └── model.pkl
└── templates
docker-compose.yml
version: '3'
services:
web:
build: .
ports:
- "8080:8080"
volumes:
- .:/home/KJA_APP
tty: true
environment:
TZ: Asia/Tokyo
command: flask run --host 0.0.0.0 --port 8080
Dockerfile
FROM python:3.8.0
USER root
# install google chrome
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
RUN sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list'
RUN apt-get -y update && apt-get install -y google-chrome-stable && apt-get install -yqq unzip
# install chromedriver
RUN wget -O /tmp/chromedriver.zip http://chromedriver.storage.googleapis.com/`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE`/chromedriver_linux64.zip
RUN unzip /tmp/chromedriver.zip chromedriver -d /usr/local/bin/
# install heroku cli
RUN curl https://cli-assets.heroku.com/install.sh | sh
# set display port to avoid crash
ENV DISPLAY=:99
# upgrade pip
RUN apt-get update && apt-get install -y \
&& pip install --upgrade pip
# change dir
WORKDIR /home/KJA_APP
# install module
COPY requirements.txt /home
RUN pip install -r /home/requirements.txt
# flask setting
ENV FLASK_APP '/home/KJA_APP/app.py'
ENV FLASK_DEBUG 1
Cette fois, afin d'exécuter le chrome avec du sélénium et de le gratter, j'ai d'abord installé le pilote chrome et chrome. J'ai fait référence au fichier docker de ici. J'ai également installé heroku cli pour le déploiement sur heroku.
Les deux dernières lignes, flask setting, sont les paramètres liés au flask.
Dans FLASK_APP
, en spécifiant le fichier py qui contient la fonction principale de flask, ce fichier sera exécuté par la commande flask run
.
Définir FLASK_DEBUG
sur 1 vous met en mode débogage et permet aux mises à jour de fichiers d'être reflétées en temps réel.
Vous pouvez maintenant développer immédiatement avec git clone → docker-compose. Puisque nous exécutons la commande flask run
pendant docker-compose, vous pouvez voir que l'application est en cours d'exécution en accédant à http: // localhost: 8080 /
.
Il est supposé que vous vous êtes déjà inscrit en tant que membre d'Heroku.
gunicorn
pour déployer, alors n'oubliez pas de l'installer avec pip.Procfile
web: gunicorn app:app --log-file -
Vous pouvez le faire depuis le terminal, mais c'est plus facile à comprendre depuis le navigateur, donc je le ferai depuis le navigateur.
heroku / python
à partir de Paramètres-> Buildpacks sur la page de l'application créée.
(Il semble que python puisse être ajouté automatiquement au moment du déploiement, mais il n'a pas été reconnu comme un projet python car ma structure de répertoire était mauvaise, je recommande donc de l'ajouter manuellement à l'avance. .)
En outre, cette fois, nous allons gratter avec du sélénium et du chrome, donc des pilotes de chrome et de chrome sont nécessaires. Cela peut également être géré en ajoutant un pack de construction.
https://qiita.com/nsuhara/items/76ae132734b7e2b352dd#chrome%E3%81%A8driver%E3%81%AE%E8%A8%AD%E5%AE%9ADe là, nous entrerons dans le conteneur Docker et le déploierons.
root@a59194fe1893:/home/KJA_APP# heroku login
https://git.heroku.com/ [nom de l'application créé en 2. ci-dessus] .git
. (Vous pouvez également le vérifier dans les paramètres de votre navigateur).
La commande ci-dessous signifie pousser le contenu de la branche courante vers la branche maître du référentiel heroku.root@a59194fe1893:/home/KJA_APP# git push https://git.heroku.com/[Au-dessus de 2.Nom de l'application créé dans].git master
S'il n'y a aucune erreur, le déploiement est terminé.
docker-compose est pratique.