Привет! Сегодня я продемонстрирую, как развернуть контейнерную приложение Python Flask в Heroku, используя Docker. Этот учебник разделен на четыре части:
- Предварительные условия
- Создание приложения колба с помощью Python
- Контейнерное обеспечение приложения с помощью докера
- Развертывание контейнера к Heroku
Предварительные условия
- Колбы
- A Докер установка
- 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”