🐥
Deployerを使ってEC-CUBE4.2をデプロイ
前提条件
EC-CUBE4.2
Deployerをインストールする
composer require --dev deployer/deployer
Deployerの初期設定
php vendor/bin/dep init
デプロイ設定を行う
シェアファイル
add('shared_files', ['.env', '.htaccess']);
add('shared_dirs', ['html/user_data', 'html/upload', 'app/Plugin']);
vendor処理前処理
before('deploy:vendors', 'ec-cube-default');
task('ec-cube-default', function () {
run('cd {{release_path}} && wget https://raw.githubusercontent.com/EC-CUBE/ec-cube/4.2/composer.json -O composer.json \
&& wget https://raw.githubusercontent.com/EC-CUBE/ec-cube/4.2/composer.lock -O composer.lock \
&& COMPOSER=composer.json composer install --no-scripts');
});
スキーマアップデート, マイグレーション処理
after('ec-cube-default', 'doctrine-schema-update');
task('doctrine-schema-update', function () {
/** @see https://doc4.ec-cube.net/customize_entity */
run('cd {{release_path}} && bin/console eccube:generate:proxies \
&& bin/console cache:clear --no-warmup \
&& bin/console doctrine:schema:update --dump-sql --force
');
});
// マイグレーションを実行
after('doctrine-schema-update', 'database:migrate');
必要ライブラリのインストール
// composer require
after('database:migrate', 'add-composer');
task('add-composer', function () {
// run('cd {{release_path}} && composer require xyz);
// AWSのライブラリ
run('cd {{release_path}} && composer require aws/aws-sdk-php');
});
task('deploy:vendors', function () {
// Git管理内のcomposer.jsonではインストールしない
});
ファイル・フォルダのパーミッション設定
task('folder-permission', function () {
run('chmod 0707 {{release_path}}');
run('cd {{release_path}} && chmod -R 0707 app/');
run('cd {{release_path}} && chmod -R 0707 app/Plugin/');
run('cd {{release_path}} && chmod -R 0707 app/proxy/');
run('cd {{release_path}} && chmod -R 0707 app/template/');
run('cd {{release_path}} && chmod -R 0707 html/');
run('cd {{release_path}} && chmod -R 0707 var/');
run('cd {{release_path}} && chmod -R 0707 vendor/');
run('cd {{release_path}} && chmod 0606 composer.json');
run('cd {{release_path}} && chmod 0606 composer.lock');
});
after('deploy:symlink', 'folder-permission');
deployer.php
<?php
namespace Deployer;
require 'recipe/symfony.php';
// Project name
set('application', 'my-application');
// Project repository
set('repository', 'git@github.com:xxx/xxx.git');
// [Optional] Allocate tty for git clone. Default value is false.
set('git_tty', false);
set('keep_releases', 1);
// Shared files/dirs between deploys
add('shared_files', ['.env', '.htaccess']);
add('shared_dirs', ['html/user_data', 'html/upload', 'app/Plugin']);
// Writable dirs by web server
add('writable_dirs', []);
set('allow_anonymous_stats', false);
// Hosts
host('xxx')
// Tasks
// NOTE: EC-CUBEのデフォルトcomposerインストール
before('deploy:vendors', 'ec-cube-default');
task('ec-cube-default', function () {
run('cd {{release_path}} && wget https://raw.githubusercontent.com/EC-CUBE/ec-cube/4.2/composer.json -O composer.json \
&& wget https://raw.githubusercontent.com/EC-CUBE/ec-cube/4.2/composer.lock -O composer.lock \
&& COMPOSER=composer.json composer install --no-scripts');
});
// 初回処理
//after('ec-cube-default', 'ec-cube-install');
//task('ec-cube-install', function () {
// run('cd {{release_path}} && bin/console eccube:install
// ');
//});
// NOTE: スキーマアップデート
after('ec-cube-default', 'doctrine-schema-update');
task('doctrine-schema-update', function () {
/** @see https://doc4.ec-cube.net/customize_entity */
run('cd {{release_path}} && bin/console eccube:generate:proxies \
&& bin/console cache:clear --no-warmup \
&& bin/console doctrine:schema:update --dump-sql --force
');
});
// マイグレーションを実行
after('doctrine-schema-update', 'database:migrate');
// composer require
after('doctrine-schema-update', 'add-composer');
task('add-composer', function () {
// run('cd {{release_path}} && composer require xyz);
// AWSのライブラリ
run('cd {{release_path}} && composer require aws/aws-sdk-php');
});
task('deploy:vendors', function () {
// Git管理内のcomposer.jsonではインストールしない
});
task('build', function () {
run('cd {{release_path}} && npm install && gulp');
});
// [Optional] if deploy fails automatically unlock.
after('deploy:failed', 'deploy:unlock');
after('deploy:symlink', 'build');
task('folder-permission', function () {
run('chmod 0707 {{release_path}}');
run('cd {{release_path}} && chmod -R 0707 app/');
run('cd {{release_path}} && chmod -R 0707 app/Plugin/');
run('cd {{release_path}} && chmod -R 0707 app/proxy/');
run('cd {{release_path}} && chmod -R 0707 app/template/');
run('cd {{release_path}} && chmod -R 0707 html/');
run('cd {{release_path}} && chmod -R 0707 var/');
run('cd {{release_path}} && chmod -R 0707 vendor/');
run('cd {{release_path}} && chmod 0606 composer.json');
run('cd {{release_path}} && chmod 0606 composer.lock');
});
after('deploy:symlink', 'folder-permission');
Discussion