🐥

Deployerを使ってEC-CUBE4.2をデプロイ

2023/08/17に公開

前提条件

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');


参考文献

Deployer公式
EC-CUBE4公式ドキュメント

Discussion