Vor ungefähr einem Jahr habe ich mit Django eine einfache Web-App entwickelt.
Daten durch Scraping von der eingegebenen URL abrufen → Mit dem trainierten maschinellen Lernmodell ableiten → Antwort zurückgeben
Es ist eine sehr einfache Sache. Klicken Sie hier für die App ↓
Schlüsselunterscheidungs-KI
Nachdem ich es zum ersten Mal seit langer Zeit wieder verwendet hatte, konnte ich aufgrund der Spezifikationsänderung des Scraping-Zielstandorts nicht das richtige Ergebnis erzielen. Ich fand das schlecht und beschloss, es zu reparieren.
Ich habe zum ersten Mal seit einiger Zeit einen Blick auf den Code geworfen, bin mir aber nicht sicher ... Zum Zeitpunkt der Entwicklung wollte ich ihn trotzdem zum Laufen bringen, daher ist der Code schmutzig und ich weiß nicht einmal, wie ich ihn bereitstellen soll ...
Da es in Zukunft unregelmäßig repariert wird, haben wir mit ** Docker ** eine Umgebung erstellt, um die Entwicklung und Bereitstellung zu vereinfachen. Das Ziel ist es, sich durch Klonen und Docker-Compose entwickeln zu können und dennoch von einem Container auf Heroku zu implementieren.
Da diese App selbst keine Datenbank verwendet und sehr einfach ist, ist es offensichtlich nicht erforderlich, Django zu verwenden. Daher werde ich sie bei dieser Gelegenheit neu schreiben, um sie zu flashen.
Der Code ist auf Github verfügbar. https://github.com/hatena-hanata/KJA_app
Hier ist die endgültige Verzeichnisstruktur.
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
Dieses Mal habe ich zuerst Chrom und Chromtreiber installiert, um Chrom mit Selen zu betreiben und es abzukratzen. Ich habe auf die Docker-Datei von [hier] verwiesen (https://github.com/joyzoursky/docker-python-chromedriver). Ich habe auch Heroku Cli für den Einsatz in Heroku installiert.
Die letzten beiden Zeilen, Kolbeneinstellung, sind die Einstellungen für den Kolben.
In FLASK_APP
wird diese Datei durch Angabe der py-Datei, die die Hauptfunktion von flask enthält, mit dem Befehl flask run
ausgeführt.
Wenn Sie FLASK_DEBUG
auf 1 setzen, werden Sie in den Debug-Modus versetzt und können Dateiaktualisierungen in Echtzeit wiedergeben.
Jetzt können Sie sofort mit Git-Klon → Docker-Compose entwickeln. Da wir den Befehl "flask run" während des Docker-Compose ausführen, können Sie sehen, dass die App ausgeführt wird, indem Sie auf "http: // localhost: 8080 /" zugreifen.
Es wird davon ausgegangen, dass Sie sich bereits als Mitglied von Heroku registriert haben.
Procfile
web: gunicorn app:app --log-file -
Sie können es vom Terminal aus tun, aber es ist vom Browser aus leichter zu verstehen, also mache ich es vom Browser aus.
heroku / python
hinzu.
(Es scheint, dass Python zum Zeitpunkt der Bereitstellung automatisch hinzugefügt wird, aber es wurde nicht als Python-Projekt erkannt, da meine Verzeichnisstruktur schlecht war. Ich empfehle daher, es im Voraus manuell hinzuzufügen. .)
Auch dieses Mal werden wir mit Selen und Chrom kratzen, daher sind Chrom und Chromtreiber erforderlich. Dies kann auch durch Hinzufügen eines Build Packs erfolgen.
https://qiita.com/nsuhara/items/76ae132734b7e2b352dd#chrome%E3%81%A8driver%E3%81%AE%E8%A8%AD%E5%AE%9AGeben Sie von hier aus den Docker-Container ein und stellen Sie ihn bereit.
root@a59194fe1893:/home/KJA_APP# heroku login
root@a59194fe1893:/home/KJA_APP# git push https://git.heroku.com/[Über 2.App-Name erstellt in].git master
Wenn keine Fehler vorliegen, ist die Bereitstellung abgeschlossen.
Docker-Compose ist praktisch.
Recommended Posts