Статьи

Развертывание в Heroku: введение

Спасибо Мэтью Вилкину за любезную помощь в рецензировании этой статьи.

В этой статье вы узнаете о Heroku и о том, как развернуть на нем свое веб-приложение.

Логотип Heroku

Если вы никогда не слышали об этом, Heroku — это платформа управляемого сервера для быстрого развертывания веб-приложений. Он автоматически выделяет ресурсы сервера для вас, и развертывание так же просто, как ввод в git push -репозиторий вашего приложения на Heroku. Лучше всего то, что вы можете развернуть свое приложение бесплатно (при условии, что оно не получает слишком много трафика), что делает начало работы бесплатным и простым.

Если у вас много трафика, Heroku может стать немного дорогим; каждый узел (или dyno , как они его называют) будет стоить вам $ 25 или более в месяц, и добавление таких функций, как базы данных, увеличит это немного. Тем не менее, это намного дешевле, чем нанять команду разработчиков, чтобы обеспечить стабильность и простоту использования, которые предлагает Heroku.

Прежде чем мы начнем

Если вы хотите следовать отсюда, вам нужно убедиться, что у вас есть несколько полезных вещей.

  1. Загрузите и установите Heroku Toolbelt . Это утилита командной строки, которую мы будем использовать для настройки проекта.
  2. Убедитесь, что ваш проект использует Git . Вы должны знать, что такое мерзавец, но если вы этого не сделаете, вот небольшое чтение . Если у вас нет проекта, просто убедитесь, что git установлен.

Если у вас уже есть что-то готовое, пропустите следующий раздел и перейдите прямо к созданию проекта Heroku .

Наш пример проекта

Чтобы собрать этот пример проекта, вам понадобится pip (который в любом случае удобен для любой разработки на Python). Мы будем использовать проект Python, написанный с использованием Flask , веб-микрофрейма для Python, но вы можете в большинстве случаев следовать за любым проектом (должно быть очевидно, какие части зависят от языка и как их настраивать).

Если у вас есть что-то готовое, перейдите к следующему разделу. Если вам нужен проект, настройте папку проекта следующим образом (вам не нужно называть ее myproject ):

 /myproject /templates index.html app.py requirements.txt 

И заполните их так:

app.py :

 import os import flask app = Flask(__name__) @app.route("/") def index(): return render_template("index.html") if __name__ == "__main__": app.run(port=os.environ.get('PORT', '5000')) 

templates/index.html :

 <!doctype HTML> <html> <head> <title>My example project</title> </head> <body> <h1>This is my project.</h1> <!-- feel free to get a bit more creative here --> <body> </html> 

requirements.txt

 Flask==0.10.1 

затем запустите:

 pip install -r requirements.txt 

После этого убедитесь, что все работает, запустив python app.py и python app.py по http://localhost:5000/ . Если все прошло хорошо, вы должны увидеть index.html .

Создание проекта Heroku

Здесь идет самая легкая вещь в мире. Откройте терминал, cd в каталог вашего проекта и выполните следующие команды (пропустите git, если у вас уже есть git в вашем проекте):

 $ git init $ heroku create Creating app... done, stack is cedar-14 https://calm-lake-56303.herokuapp.com/ | https://git.heroku.com/calm-lake-56303.git 

С этой командой Heroku:

  • сгенерировал имя для нас (мы могли бы выбрать его, запустив вместо этого heroku create myproject )
  • назначил нам URL-адрес и Git-репозиторий
  • Инициализировал для heroku удаленный репозиторий heroku в git.

Мы почти готовы к развертыванию, но хорошо знать, что произойдет первым. Давайте узнаем немного больше о том, как Heroku может знать, что делать с вашим кодом, и как убедиться, что он удовлетворен.

Отдельно от Buildpacks (или как Heroku распознает ваш проект)

Проекты Heroku управляются пакетами сборки , которые по сути являются инструкциями для извлечения зависимостей, построения и запуска вашего проекта. Существуют официально поддерживаемые пакеты сборки для Node.js, Ruby, Java, Clojure, Scala, PHP, Python и Go. Вам не нужно будет рассказывать Heroku, что вы используете для них; вместо этого Heroku будет угадывать, что представляет собой проект, основываясь на некоторых соглашениях и эвристических методах управления зависимостями. Например, файл require.txt в каталоге вашего проекта, который существует в приведенном выше примере проекта, указывает проект Python. Вот файлы зависимостей, которые Heroku будет использовать для автоматического определения вашей платформы для других платформ:

  • Node.js: package.json
  • Рубин: Gemfile
  • PHP: composer.json
  • Java: pom.xml
  • Scala: build.properties
  • Clojure: project.clj
  • Go: Godeps/Godeps.json

Если вы используете другой язык или другой инструмент сборки для одного из этих языков, вы также можете использовать сторонний сборочный пакет. Heroku ведет обширный каталог этих , так что проверьте там, прежде чем отказаться от предпочитаемого языка. Вы можете установить buildpack с помощью URL репозитория git; например, чтобы использовать пакет сборки Upworthy Clojure Boot , вы можете запустить эту команду в каталоге вашего проекта:

 $ heroku buildpacks:set https://github.com/upworthy/heroku-buildpack-boot 

Вы можете даже найти неучтенный пакет сборки на Github — просто проверьте, чтобы убедиться, что он безопасен в использовании!

Настройка вашего Procfile

Все, что нам нужно, на месте, кроме одного компонента. Heroku использует файл с именем Procfile чтобы сообщить ему, что он должен работать. Для вашего начального проекта вы, вероятно, просто захотите указать web процесс, но вы также можете указать worker задания.

Поскольку мы запускаем наше приложение с помощью python app.py , мы Procfile в наш Procfile :

 web: python app.py 

(Позже вы можете захотеть использовать что-то более производительное; вы можете использовать Gunicorn, добавив его в файл Procfile и заменив содержимое Procfile на web: gunicorn app:app -b 0.0.0.0:$PORT ).

Развертывание вашего проекта

Добавьте Procfile в свой репозиторий:

 $ git add Procfile && git commit -m "added Procfile" 

Затем используйте git push для развертывания в Heroku

 git push heroku master 

??? Поздравления ???

Ваше приложение должно быть развернуто на Heroku. Перейдите по URL, который вам сообщает Heroku, и вы должны увидеть свою домашнюю страницу.

Вот и все. Вот и вся статья. Это твоя жизнь с Героку сейчас; просто нажмите ваши коммиты, и они сразу же будут развернуты. Как это безумие ?!

Некоторые бонусные команды

На случай, если вы не удовлетворены, вот несколько вещей, которые вы можете захотеть сделать с heroku команды heroku :

  • heroku config:set MY_ENV_VARIABLE=some_value : установить постоянное значение конфигурации. Полезно для таких вещей, как пароли базы данных и другие настройки.
  • heroku ps:scale web=5 : внезапный всплеск трафика? Масштаб вашего процесса до 5 веб-динамо в одно мгновение. Обратите внимание, что это будет стоить вам 125 долларов США за 25 долларов США за динамо, поэтому используйте это с осторожностью. Чтобы уменьшить масштаб после падения с Reddit, запустите heroku ps:scale web=1 .
  • Сделал ошибку? Вы можете перечислить выпуски вашего приложения с выпусками heroku releases . Чтобы откатиться до определенного выпуска, запустите heroku rollback <release identifier> . Или просто запустите heroku release чтобы отменить последний выпуск.

Вы также можете управлять большинством из них с панели управления Heroku, если хотите.