メニュー

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 自身のアップグレードをし、さらにプラグインとテーマのアップグレードもできます。