Развёртывание в fortrabbit

Развёртывание в fortrabbit

Эта пошаговая статья описывает, как развёртывать приложение Symfony в fortrabbit. Вы можете прочитать больше об использовании Symfony с fortrabbit в официальном справочнике установки Symfony fortrabbit.

Установка fortrabbit

До того, как начать, вам нужно было сделать несколько вещей со стороны fortrabbit:

  • Зарегистрироваться;
  • Добавить в вашу учётную запись SSH-ключ (чтобы развёртывать через Git);
  • Создать приложение.

Подготовка вашего приложения

Вам не нужно менять код, чтобы развернуть приложение Symfony в fortrabbit. Но это требует минимальных исправлений его конфигурации.

Конфигурация ведения записей (логов)

По умолчанию, Symfony записывает логи в файл. Измените файл app/config/config_prod.yml, чтобы перенаправить его к error_log:

  • YAML
    1
    2
    3
    4
    5
    6
    # app/config/config_prod.yml
    monolog:
        # ...
        handlers:
            nested:
                type: error_log
    
  • XML
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    <!-- app/config/config_prod.xml -->
    <?xml version="1.0" encoding="UTF-8" ?>
    <container xmlns="http://symfony.com/schema/dic/services"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:monolog="http://symfony.com/schema/dic/monolog"
        xsi:schemaLocation="http://symfony.com/schema/dic/services
            http://symfony.com/schema/dic/services/services-1.0.xsd
            http://symfony.com/schema/dic/monolog
            http://symfony.com/schema/dic/monolog/monolog-1.0.xsd">
    
        <monolog:config>
            <!-- ... -->
            <monolog:handler name="nested" type="error_log" />
        </monolog:config>
    </container>
    
  • PHP
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // app/config/config_prod.php
    $container->loadFromExtension('monolog', array(
        // ...
        'handlers' => array(
            'nested' => array(
                'type' => 'error_log',
            ),
        ),
    ));
    

Конфигурация доступа БД и обработчика сессии

Вы можете использовать секреты приложения fortrabbit, чтобы достичь сертификатов вашей базы данных. Создайте файл ``app/config/config_prod_secrets.php``со следующим содержимым:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// получить путь к файлу secrects.json
$secrets = getenv("APP_SECRETS")
if (!$secrets) {
    return;
}

// прочитать файл и дешифровать json в массив
$secrets = json_decode(file_get_contents($secrets), true);

// установить параметры БД в контейнере
if (isset($secrets['MYSQL'])) {
    $container->setParameter('database_driver', 'pdo_mysql');
    $container->setParameter('database_host', $secrets['MYSQL']['HOST']);
    $container->setParameter('database_name', $secrets['MYSQL']['DATABASE']);
    $container->setParameter('database_user', $secrets['MYSQL']['USER']);
    $container->setParameter('database_password', $secrets['MYSQL']['PASSWORD']);
}

// проверить наличие компонента Memcache
if (isset($secrets['MEMCACHE'])) {
    $memcache = $secrets['MEMCACHE'];
    $handlers = array();

    foreach (range(1, $memcache['COUNT']) as $num) {
        $handlers[] = $memcache['HOST'.$num].':'.$memcache['PORT'.$num];
    }

    // применить настройки ini
    ini_set('session.save_handler', 'memcached');
    ini_set('session.save_path', implode(',', $handlers));

    if ("2" === $memcache['COUNT']) {
        ini_set('memcached.sess_number_of_replicas', 1);
        ini_set('memcached.sess_consistent_hash', 1);
        ini_set('memcached.sess_binary', 1);
    }
}

Убедитесь в том, что этот файл импортирован в основной файл конфигурации:

  • YAML
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    # app/config/config_prod.yml
    imports:
        - { resource: config.yml }
        - { resource: config_prod_secrets.php }
    
    # ..
    framework:
        session:
            # установить handler_id как null, чтобы использовать обработчика сессии по умолчанию
            № из  php.ini (memcache)
            handler_id:  ~
    # ..
    
  • XML
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <!-- app/config/config_prod.xml -->
    <?xml version="1.0" encoding="UTF-8"?>
    <container xmlns="http://symfony.com/schema/dic/services"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:framework="http://symfony.com/schema/dic/symfony"
        xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd
            http://symfony.com/schema/dic/symfony http://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
    
        <imports>
            <import resource="config.xml" />
            <import resource="config_prod_secrets.php" />
        </imports>
    
        <!-- .. -->
        <framework:config>
            <!-- .. -->
            <framework:session save-path="null" />
        </framework:config>
    </container>
    
  • PHP
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    // app/config/config_prod.php
    $loader->import('config.php');
    $loader->import('config_prod_secrets.php');
    
    $container->loadFromExtension('framework', array(
        'session' => array(
            'handler_id' => null,
        ),
    ));
    
    // ...
    

Конфигурация окружения в панели инструментов

PHP-настройки

PHP-версия и включённые расширения можно сконфигурировать под PHP-настройками вашего приложения в рамках панели инструментов fortrabbit.

Переменные окружения

Установите переменную окружения SYMFONY_ENV как prod, чтобы убедиться, что будут загружены правильные файлы конфигурации. Переменные ENV ьоже можно сконфигурировать в панели инструментов fortrabbit.

Корень документа

Корень документа можно сконфигурировать для каждого пользовательского домена, который вы устанавливаете для вашего приложения. По умолчанию это /htdocs, но для Symfony вы скорее всего захотите изменить его на /htdocs/web. Вы также делаете это в панели инструментов fortrabbit в настройках Domain.

Развёртываение в fortrabbit

Предполагается, что ваш базовый код находится под контролем версий Git, а зависимости обрабатываются посредоством Composer (локально).

Каждый раз, когда вы обращаетесь к fortrabbit, запускается установка composer до того, как ваш код будет развёрнут. Чтобы отточить поведение развёртывания, поместите файл развёртывания fortrabbit.yml (необязательный) в корень проекта.

Добавьте fortrabbit как удалённое дополнение Git и добавьте ваши изменения конфигурации:

1
2
3
$ git remote add fortrabbit [email protected]:<your-app>.git
$ git add composer.json composer.lock
$ git add app/config/config_prod_secrets.php

Фиксировать и запустить

1
2
$ git commit -m 'fortrabbit config'
$ git push fortrabbit master -u

Note

Замените <your-app> именем вашего приложения fortrabbit.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Фиксация получена, начинается построение главной ветви

–––––––––––––––––––––––  ∙ƒ  –––––––––––––––––––––––

П О С Т Р О Е Н И Е

Checksum:
   def1bb29911a62de26b1ddac6ef97fc76a5c647b

Файл развёртывания:
   fortrabbit.yml

Предварительный скрипт:
   не найден
   0ms

Composer:
- - -
Загрузка хранилищ компоновщика с информацией пакетов
Установка зависимостей (включая require-dev) из файла блокировки
Нет установок или обновлений
Генерирование файлов автозагрузки

- - -
172ms

Пост-скрипт:
   не найден
   0ms

Р Е Л И З

Упаковка:
   930ms

Ревизия:
   1455788127289043421.def1bb29911a62de26b1ddac6ef97fc76a5c647b

Размер:
   9.7MB

Загрузка:
   500ms

Построение и релиз сделаны за 1625ms, в очереди на финальное развёртывание.

Note

Первый git push занимает намного больше времени, так как скачиваются все зависимости компоновщика. Все последующие развёртывания будут проходить в течение секунд.

Вот и всё! Ваше приложение развёртывается в fortrabbit. Больше информации о миграциях и туннелировании БД можно найти в документации fortrabbit.

Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.