Понадобилось мне прикрутить к проекту инструмент для деплоя. Поскольку я использую php, я остановился на Magallanes. Я работаю через Composer, поэтому делаем так
php composer.phar require "andres-montanez/magallanes:*"Выносим mage в корень проекта, для этого создаем файл mage следующего содержания:
#!/usr/bin/env phpИ разрешаем его запускать
<?php
$baseDir = __DIR__ . '/vendor/andres-montanez/magallanes';
define('MAGALLANES_VERSION', '1.0.3');
define('MAGALLANES_DIRECTORY', $baseDir);
require_once __DIR__ . '/vendor/autoload.php';
// Clean arguments
array_shift($argv);
// Run Magallanes
$console = new Mage\Console;
$exitCode = $console->run($argv);
exit((integer) $exitCode);
chmod +x ./mageДальше делаем все по инструкции. Настраиваем проект
Добавляем конфигурацию для деплояmage init --name="My fantastic app" --email="notifications@my.app"
mage add environment --name="production" --enableReleasesСобственно сам деплой
Основные настройки проекта хорошо расписаны на сайте magephp.com, но есть пара моментов, с которыми мне пришлось разбираться.mage deploy to:production
После деплоя устанавливаем особые разрешения на файлы/папки
Это бывает нужно, чтобы веб-сервер имел право писать скажем логи.#productionДля установки разрешений используем команду filesystem/apply-facls.
deployment:
user: vlad
from: ./
to: /opt/www/promokashka_com
excludes:
- .idea
- composer.phar
- mage
- node_modules
- web/assets
- runtime
- config/_local.php
releases:
enabled: true
max: 10
symlink: current
directory: releases
hosts:
- promokashka.com:2222
tasks:
pre-deploy:
- composer/install
- composer/generate-autoload
on-deploy:
post-release:
- filesystem/apply-facls:
recursive:true
acl_param: "o:rwx"
folders: [ runtime, web/assets ]
После деплоя нужно создать символьную ссылку на каталог или файл.
Может применяться, для линковки конфига с настройками доступа к базе данных.
#productionТут я прилинковываю каталоги runtime, web/assets и файл config/_local.php
deployment:
user: vlad
from: ./
to: /opt/www/promokashka_com
excludes:
- .idea
- composer.phar
- mage
- node_modules
- web/assets
- runtime
- config/_local.php
releases:
enabled: true
max: 10
symlink: current
directory: releases
hosts:
- promokashka.com:2222
tasks:
pre-deploy:
- composer/install
- composer/generate-autoload
on-deploy:
post-release:
- filesystem/apply-facls:
recursive:true
acl_param: "o:rwx"
folders: [ runtime, web/assets ]
- filesystem/link-shared-files:
linked_folders:
- web/assets
- runtime
linked_files:
- config/_local.php
shared: shared
linking_strategy: absolute
Использованием символьных ссылок для папок assets и runtime и файлов _local.php имеет интересное применение. Фактически это те части приложения, которые будут постоянны для всех релизов (или будут меняться редко). В assets можно хранить объединенные и сжатые версии css & js файлов и ОЧЕНЬ ЖЕЛАТЕЛЬНО чтобы старые версии какое-то время там присутствовали тоже. Каталог runtime часто служит как хранилище для лог файлов и через символьные ссылки лог файлы не будут теряться при деплое нового релиза. Однако для полного счастья нам потребуется механизм работы с этими постоянными данными. В стандартной поставке magallanes его нет, пришлось написать.
<?php
namespace Task;
use Mage\Task\AbstractTask;
class SharedCopy extends AbstractTask
{
public function getName()
{
return 'Deploy shared files';
}
public function run()
{
$deployToDirectory = $this->getConfig()->deployment('to');
$files = $this->getParameter('files', []);
$shared = $this->getParameter('shared', 'shared');
foreach ($files as $file) {
$command =
'scp ' . $this->getConfig()->getHostIdentityFileOption() . '-P ' . $this->getConfig()->getHostPort()
. ' ' . $file . ' ' . $this->getConfig()->deployment('user') . '@' . $this->getConfig()->getHostName()
. ':' . $deployToDirectory . '/' . $shared . '/' . preg_replace('/\/([^\/]*)$/', '', $file);
$this->runCommandLocal($command);
}
return true;
}
}
Применение для сжатых файлов css& js которые будут лежать в assets
#productionОднако это не будет работать, если магелан подключен через composer, нужно подправить автолоадинг composer'а
deployment:
user: vlad
from: ./
to: /opt/www/promokashka_com
excludes:
- .idea
- composer.phar
- mage
- node_modules
- web/assets
- runtime
- config/_local.php
releases:
enabled: true
max: 10
symlink: current
directory: releases
hosts:
- promokashka.com:2222
tasks:
pre-deploy:
- composer/install
- composer/generate-autoload
on-deploy:
post-release:
- filesystem/link-shared-files:
linked_folders:
- web/assets
- runtime
linked_files:
- config/_local.php
shared: shared
linking_strategy: absolute
- shared-copy:
files:
- web/assets/all*
добавляем в composer.json
"autoload": {и обновляемся командов
"psr-4":{ "Task\\" : ".mage/tasks"}
}
php composer.phar update
Комментариев нет:
Отправка комментария