Рубрики
Без рубрики

Как развернуть приложение Python Flask на Heroku с помощью Docker

Привет! Сегодня я продемонстрирую, как развернуть контейнерную приложение Python Flask в Heroku … Tagged с Docker, Heroku, Python, учебником.

Привет! Сегодня я продемонстрирую, как развернуть контейнерную приложение Python Flask в Heroku, используя Docker. Этот учебник разделен на четыре части:

  1. Предварительные условия
  2. Создание приложения колба с помощью Python
  3. Контейнерное обеспечение приложения с помощью докера
  4. Развертывание контейнера к Heroku

Предварительные условия

  1. Колбы
  2. A Докер установка
  3. A Heroku Аккаунт/ Heroku Cli установка

Создание приложения колба с помощью Python

Мы будем создавать «Hello World!» Приложение для поддержания простоты. Структура файла к концу этого урока будет выглядеть следующим образом:

├───FlaskApp
  └───app.py           # Our main application
  └───main.py          # Used by gunicorn to run the app
  └───requirements.txt # The packages we will be using
  └───Dockerfile       # Used to create the Docker container
  └───Procfile         # Used to deploy the container to Heroku

Чтобы начать, создайте пустой каталог, используя:

$ sudo mkdir FlaskApp

И CD в каталог, используя:

$ cd FlaskApp

Создайте два файла под названием app.py и требования .txt Отказ В требованиях .txt, вставьте строку:

flask==2.0.1
gunicorn==20.1.0

Затем, чтобы установить необходимые пакеты, запустите:

$ pip install -r requirements.txt

Затем откройте app.py В вашем любимом редакторе кода и добавьте следующий код:

#Import the flask module
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    statement = 'Hello World!'
    return statement


#Calls the run method, runs the app on port 5000
app.run(host='0.0.0.0', port='5000')

Далее создайте файл под названием main.py и добавьте следующий код:

from app import app

# Gets the app from app.py and runs it
app.run()

Затем запустите программу, используя:

$ gunicorn --bind 0.0.0.0:5000 main:app

И вы должны получить выход, который выглядит как:

[2021-06-25 10:33:51 -0400] [1607] [INFO] Starting gunicorn 20.1.0
[2021-06-25 10:33:51 -0400] [1607] [INFO] Listening at: http://0.0.0.0:5000 (1607)
[2021-06-25 10:33:51 -0400] [1607] [INFO] Using worker: sync
[2021-06-25 10:33:51 -0400] [1609] [INFO] Booting worker with pid: 1609

После доступа к URL-адресу, которое было предоставлено при выполнении в http://yourip: 5000 Страница должна выглядеть что-то вроде:

Теперь, когда ваше приложение Python работает и работает, давайте перейдем к контейнеризации его, используя Docker.

Контейнерное обеспечение приложения с помощью докера

В вашем Флоскапп каталог, создать файл с помощью Нет расширения файла называется Dockerfile и добавьте следующее:

#Create a ubuntu base image with python 3 installed.
FROM python:3.8

#Set the working directory
WORKDIR /

#copy all the files
COPY . .

#Install the dependencies
RUN apt-get -y update
RUN apt-get update && apt-get install -y python3 python3-pip
RUN pip3 install -r requirements.txt

#Expose the required port
EXPOSE 5000

#Run the command
CMD gunicorn main:app

После этого постройте изображение Docker, запустив:

$ docker build -t flask-app .

А затем запустить его, используя:

$ docker run flask-app

И вы должны получить тот же вывод, что и у вас его нормально работает:

2021-06-25T15:08:47.958205+00:00 app[web.1]: [2021-06-25 15:08:47 +0000] [5] [INFO] Starting gunicorn 20.1.0
2021-06-25T15:08:47.958983+00:00 app[web.1]: [2021-06-25 15:08:47 +0000] [5] [INFO] Listening at: http://0.0.0.0:5000 (5)
2021-06-25T15:08:47.958983+00:00 app[web.1]: [2021-06-25 15:08:47 +0000] [5] [INFO] Using worker: sync
2021-06-25T15:08:47.962897+00:00 app[web.1]: [2021-06-25 15:08:47 +0000] [7] [INFO] Booting worker with pid: 7

И вы должны получить ожидаемый вывод по данному IP-адресу в http://yourip: 5000 : Поздравляю! Вы успешно создали приложение Flask и контейнерируйте его, используя Docker! Теперь мы перейдем, как развернуть этот контейнер к Heroku, используя свой реестр контейнера.

Развертывание контейнера к Heroku

Учитывая, что Heroku CLI устанавливается, как указано в предварительных условиях, запустить:

$ heroku login

И вам будет предложено ввести свои учетные данные Heroku. После входа в систему создайте приложение с помощью:

$ heroku create 

Далее, войдите в реестр контейнеров Heroku, запустив:

$ heroku container:login

Который должен производить:

Login Succeeded

В вашем Флоскапп каталог, создать файл с помощью Нет расширения называется Procfile и добавить:

web: gunicorn main:app 0.0.0.0:$PORT

После этого, в нашем app.py Файл, нам нужно добавить/изменять следующие строки, помеченные стрелками:

# Import OS to get the port environment variable from the Procfile
import os # <-----
# Import the flask module
from flask import Flask

# Create a Flask constructor. It takes name of the current module as the argument
app = Flask(__name__)

@app.route('/')
def hello_world():
    statement = 'Hello World!'
    return statement


# Create the main driver function
port = int(os.environ.get("PORT", 5000)) # <-----
app.run(host='0.0.0.0', port=port)       # <-----

После редактирования файла мы должны подтолкнуть контейнер в Heroku, используя:

$ heroku container:push web --app 

После создания контейнера вашего приложения выпустите его в Heroku, используя:

$ heroku container:release web --app 

Который будет производить следующее:

Releasing images web to ... done

Как только он будет освобожден, вы можете получить доступ к журналам вашего нового контейнера, используя:

$ heroku logs --tail --app 

И вы должны увидеть что-то вдоль линий:

2021-06-25T15:08:45.662062+00:00 heroku[web.1]: Starting process with command `/bin/sh -c gunicorn\ main:app`
2021-06-25T15:08:47.958205+00:00 app[web.1]: [2021-06-25 15:08:47 +0000] [5] [INFO] Starting gunicorn 20.1.0
2021-06-25T15:08:47.958983+00:00 app[web.1]: [2021-06-25 15:08:47 +0000] [5] [INFO] Listening at: http://0.0.0.0:34683 (5)
2021-06-25T15:08:47.958983+00:00 app[web.1]: [2021-06-25 15:08:47 +0000] [5] [INFO] Using worker: sync
2021-06-25T15:08:47.962897+00:00 app[web.1]: [2021-06-25 15:08:47 +0000] [7] [INFO] Booting worker with pid: 7
2021-06-25T15:08:48.409823+00:00 heroku[web.1]: State changed from starting to up

И теперь вы должны иметь возможность получить доступ к вашему приложению через URL нового приложения с ожидаемым выходом:

Поздравляю! Этот учебник научил вас, как создать приложение Python Flask, контейнеризировать его, а затем развернуть его к Heroku.

Оригинал: “https://dev.to/ejach/how-to-deploy-a-python-flask-app-on-heroku-using-docker-mpc”