Как развернуть Yii2 проект на Heroku

На самом деле не стоит использовать Yii2, когда есть нормальный фреймворк Symfony.

Что необходимо иметь в арсенале:

  • PHP
  • git
  • Браузер
  • Репозиторий с Yii2 в GitLab.

Первым делом регистрируемся на Heroku.

После успешной регистрации создаём новое приложение на Heroku:

Screenshot

Вводим название и нажимаем кнопку "Create app":

Screenshot

Затем нажимаем на вкладку "Overview":

Screenshot

Вводим в поле поиска postgres и выбираем "Heroku Postgres":

Screenshot

Нажимаем "Provision" и тем самым создаём сервер бд:

Screenshot

Теперь редактируем composer.json:

  • Добавляем "ext-gd": "*" в require
  • Переносим "yiisoft/yii2-debug": "~2.1.0" и "yiisoft/yii2-gii": "~2.1.0" из require-dev в require

Screenshot

Теперь заходим в GitLab и нажимакм "Set up CI/CD":

Screenshot

Перед нами открывается окно настройки CI/CD:

Screenshot

Вставляем:

image: php:7.2

before_script:
  - apt-get update -qq
  - apt-get install -y -qq git

deploy to heroku:
  stage: deploy
  script:
  - apt-get install -y ruby
  - gem install dpl
  - dpl --provider=heroku --app=ТУТ_НАЗВАНИЕ_ПРОЕКТА --api-key=ТУТ_КЛЮЧ

Где взять api-key?

Открываем Heroku, нажимаем на аватар, нажимаем "Account settings":

Screenshot

Скроллим до API Key, нажимаем Reveal и копируем ключ и вставляем в -api-key

Screenshot

Теперь нажимаем "Commit changes" из пункта выше.

Нажимаем на CI/CD, нажимаем выбираем pipeline:

Screenshot

Смотрим логи деплоя и наслаждаемся деплоем не самого лучшего фреймворка:

Screenshot

В конце должно быть сообщение "Job succeded" и ссылка на Heroku:

Screenshot

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

Screenshot

Настраиваем коннект с БД

Открываем вкладку "Overview" на Heroku и нажимаем на "Heroku Postgres":

Screenshot

Открываем вкладку "Settings" нажимаем на "View credentials":

Screenshot

Редактируем файл config/bd.php и вставляем данные для бд:

Screenshot

Пушим измненения, ждём пока проект задеплоится.

Настраиваем nginx

Создаём файл Procfile и вставляем туда: web: vendor/bin/heroku-php-nginx -C nginx.conf web Создаем файл nginx.conf и вставляем туда:

location / {
    index index.php;
    try_files $uri $uri/ /index.php?$args;
}

Пушим измненения, ждём пока проект задеплоится.

Optional

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

Для этого создаём файл post-install-cmd.sh и вставляем:

#!/bin/sh
yii migrate --interactive=0
ТУТ_КОМАНДЫ_ДЛЯ_РАБОТЫ_С_ФИКСТУРАМИ

В composer.json добавляем:

"scripts": {
    "post-install-cmd": [
        "sh post-install-cmd.sh"
    ]
}

Пушим изменения, смотрим на результаты билда.

Запускаем миграции самостоятельно

  • Проверяем, что в config/db.php лежат данные от БД Heroku
  • Запускаем миграции: yii migrate --interactive=0

Пруфы того, что есть коннект с БД:

Была создана миграция для постов:

Screenshot

Screenshot

Создан тестовый пост. Результаты вывода данных из бд:

Screenshot