Python, Docker та Amazon Elastic Beanstalk

pic

Коли мова заходить про інфраструктуру, є безліч варіантів хмарних платформ — від повністю кастомних налаштувань до готових рішень, таких як Google AppEngine.

Сьогодні я розглядаю, як стандартна інфраструктура (зокрема, Amazon Elastic Beanstalk) може пришвидшити процес DevOps і деплойментів, а також зменшити витрати на обслуговування.

У моєму випадку я хотів відтворити звичний технологічний стек:

  • Backend: Python + Django
  • Frontend: HTML + JavaScript
  • Task runners: NPM + Gulp
  • Інфраструктура: Docker + AWS

Існує безліч способів реалізувати цей стек, але Amazon Elastic Beanstalk обіцяє рішення для деплойменту в один клік. Тож давайте спробуємо!

Перший крок — встановити Amazon Elastic Beanstalk Client за допомогою команди:

brew install awsebcli

Якщо у вас вже встановлений Django, ви можете автоматично створити проект за допомогою команди:

django-admin startproject mysite

Тепер ви можете протестувати свій Django проект локально, використовуючи команду python runserver:

cd mysite  
python manage.py runserver 0.0.0.0:8080

Далі потрібно додати Docker файл до /mysite/Dockerfile. Це скаже Docker, щоб він використовував попередньо налаштований базовий образ Docker для Amazon. Додайте наступні рядки в цей файл:

# Використовуємо образ AWS Elastic Beanstalk Python 3.4  
FROM amazon/aws-eb-python:3.4.2-onbuild-3.5.1  

# Відкриваємо порт  
EXPOSE 8080

Якщо хочете, ви можете написати свої власні кастомні Docker образи, є безліч прикладів на GitHub. Тепер можемо ініціювати наш проект Amazon за допомогою команди (дотримуйтесь інструкцій для завершення):

eb init

Вашу папку mysite/ тепер буде містити підпапку .elasticbeanstalk із налаштуваннями, які ви щойно ввели. Вони будуть використані для побудови та деплойменту на Amazon. Перед тим як запустити Docker контейнер, переконайтеся, що у вас є файл .dockerignore, який містить:

.elasticbeanstalk/*  
.git  
.gitignore  
.pyc

Без цього Docker скопіює ВСІ файли, що може спричинити проблеми з будуванням або продуктивністю. Тепер можна запустити Docker контейнер, використовуючи зручну команду Elastic Beanstalk Client:

eb local run

Або, якщо хочете, можете використовувати Docker команди напряму:

docker build -t python-docker-amazon .  
docker run -it -p 3000:8080 python-docker-amazon

Для деплойменту вашого додатка можна використати команди Elastic Beanstalk Client:

eb start  
eb deploy

Дуже простий вступ до використання Elastic Beanstalk!

Ви можете переглянути завершений проект на GitHub тут:
https://github.com/kmturley/python-docker-amazon

Також я створив гілку Flask, щоб показати, як це працює з кількома Python фреймворками:
https://github.com/kmturley/python-docker-amazon/tree/flask

Перекладено з: Python, Docker and Amazon Elastic Beanstalk

Leave a Reply

Your email address will not be published. Required fields are marked *