Download - Хокку про Heroku
Хокку про Heroku
Сергей Селецкий@sseletskyy
Европейское Агентство Высоких Технологий
http://www.foss-sea.org.ua/ 2013
Что такое Paas(Product as a Service)
Cloud сервер + Agile + масштабирование
Что такое Paas(Product as a Service)
● нет затрат на покупку серверов● на покупку серверного ПО● на зарплату администратора
● ежемесячная оплата услуг PaaS
с финансовой точки зрения
GITSOURCE
CODEHEROKU
$ git push heroku your_branch:master
HEROKU
PostgreSQL
STATELESSINSTANCEWORKER
DYNO
LOADBALANCER
STATELESSINSTANCE
WEBDYNO
$ heroku ps:scale web=1 worker=1
HEROKU
PostgreSQL
STATELESSINSTANCE
DYNO
STATELESSINSTANCEWORKER
DYNO
LOADBALANCER
STATELESSINSTANCE
DYNO
STATELESSINSTANCE
WEBDYNO
$ heroku ps:scale web=2 worker=2
HEROKU
PostgreSQL
STATELESSINSTANCE
DYNO
STATELESSINSTANCE
DYNO
STATELESSINSTANCEWORKER
DYNO
STATELESSINSTANCE
DYNO
LOADBALANCER
STATELESSINSTANCE
DYNO
STATELESSINSTANCE
WEBDYNO
$ heroku ps:scale web=3 worker=3
HEROKU
PostgreSQL
STATELESSINSTANCE
DYNO
STATELESSINSTANCE
DYNO
STATELESSINSTANCE
DYNO
STATELESSINSTANCE
DYNO
STATELESSINSTANCE
DYNO
STATELESSINSTANCEWORKER
DYNO
STATELESSINSTANCE
DYNO
STATELESSINSTANCE
DYNO
STATELESSINSTANCE
DYNO
STATELESSINSTANCE
WEBDYNO
LOADBALANCER
$ heroku ps:scale web=5 worker=5
==> heroku loginEnter your Heroku credentials.Email: [email protected] (typing will be hidden): Found the following SSH public keys:1) id_rsa.pub2) id_rsa_cloud.pubWhich would you like to use with your Heroku account? 2Uploading SSH public key /Users/gustotune/.ssh/id_rsa_cloud.pub... failed ! This key is already in use by another account. Each account must have a unique key.
/Users/gustotune==> ssh-keygen -t rsa -C "[email protected]"Generating public/private rsa key pair.Enter file in which to save the key (/Users/gustotune/.ssh/id_rsa): id_rsa_gustotuneEnter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in id_rsa_gustotune.Your public key has been saved in id_rsa_gustotune.pub.
/Users/gustotune==> mv id_rsa_gustotune* .ssh/
/Users/gustotune==> heroku loginEnter your Heroku credentials.Email: [email protected] (typing will be hidden): password is hereFound the following SSH public keys:1) id_rsa.pub2) id_rsa_cloud.pub3) id_rsa_gustotune.pubWhich would you like to use with your Heroku account? 3Uploading SSH public key /Users/gustotune/.ssh/id_rsa_gustotune.pub... doneAuthentication successful.
/Users/gustotune/rails_app==> git config -e
# комментарий: добавить три строчки в конец файла
[remote "foss-sea"] url = [email protected]:foss-sea.git fetch = +refs/heads/*:refs/remotes/heroku/*
или тоже самое одной командой
==> heroku git:remote -a foss-sea -r foss-sea
где -a - это название приложения -r - это git remote name (‘heroku’ по умолчанию)
/Users/gustotune/rails_app==> git push foss-sea heroku:master
foss-sea = remote git repo in git configheroku = our local branch (локальная ветка)master = default branch at foss-sea
еще примеры ==> git push foss-sea master:master
==> git push foss-sea release_1.0:master
==> git push foss-sea heroku:masterCounting objects: 8212, done.Delta compression using up to 4 threads.Compressing objects: 100% (2822/2822), done.Writing objects: 100% (8212/8212), 9.68 MiB | 74.00 KiB/s, done.Total 8212 (delta 5114), reused 8101 (delta 5027)-----> Ruby app detected-----> Compiling Ruby/Rails-----> Using Ruby version: ruby-2.0.0-----> Installing dependencies using Bundler version 1.3.2 New app detected loading default bundler cache Running: bundle install --without development:test --path vendor/bundle --binstubs vendor/bundle/bin --deployment Fetching source index from https://rubygems.org/ Asset precompilation completed (28.32s) Cleaning assets-----> Discovering process types Procfile declares types -> web Default types for Ruby -> console, rake, worker
-----> Compiled slug size: 55.3MB-----> Launching... done, v5 http://foss-sea.herokuapp.com deployed to HerokuTo [email protected]:foss-sea.git * [new branch] heroku -> master
/Users/gustotune/rails_app==> heroku run rake db:versionRunning `rake db:version` attached to terminal... up, run.9905Current version: 0
/Users/gustotune/rails_app==> heroku run rake db:migrateRunning `rake db:migrate` attached to terminal... up, run.7096Migrating to DeviseCreateUsers (20130910211249)== DeviseCreateUsers: migrating ==============================================-- create_table(:users) -> 0.0398s-- add_index(:users, :email, {:unique=>true}) -> 0.0203s-- add_index(:users, :reset_password_token, {:unique=>true}) -> 0.0260s-- add_index(:users, :confirmation_token, {:unique=>true}) -> 0.0222s== DeviseCreateUsers: migrated (0.1091s) ...
Подготовка базы данных
БИНГО ;)
Работа с дополнениямиadd-ons
/Users/gustotune/rails_app==> heroku addons:add logentriesAdding logentries on foss-sea... failed ! Please verify your account to install this add-on ! For more information, see http://devcenter.heroku.com/categories/billing ! Verify now at https://heroku.com/verify
==> heroku addons:add newrelic:starkAdding newrelic:stark on foss-sea... done, v7 (free)Use `heroku addons:docs newrelic` to view documentation.
==> heroku addons:add pgbackups:auto-monthAdding pgbackups:auto-month on foss-sea... done, v8 (free)You can now use "pgbackups" to backup your databases or import an external backup.Use `heroku addons:docs pgbackups` to view documentation.
==> heroku addons:add rollbarAdding rollbar on foss-sea... done, v9 (free)Use `heroku addons:docs rollbar` to view documentation.
==> heroku addons:add sendgridAdding sendgrid on foss-sea... done, v10 (free)Use `heroku addons:docs sendgrid` to view documentation.
Настройка дополнений и переменных
окружения
> heroku config:set MAILER_URL=foss-sea.herokuapp.com
или так если используется собственный домен> heroku config:set MAILER_URL=foss-sea.custom-domain.io
Примеры дополнений
Играем с масштабированием и
ценой
Полезные команды
==> heroku ps # возвращает список работающих копий приложения=== web (1X): `bundle exec passenger start -p $PORT --max-pool-size 2`web.1: up 2013/11/29 01:02:25 (~ 46m ago)
==> heroku ps:scale web=2 worker=1Scaling web processes... done, now running 2Scaling worker processes... done, now running 1
==> heroku run bash # получить доступ к консоли сервера==> heroku run rails c # получить доступ к консоли приложения==> heroku run rake [your_rake_task] # вызвать rake задачу [your_rake_task]==> heroku logs --tail #просмотреть логи==> heroku labs:enable user-env-compile # решает ряд проблем при сборке==> heroku fork -a foss-sea foss-sea-copy # делает полную копию приложения ==> heroku maintenance:onEnabling maintenance mode for foss-sea... done
Восстановление после неудачного обновления
СпасибоСергей Селецкий
@sseletskyy