Спасибо Мэтью Вилкину за любезную помощь в рецензировании этой статьи.
В этой статье вы узнаете о Heroku и о том, как развернуть на нем свое веб-приложение.
Если вы никогда не слышали об этом, Heroku — это платформа управляемого сервера для быстрого развертывания веб-приложений. Он автоматически выделяет ресурсы сервера для вас, и развертывание так же просто, как ввод в git push
-репозиторий вашего приложения на Heroku. Лучше всего то, что вы можете развернуть свое приложение бесплатно (при условии, что оно не получает слишком много трафика), что делает начало работы бесплатным и простым.
Если у вас много трафика, Heroku может стать немного дорогим; каждый узел (или dyno
, как они его называют) будет стоить вам $ 25 или более в месяц, и добавление таких функций, как базы данных, увеличит это немного. Тем не менее, это намного дешевле, чем нанять команду разработчиков, чтобы обеспечить стабильность и простоту использования, которые предлагает Heroku.
Прежде чем мы начнем
Если вы хотите следовать отсюда, вам нужно убедиться, что у вас есть несколько полезных вещей.
- Загрузите и установите Heroku Toolbelt . Это утилита командной строки, которую мы будем использовать для настройки проекта.
- Убедитесь, что ваш проект использует 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, если хотите.