[PYTHON] Vom Umgebungsaufbau bis zum Einsatz für Kolben + Heroku mit Docker

Einführung

Vor ungefähr einem Jahr habe ich mit Django eine einfache Web-App entwickelt.

Eine Geschichte über alles von der Datenerfassung über die AI-Entwicklung bis hin zur Veröffentlichung von Webanwendungen in Python

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

Verzeichnisaufbau

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

Umgebung

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. image.png

In Heroku bereitstellen

Es wird davon ausgegangen, dass Sie sich bereits als Mitglied von Heroku registriert haben.

Vorbereitung

  1. requirements.txt
    Schreiben Sie die erforderlichen Bibliotheken in die Datei resources.txt. Zum Bereitstellen benötigen Sie "Gunicorn". Vergessen Sie also nicht, es mit pip zu installieren.
  2. Procfile
    Erstellen Sie direkt unter dem Projekt. Schreiben Sie wie folgt. Die App auf der linken Seite ist app.py direkt unter dem Projekt, und die App auf der rechten Seite ist der Variablenname der in app.py definierten Flask-Instanz? ist. Es ist schwer zu verstehen, was Sie sagen. Bitte lesen Sie dies. https://stackoverflow.com/questions/19352923/gunicorn-causing-errors-in-heroku

Procfile


web: gunicorn app:app --log-file -

App-Erstellung

Sie können es vom Terminal aus tun, aber es ist vom Browser aus leichter zu verstehen, also mache ich es vom Browser aus.

  1. Melden Sie sich über Ihren Browser bei Heroku an https://id.heroku.com/login
  2. Erstellen Sie eine App mit Neu-> Neue App erstellen Gib ihm einen Namen.
  3. Build Pack hinzufügen Um zu verdeutlichen, dass es sich bei dieser App um Python handelt, fügen Sie auf der Seite der erstellten App unter Einstellungen-> Buildpacks 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%9A

Bereitstellen

Geben Sie von hier aus den Docker-Container ein und stellen Sie ihn bereit.

  1. Melden Sie sich bei heroku an Ich denke, ein Link wird herauskommen, also klicken Sie darauf, um sich zu authentifizieren.
root@a59194fe1893:/home/KJA_APP# heroku login
  1. Drücken Sie in das App-Repository von Heroku. Die URL lautet "https://git.heroku.com/ [App-Name in 2. oben erstellt] .git". (Sie können dies auch in den Einstellungen Ihres Browsers überprüfen.) Der folgende Befehl bedeutet, den Inhalt des aktuellen Zweigs in den Hauptzweig des Heroku-Repositorys zu verschieben.
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.

Schließlich

Docker-Compose ist praktisch.

Recommended Posts

Vom Umgebungsaufbau bis zum Einsatz für Kolben + Heroku mit Docker
Von Kafka bis KSQL - Einfache Umgebungskonstruktion mit Docker
Von der Python-Umgebungskonstruktion zur virtuellen Umgebungskonstruktion mit Anaconda
Aufbau einer virtuellen Umgebung mit Docker + Flask (Python) + Jupyter-Notebook
Ab Ubuntu 20.04 Einführung in die Umgebungskonstruktion
Re: Heroku Leben von Grund auf neu mit Flask ~ PhantomJS bis Heroku ~
Vue.js + Konstruktionsmemorandum zur Flaschenumgebung ~ mit Anaconda3 ~
Starten Sie die Umgebung mit LineBot + Heroku + Docker + Python
Starten Sie die Flask-Anwendung mit Docker auf Heroku
Re: Heroku Leben beginnt mit Flask von Null - Umwelt und Hallo Welt -
Hochladen mit Heroku, Flask, Python, Git (4)
Sammeln von Informationen von Twitter mit Python (Umgebungskonstruktion)
Erstellen einer Analyseumgebung mit Docker (Jupyter Notebook + PostgreSQL)
Aufbau der Kissenumgebung - Für Docker + iPython (und OpenCV)
Es kann keine Verbindung zu MySQL über die Docker-Umgebung (Debian) hergestellt werden.
Senden Sie msgpack mit Ajax an die flk (werkzeug) Umgebung
Von 0 bis Django Entwicklungsumgebung Konstruktion bis Grundbetrieb
Hinweise von der Installation von Homebrew bis zum Erstellen einer Anaconda-Umgebung für Python mit pyenv
Konstruktionsvorlage für die lokale Python-Entwicklungsumgebung [Flask / Django / Jupyter mit Docker + VS-Code]
Umgebungskonstruktion: GCP + Docker
[Python] OpenCV-Umgebungskonstruktion mit Docker (cv2.imshow () funktioniert auch)
Hochladen mit Heroku, Flask, Python, Git (Teil 3)
Ausgabeprotokoll an die Konsole mit Flask + Nginx auf Docker
Hochladen mit Heroku, Flask, Python, Git (Teil 1)
Aufbau einer Pepper-Kun-Fernbedienungsumgebung mit Docker + IPython Notebook
Aufbau der Python-Entwicklungsumgebung 2020 [Von der Python-Installation bis zur Einführung in die Poesie]
Hochladen mit Heroku, Flask, Python, Git (Teil 2)
Umgebungskonstruktion mit anyenv + pyenv (nur von pyenv migrieren (Mac))
Beispiel einer Pytest-Umgebung zum Reparieren der Datenbank mit Docker
Verfahren zum Konvertieren einer Python-Datei in eine Exe aus der Ubunts-Umgebungskonstruktion
Umgebungskonstruktion für diejenigen, die Python einfach mit VSCode (für Mac) lernen möchten
[Mit Bilddiagramm] Nginx + Gunicorn + Flask konvertiert zu Docker [Teil 2]
So stellen Sie eine mit Flask erstellte Web-App für Heroku bereit
OpenJTalk unter Windows 10 (Sprechen Sie Japanisch mit Python aus der Umgebungskonstruktion)
Berühre Flask + laufe mit Heroku
[Memo] Erstellen Sie mit Docker eine Entwicklungsumgebung für Django + Nuxt.js
Docker + Django + Umgebungskonstruktion reagieren
Bereiten Sie die Python3-Umgebung mit Docker vor
Python3-Umgebungskonstruktion (für Anfänger)
Einführung in Python für VBA-Benutzer - Aufrufen von Python aus Excel mit xlwings-
[Mit Bilddiagramm] Nginx + Gunicorn + Flask konvertiert zu Docker [Teil 1]
Ansible Umgebungskonstruktion Für Mac
Bis die von Flask + MySQL erstellte API in Docker konvertiert wird
[AWS] Flask-Anwendungsbereitstellungsversion, die versucht hat, eine Python-Umgebung mit eb zu erstellen [Elastic Beanstalk]
Webanwendung mit Python + Flask (unter Verwendung von VScode) # 1 - Aufbau einer virtuellen Umgebung-
Aufbau einer Python-Umgebung für diejenigen, die Datenwissenschaftler 2016 werden möchten
So debuggen Sie Dash (Flask) in der Docker + VSCode + Remote-Verbindungsumgebung
Vom Aufbau einer Python-Umgebung für unerfahrene Personen bis zur Hello-Welt
So verwenden Sie das Jupyter-Notebook, ohne Ihre Umgebung mit Docker zu verschmutzen
Spigot (Papier) Einführung in die Erstellung eines Plug-Ins für 2020 # 01 (Umgebungskonstruktion)
(Hinweis) Hinweise zum Erstellen einer TensorFlow + Flask + Nginx-Umgebung mit Docker Compose
Ich habe eine Entwicklungsumgebung für Django 3.0 mit Docker, Docker-Compose und Poetry erstellt
Postgres-Umgebungskonstruktion mit Docker Ich hatte ein wenig Probleme, also beachten Sie
Jetzt ist es an der Zeit, DB mit Docker zu installieren! DB-Installation für Anfänger auf Docker
Von der Ubuntu-Installation bis zum Ausführen von Kinect mit Docker und Ros (Übersicht)
Vom Aufbau der PyCUDA-Umgebung bis zur GPGPU-Programmierung auf dem Mac (MacOS 10.12 Sierra)