Деплой php+MySQL на heroku

в 11:41, , рубрики: deploy, mysql, php, разработка

Всем доброго времени суток. Хочу поделиться с вами своим опытом развертывания php+mysql приложения на сервисе heroku. Если вы первый раз о таком слышите, вам сюда.

Поехали

Итак, представим, что у нас есть уже готовое php+mysql приложение. Для начала регистрируемся здесь. На почту придет письмо с подтверждением регистрации. Далее переходим по ссылке, вводим пароль и подтверждение, жмем save. Первый этап пройден, идем дальше.

После успешной регистрации сервис предлагает нам скачать клиент. Естественно, для каждой ОСи свой вариант установки. Далее будем рассматривать пример для UNIX.

Пишем в консоли:

$ wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh

С установкой не должно возникнуть проблем. Также нам необходим установленный и настроенный git, об этом я писать не буду, на просторах интернета полно информации об этом.

После установки нужно войти в приложение:

$ heroku login

Вводим email и пароль. Приложение должно вас авторизовать и автоматически загрузить ваш публичный ssh ключ. Если этого не произошло, заходим в свой аккаунт (https://dashboard.heroku.com/account) и добавляем публичный ssh:

Деплой php+MySQL на heroku

Чтобы посмотреть публичный ssh, пишем в консоли:

$ cat ~/.ssh/id_rsa.pub

Ключи также можно добавить с помощью команды:

$ heroku keys:add

Итак, все готово для того, чтобы создать свое первое «heroku приложение». Заходим в директорию, где хранится наше приложение, и пишем в консоли:

$  heroku create

В результате вы должны увидеть что-то похоже на это:

Деплой php+MySQL на heroku

Далее делаем push нашего приложения в heroku master:

$ git push heroku master

После чего пишем в консоли:

$ heroku open

Наш сайт откроется в браузере. Если бы мы не юзали mysql, то на этом все бы и закончилось, но нам придется еще чуть попотеть. Скорее всего, на экране полезли ошибки о том, что невозможно соединиться с mysql. Также ошибки можно посмотреть, открыв логи:

$ heroku logs

Для работы с mysql будем использовать аддон ClearDB. Чтобы его установить, для начала необходимо заполнить данные о вашей кредитной карте на странице dashboard.heroku.com/account:

Деплой php+MySQL на heroku

Если этого не сделать, при установке ClearDB вы будете видеть ошибку:

Adding cleardb:ignite on dry-taiga-2649... 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

Ниже команда для установки ClearDB:

$ heroku addons:add cleardb:ignite

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

$ heroku config

Получим результат в виде:

CLEARDB_DATABASE_URL:mysql://USER:PASSWORD@HOSTNAME/DBASENAME?reconnect=true

Доступы к базе в php можно получить следующим образом:

    $url=parse_url(getenv("CLEARDB_DATABASE_URL"));

    $server = $url["host"];
    $username = $url["user"];
    $password = $url["pass"];
    $db = substr($url["path"],1);

    mysqli_connect($server, $username, $password);


    mysqli_select_db($db);

Чтобы каждый раз не менять конфиг для локального сайта и heroku, можно добавить проверку:

if ($_SERVER['SERVER_NAME'] == "thawing-island-242342379.herokuapp.com") {
	$url = parse_url(getenv("CLEARDB_DATABASE_URL"));
	$host = $url["host"];
	$username = $url["user"];
	$password = $url["pass"];
	$dbname = substr($url["path"], 1);
} else {
	$host = 'localhost';
	$dbname = 'db';
	$username = 'user';
	$password = '123';
}

Было бы правильней это сделать через APPLICATION_ENV, но я не нашел информации о том, как это сделать. Если кто-то в курсе — напишите.

Почти все готово. Осталось добавить в корень файл composer.json:

{
    "require": {
        "ext-mysql": "*"
    }
}

Если такой уже есть, нужно просто дописать "ext-mysql": "*"

Пишем в консоли:

$ git add .
$ git commit -am "added db credentials"
$ git push heroku master
$ heroku open

Открывается браузер, видим рабочий сайт.

Буду рад если этот «мануал» кому то поможет.

Всем спасибо з а внимание.

Автор:

Источник

Поделиться

* - обязательные к заполнению поля