Коли мова заходить про інфраструктуру, є безліч варіантів хмарних платформ — від повністю кастомних налаштувань до готових рішень, таких як 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