Установка heroku в Unix/Linux

Heroku — это платформа как сервис (PaaS), которая упрощает развертывание ваших приложений в Интернете.

Установка heroku на Linux

Стоит установить snap и потом выполнить:

$ sudo snap install heroku --classic

Можно юзать….

Установка heroku на MacOS

Для начала, стоит поставить HOMEBREW:

Установка homebrew на MacOS

Можно поискать пакет:

$ brew search heroku
==> Formulae
heroku/brew/heroku ✔                                                                                   heroku/brew/heroku-node ✔

Ставим пакет:

$ brew install heroku/brew/heroku

Для обновления платформы, используем:

$ heroku update

Можно приступать к работе.

Работа с heroku в Unix/Linux

Конечно, для использования данного сервиса понадобится — аккаунт. У меня уже имеется он, открываем браузер и выполняем вход на сайт.

Для начала, стоит создать апликейщин. Страница выглядит так:

Нажимаем на «Create new app» чтобы создать ваше первое приложение в чироку. Стоит заполнить все необходимые поля, например у меня это выглядит таким образом:

Где:

  • App Name — Название вашего приложения.
  • Choose region — Выбор региона куда будет деплоится апликейщин. Я выбрал Европу, можно еще использовать США.
  • Name the pipeline — Название для моего пайплайна.
  • Choose a stage to add this app to — Выбираем стейдж ( продакшен или стейджинг).

После заполнение всех полей, нажимаем на «Create app». Аппликейшин — готов.

Первое что необходимо сделать, — войти в чероку:

$ heroku login
heroku: Press any key to open up the browser to login or q to exit:
Opening browser to https://cli-auth.heroku.com/auth/browser/bfc26cce-xxxx-xxxx-xxxx-63a3adf44bd3
Logging in... done
Logged in as xxxxxxxxxxxxxxxxxxx@gmail.com

Деплой python проектов в Heroku

Переходим в существующий каталог ( где будут лежать все проекты):

$ cd my-project

Скачиваем проект:

$ git clone https://github.com/heroku/python-getting-started.git && \
cd python-getting-started

Иницилиализируем проект:

$ git init

Потом, выполняем:

$ heroku git:remote -a go-captain-app

Создаем риложение на Heroku, которое подготовит Heroku к получению вашего исходного кода:

$ heroku create
Creating app... done, ⬢ shielded-tundra-23030
https://shielded-tundra-23030.herokuapp.com/ | https://git.heroku.com/shielded-tundra-23030.git

Чтобы развернуть аппликейщин, стоит выполнить:

$ git push heroku master
Enumerating objects: 450, done.
Counting objects: 100% (450/450), done.
Delta compression using up to 8 threads
Compressing objects: 100% (198/198), done.
Writing objects: 100% (450/450), 75.48 KiB | 25.16 MiB/s, done.
Total 450 (delta 225), reused 450 (delta 225)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Python app detected
remote: -----> Installing python-3.7.3
remote: -----> Installing pip
remote: -----> Installing SQLite3
remote: -----> Installing requirements with pip
remote:        Collecting django (from -r /tmp/build_5e43415b11d8710488762f17cac3f792/requirements.txt (line 1))
remote:          Downloading https://files.pythonhosted.org/packages/eb/4b/743d5008fc7432c714d753e1fc7ee56c6a776dc566cc6cfb4136d46cdcbb/Django-2.2.2-py3-none-any.whl (7.4MB)
remote:        Collecting gunicorn (from -r /tmp/build_5e43415b11d8710488762f17cac3f792/requirements.txt (line 2))
remote:          Downloading https://files.pythonhosted.org/packages/8c/da/b8dd8deb741bff556db53902d4706774c8e1e67265f69528c14c003644e6/gunicorn-19.9.0-py2.py3-none-any.whl (112kB)
remote:        Collecting django-heroku (from -r /tmp/build_5e43415b11d8710488762f17cac3f792/requirements.txt (line 3))
remote:          Downloading https://files.pythonhosted.org/packages/59/af/5475a876c5addd5a3494db47d9f7be93cc14d3a7603542b194572791b6c6/django_heroku-0.3.1-py2.py3-none-any.whl
remote:        Collecting sqlparse (from django->-r /tmp/build_5e43415b11d8710488762f17cac3f792/requirements.txt (line 1))
remote:          Downloading https://files.pythonhosted.org/packages/ef/53/900f7d2a54557c6a37886585a91336520e5539e3ae2423ff1102daf4f3a7/sqlparse-0.3.0-py2.py3-none-any.whl
remote:        Collecting pytz (from django->-r /tmp/build_5e43415b11d8710488762f17cac3f792/requirements.txt (line 1))
remote:          Downloading https://files.pythonhosted.org/packages/3d/73/fe30c2daaaa0713420d0382b16fbb761409f532c56bdcc514bf7b6262bb6/pytz-2019.1-py2.py3-none-any.whl (510kB)
remote:        Collecting whitenoise (from django-heroku->-r /tmp/build_5e43415b11d8710488762f17cac3f792/requirements.txt (line 3))
remote:          Downloading https://files.pythonhosted.org/packages/fd/2a/b51377ab9826f0551da19951257d2434f46329cd6cfdf9592ea9ca5f6034/whitenoise-4.1.2-py2.py3-none-any.whl
remote:        Collecting psycopg2 (from django-heroku->-r /tmp/build_5e43415b11d8710488762f17cac3f792/requirements.txt (line 3))
remote:          Downloading https://files.pythonhosted.org/packages/5c/1c/6997288da181277a0c29bc39a5f9143ff20b8c99f2a7d059cfb55163e165/psycopg2-2.8.3.tar.gz (377kB)
remote:        Collecting dj-database-url>=0.5.0 (from django-heroku->-r /tmp/build_5e43415b11d8710488762f17cac3f792/requirements.txt (line 3))
remote:          Downloading https://files.pythonhosted.org/packages/d4/a6/4b8578c1848690d0c307c7c0596af2077536c9ef2a04d42b00fabaa7e49d/dj_database_url-0.5.0-py2.py3-none-any.whl
remote:        Installing collected packages: sqlparse, pytz, django, gunicorn, whitenoise, psycopg2, dj-database-url, django-heroku
remote:          Running setup.py install for psycopg2: started
remote:            Running setup.py install for psycopg2: finished with status 'done'
remote:        Successfully installed dj-database-url-0.5.0 django-2.2.2 django-heroku-0.3.1 gunicorn-19.9.0 psycopg2-2.8.3 pytz-2019.1 sqlparse-0.3.0 whitenoise-4.1.2
remote:
remote: -----> $ python manage.py collectstatic --noinput
remote:        120 static files copied to '/tmp/build_5e43415b11d8710488762f17cac3f792/staticfiles', 378 post-processed.
remote:
remote: -----> Discovering process types
remote:        Procfile declares types -> web
remote:
remote: -----> Compressing...
remote:        Done: 55.5M
remote: -----> Launching...
remote:        Released v5
remote:        https://go-captain-app.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/go-captain-app.git
 * [new branch]      master -> master

ЗАМЕЧАНИЕ: Для существующих репозиториев просто добавьте удаленную ссылку:

$ heroku git:remote -a go-captain-app

Т.к у меня фришний аккаунт, то я не могу знать сколько осталось у меня часов на использование платформы, чтобы проверить, можно использовать:

$ heroku ps --app go-captain-app
Free dyno hours quota remaining this month: 550h 0m (100%)
Free dyno usage for this app: 0h 0m (0%)
For more information on dyno sleeping and how to upgrade, see:
https://devcenter.heroku.com/articles/dyno-sleeping

=== web (Free): gunicorn gettingstarted.wsgi --log-file - (1)
web.1: up 2019/06/20 12:09:17 +0300 (~ 38s ago)

Приложение теперь развернуто. Убедитесь, что хотя бы один экземпляр приложения работает:

$ heroku ps:scale web=1
Scaling dynos... done, now running web at 1:Free

Чтобы поглядеть что вышло, выполните:

$ heroku open

Или, можно просто зайти на УРЛ:

https://YOUR_APP_NAME_HERE.herokuapp.com/

где:

  • YOUR_APP_NAME_HERE — имя апликейщина (создавали вначале статьи).

Можно поглядеть логи развертывания:

$ heroku logs -t --app go-captain-app
2019-06-19T11:21:30.933892+00:00 app[api]: Release v1 created by user xxxxxxxxxxxxxxxxxxx@gmail.com
2019-06-19T11:21:30.933892+00:00 app[api]: Initial release by user xxxxxxxxxxxxxxxxxxx@gmail.com
2019-06-19T11:21:31.594682+00:00 app[api]: Enable Logplex by user xxxxxxxxxxxxxxxxxxx@gmail.com
2019-06-19T11:21:31.594682+00:00 app[api]: Release v2 created by user xxxxxxxxxxxxxxxxxxx@gmail.com
^C

Или:

$ heroku logs --tail

Приложение работает и если есть необходимость выключить его, то можно выполнить:

$ heroku ps:scale web=0
Scaling dynos... done, now running web at 0:Free

Запуск джанго приложения локально (пример что использую выше)

В скачанном прокте, выполняем:

$ pip3 install -r requirements.txt

NOTE: Буду юзать питон 3. И перед тем как заюзать данную команду, нужно поставить postgresql! У меня все есть, по этому идем дельше.

Для старта, выполняем:

$ heroku local web

Чтобы открыть апликейшен, откройте:

http://localhost:5000/

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

$ git add . && \
git commit -m "commit from local changes" && \
git push heroku master

Собственно, открываем потом приложение.

Деплой Golang проектов в Heroku

Переходим в существующий каталог ( где будут лежать все проекты):

$ cd my-project

Скачиваем проект:

$ git clone https://github.com/heroku/go-getting-started.git && \
cd go-getting-started

Создаем риложение на Heroku, которое подготовит Heroku к получению вашего исходного кода:

$ heroku create
Creating app... done, ⬢ safe-coast-81222
https://safe-coast-81222.herokuapp.com/ | https://git.heroku.com/safe-coast-81222.git

Пушим все это дело в хероку:

$ git push heroku master

Открываем УРЛ или так:

$ heroku open

Вот и все с Go приложениями.

Установка аддонов для Heroku

Чтобы посмотреть список аддонов, выполните:

$ heroku addons

Add-on                                             Plan       Price  State
─────────────────────────────────────────────────  ─────────  ─────  ───────
heroku-postgresql (postgresql-asymmetrical-97337)  hobby-dev  free   created
 └─ as DATABASE

The table above shows add-ons and the attachments to the current app (go-captain-app) or other apps.

Например, чтобы поставить papertrail, выполните:

$ heroku addons:create papertrail

Смотрим что вышло:

$ heroku addons:open heroku-postgresql

Или пример для papertrail:

$ heroku addons:open papertrail

Запуск SHELL в Heroku

Чтобы получить shell, выполните:

$ heroku run bash
Running bash on ⬢ go-captain-app... up, run.6043 (Free)
~ $

Если рассматривать пример на питоне ( что я юзал выше), то можно выполнить:

$ heroku run python manage.py shell
Running python manage.py shell on ⬢ go-captain-app... up, run.8036 (Free)
Python 3.7.3 (default, Apr  3 2019, 21:35:17)
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>>

Тем самым, получим доступ к выполнению питона.

Установка переменных окружения в Heroku

Для того чтобы добавить переменую, используйте:

$ heroku config:set TIMES=2
Setting TIMES and restarting ⬢ go-captain-app... done, v6
TIMES: 2

Чтобы посмотреть список всех переменных, используем:

$ heroku config
=== go-captain-app Config Vars
DATABASE_URL: postgres://wlcnujaybqtbnx:49f5c5b833f52633405fa66d10e5f5c97fe3d841f275a9723a7e3d230a89ad85@ec2-54-246-121-32.eu-west-1.compute.amazonaws.com:5432/d5f7acvu6m7dvl
TIMES:        2

Работа database в Heroku

Смотрим что имеется:

$ heroku addons

Add-on                                             Plan       Price  State
─────────────────────────────────────────────────  ─────────  ─────  ───────
heroku-postgresql (postgresql-asymmetrical-97337)  hobby-dev  free   created
 └─ as DATABASE

The table above shows add-ons and the attachments to the current app (go-captain-app) or other apps.

Как видно с вывода, имеется — postgresql.

Смотрим переменные окружения:

$ heroku config
=== go-captain-app Config Vars
DATABASE_URL: postgres://wlcnujaybqtbnx:49f5c5b833f52633405fa66d10e5f5c97fe3d841f275a9723a7e3d230a89ad85@ec2-54-246-121-32.eu-west-1.compute.amazonaws.com:5432/d5f7acvu6m7dvl

Heroku также предоставляет команду pg, которая показывает гораздо больше информации:

$ heroku pg
=== DATABASE_URL
Plan:                  Hobby-dev
Status:                Available
Connections:           0/20
PG Version:            11.2
Created:               2019-06-20 09:09 UTC
Data Size:             7.7 MB
Tables:                0
Rows:                  0/10000 (In compliance)
Fork/Follow:           Unsupported
Rollback:              Unsupported
Continuous Protection: Off
Region:                Europe
Add-on:                postgresql-asymmetrical-97337

Для подключения к удаленному серверу БД, используем:

$ heroku pg:psql
--> Connecting to postgresql-asymmetrical-97337
psql (11.3, server 11.2 (Ubuntu 11.2-1.pgdg16.04+1))
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.

go-captain-app::DATABASE=>

Вот и все, статья «Установка heroku в Unix/Linux» завершена.

2 thoughts on “Установка heroku в Unix/Linux

  1. Все сильно сложнее если хочется запустить это в docker-контейнере, да еще и перед приложением поставить Nginx

    • Хм… Интересно!
      Если появится необходимость в данном решении, — я обязательно дополню данную статью новым материалом. Если есть интерес + материал, — можешь тоже дополнить ( если есть желание + время).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.