Script によるアップデート
もしくは: 複数の Grav を一度にアップグレードします
このページは、 Deployer を使って、複数の Grav を簡単にアップグレードするためのガイドです。
ここで「複数」という言葉は、別々の Grav がインストールされている状況を意味し、 マルチサイトがインストールされていること は意味しません。
Grav の CLI を実行するため、各インストールの path を使いますが、それらの path を手打ちするようなことはしません。
Deployer のようなタスクランナーのメリットは、タスクの実行中、実行内容を正確に知らせてくれることです。
コマンドが実行されているサーバーからの出力も表示されます。
たとえば、次のような出力が Deployer からされます:
Executing task packages
GPM Releases Configuration: Stable
Found 8 packages installed of which 1 need updating
01. Email [v2.5.2 -> v2.5.3]
GPM Releases Configuration: Stable
Preparing to install Email [v2.5.3]
|- Downloading package... 100%
|- Checking destination... ok
|- Installing package... ok
'- Success!
Clearing cache
Cleared: /home/username/public_html/deployer/grav/cache/twig/*
Cleared: /home/username/public_html/deployer/grav/cache/doctrine/*
Cleared: /home/username/public_html/deployer/grav/cache/compiled/*
Touched: /home/username/public_html/deployer/grav/user/config/system.yaml
これくらい簡単に、 Deployer が Grav にすべてのパッケージをアップグレードするよう指示し、それにより Email プラグインが新しいバージョンにアップグレードされました。
前提条件
Grav と同様、 PHP v7.3.6 以上が必要です。
この要件は、コマンドライン(CLI)にも適用されます。
よって、複数のバージョンの PHP をインストールしている場合、正しいバージョンを使用してください。
デフォルトのバージョンをチェックするには、 php -v が使えます。
私の場合、 PHP 7.2.34 でしたので、そのままでは使えません。
共有サーバー環境では、 CLI でどのコマンドを使えばよいか、サーバー会社に確認してください。
私のケースでは、 php74 というコマンドで、 -v で実行すると PHP 7.4.12 が返ってきました。
これはつまり、すべての path に次のように php74 を付ける必要があることを意味します: php74 vendor/bin/dep list 。
いくつかのサーバー会社では、 CLI のデフォルトの PHP バージョンを選べるようです。
どのようにするかは、そのサーバー会社に問い合わせてください。
セットアップ
あなたのサーバーの公開用ルートディレクトリ( public_html/ や、 www/ )に、 deployer という名前のフォルダを作り、そこに入ってください。
このフォルダをベースにプロジェクトを進めていきます。
このディレクトリはパスワード保護する必要があります(手動の方法については DigitalOcean Guide をご覧ください。
もし利用可能であれば CPanel を使ってください)。
機能している Grav をインストールしておく必要があります。
また、 Composer も必要です。
サーバー会社によっては、 Composer がすでにインストールされていることもあります。
その場合、 composer -v によりインストールされているかチェック可能です。
インストールされていなければ、 SSH を使って(ルートディレクトリから)次のようにインストールできます:
export COMPOSERDIR=~/bin;mkdir bin
curl -sS https://getcomposer.org/installer | php -- --install-dir=$COMPOSERDIR --filename=composer
もしくは、 ローカルへのインストール を望む場合、public_html/deployer フォルダで、以下のようなコマンドを実行してください:
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php
php -r "unlink('composer-setup.php');"
ローカルへのインストールでは、ただの composer ではなく、 composer.phar で実行します。
それでは、 public_html/deployer フォルダにいる状態で、次のコマンドを実行して Deployer をインストールします:
composer require deployer/deployer
次に、同じフォルダのままで、 deploy.php ファイルを作成してください。
このファイルを利用して Deployer のそれぞれのタスクを実行します。
そのファイルに、以下のコードを、コピー & ペーストしてください:
<?php
namespace Deployer;
require 'vendor/autoload.php';
// Configuration
set('default_stage', 'production');
set(php, 'php56');
// Servers
localServer('site1')
->stage('production')
->set('deploy_path', '/home/username/public_html/deployer/grav');
desc('Backup Grav installations');
task('backup', function () {
$backup = run('{{php}} bin/grav backup');
writeln($backup);
});
desc('Upgrade Grav Core');
task('core', function () {
$self_upgrade = run('{{php}} bin/gpm self-upgrade -y');
writeln($self_upgrade);
});
desc('Upgrade Grav Packages');
task('packages', function () {
$upgrade = run('{{php}} bin/gpm update -y');
writeln($upgrade);
});
?>
設定
Deployer には、明示的にステージング環境が必要なので、 production に設定します。
さらに、特定の PHP バージョンを利用可能にするため、デフォルトで実行可能な PHP を設定します。
これは、実行可能な名前とできるほか、特定の PHP のバージョンを指定することもできます。
今回の設定では、次のようにしています:
// Configuration
set('default_stage', 'production');
set(php, 'php56');
デフォルトの PHP CLI バージョンが 5.6 以上なら、これを set(php, 'php'); に変更します。
サーバー
必要な分だけ、いくつでもサーバー/サイトのセットアップができます。
スクリプトは、それぞれ順番に実行されていきます。
ローカルインストールでも可能ですし、外部サーバーでも可能ですが、これはローカルセットアップなので、ここでは localServer を使います(より詳しい設定は、 Deployer/servers をご覧ください)。
以下が、複数サイトの場合の具体例です:
// Servers
localServer('site1')
->stage('production')
->set('deploy_path', '/home/username/public_html/deployer/grav1');
localServer('site2')
->stage('production')
->set('deploy_path', '/home/username/public_html/deployer/grav2');
localServer('site3')
->stage('production')
->set('deploy_path', 'C:\caddy\grav1');
localServer('site4')
->stage('production')
->set('deploy_path', 'C:\caddy\grav2');
ここでは、インストール先の絶対パスを使用していることに注目してください。
SSH での接続先でパスがどのように解釈されるかは、場合によりけりです。
これはつまり、フルパスなら Deployer が正しく解釈してくれるので、サーバー上ではフルパスを利用するのが良いですが、 HOMEDIR が設定されていれば、チルダを使って次のように表現することもできます: ~/public_html/deployer/grav1
タスク
3つのタスクが現在設定されています: backup, core, そして packages です。
php vendor/bin/dep backup を実行すると、それぞれのサイトのバックアップが作成されます。
それらは、 deploy_path/backup/BACKUP.zip で利用でき、この deploy_path は、サーバー用に設定したパスです。
php vendor/bin/dep core を実行すると、 Grav 自身を --all-yes オプションで Yes/No の質問をすべてスキップしながらアップグレードします。
php vendor/bin/dep packages の実行も同じで、すべてのプラグインとテーマをアップグレードします。
まとめ
これで、すべての定義したサイトを、順番にタスクを実行することで、簡単にアップグレードできるようになりました。
最初に public_html/deployer/ フォルダに入り、それから必要なコマンドを実行します:
php vendor/bin/dep backup
php vendor/bin/dep core
php vendor/bin/dep packages
これにより、それぞれのサイトのバックアップを作り、 Grav 自身のアップグレードをし、さらにプラグインとテーマのアップグレードもできます。