Grav のインストールとマルチサイト構築

要件としてPHPのversion 5.5.9以降が必要です。

最近のレンタルサーバーであればまあ大丈夫でしょう。

ローカルサーバーやVPSの場合は適宜対応させてください。

githubからインストールする方法もありますが、マルチサイト構成にしたいのでダウンロードページからzipファイルを落としてきます。

Download Grav

コアファイルのみのものとadmin関連プラグイン同梱のものがあるのでadmin込みのファイルを選択。

適当に解凍して中身のフォルダをserverにアップします。
※ファイル数が多くFTPでアップするのはきついのでzipで上げてサーバー上で解凍かサーバー上でdownloadするのがいいかもしれません。ちなみに私はFTPでちまちまアップして後悔しましたけどね<(`^´)>

アップしたrootフォルダ名(たぶんgrav-admin)をgravなどわかりやすい名前にrename。

マルチサイトに対応させるため、document root(gravフォルダの直下、index.phpと同階層)にsetup.phpを設置する必要があります。 setup.phpは自分で用意します。中身は公式のマルチサイト用Snippetをそのまま利用します。

sub-domain方式かsub-directry方式か選べるのでsub-domain方式を使います。

<?php
/**
 * Multisite setup for subsites accessible via sub-domains.
 *
 * DO NOT EDIT UNLESS YOU KNOW WHAT YOU ARE DOING!
 */

use Grav\Common\Utils;

// Get subsite name from sub-domain
$environment = isset($_SERVER['HTTP_HOST'])
    ? $_SERVER['HTTP_HOST']
    : (isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : 'localhost');
// Remove port from HTTP_HOST generated $environment
$environment = strtolower(Utils::substrToString($environment, ':'));
$folder = "sites/{$environment}";

if ($environment === 'localhost' || !is_dir(ROOT_DIR . "user/{$folder}")) {
    return [];
}

return [
    'environment' => $environment,
    'streams' => [
        'schemes' => [
            'user' => [
               'type' => 'ReadOnlyStream',
               'prefixes' => [
                   '' => ["user/{$folder}"],
               ]
            ]
        ]
    ]
];

保存したsetup.phpは、document root(gravフォルダの直下、index.phpと同階層)に設置しましょう。

次にgravフォルダ配下のuserフォルダにsitesフォルダを作成。

sitesフォルダ内にアクセスするサイトのドメインでフォルダをつくります。
※うちだったらwww.mayonakanouta.comってフォルダをつくる

作ったサイトのフォルダ内に、userフォルダ配下のconfigとpagesフォルダをコピーします。

さらに作ったサイトのフォルダ内に、userフォルダ配下のpluginsとthemesフォルダをシンボリックリンクで配置します
※シンボリックリンクにするのはメンテナンス性向上のため。サーバーの管理上シンボリックリンクできない場合はconfigフォルダなどと同様にそのままuserフォルダ配下からコピーでOK。ただし、その場合は各サイトごとにプラグインやテーマを管理しなければならなくなります。

設定後のgrav配下はこんな感じ
Directory List

ここまでできたら、サイトのdocument rootをgravフォルダ直下に設定してhttp://[yoursitedomain]/admin にアクセスすれば管理画面の初期設定ページが表示されます。

パーミッション関連でエラーが出るようならこちらを参考に設定を見直しましょう。環境にもよると思いますが、要はphpの実行ユーザーにパーミッションを与えとけ(実行時にapacheになってるなら所有者をapacheにするのが楽)って感じです。

できたサイトに無事ログイン出来たらサイトフォルダ配下にaccountsフォルダが追加されます。2つ目以降は作ったサイトフォルダをパーミッション含めてまるごとコピーすれば手間が省けます。ログインする場合はコピー元サイトの管理者(admin)アカウントとパスワードでログインできますので、気になる方はログイン後にパスワードなりを変更してください。

次回は(あれば)、ログイン後の設定などを書こうかと思ってます(。・ω・)ノ゙

2018-03-06 追記

マルチサイト構成時に、[grav root directory]/user/sites/[各サイトのドメインフォルダー]をつくり、その中のpluginsとthemesフォルダをシンボリックリンクで配置しますが、この状態だと、gravシステムは更新できても、プラグインとテーマの更新ができません(パーミッションエラーで失敗する)。

プラグインとテーマは手動でアップデートしていたのですが、これが微妙にめんどくさい(ファイルをひとつづつ落としてきてアップしなおす作業が必要)。

なので解決策はないものかと模索しておりましたところ、単純な方法で解決しました。

マルチサイトの各ドメインでアクセスすると、document root にある setup.php に従って [grav root directory]/user/sites/[各サイトのドメインフォルダー] に振り分けられるのですが、ここで[grav root directory]/user/sites/配下に、アクセスしたドメインのフォルダがなかった場合、[grav root directory]/user が利用されます。

つまり、どれか一つ管理用ドメインを用意して、そのドメインのサイトフォルダは作成せず、シングルサイトのように運用します。この方法で、管理用ドメインにアクセスすれば、WEBサイト上ですべての更新ができるようになります。まあシングルサイトだと考えればあたりまえっちゃ当たり前ですね( ゚д゚)

わざわざ管理用ドメインを用意するのがあれな人は、適当なドメインをhostsなどで設定してアクセスするのもいいかもしれません。その場合もサーバー側のドメイン設定は[grav root directory]をdocument rootに設定してください。

いやあ、盲点というか、コロンブスの卵というか、開発者さんはわかってたのかもしれないですが、手探りでやってると右往左往した挙句、これはないだろうなーとか見過ごしてた方法であっさり解決…なんてことがよく起きるものです(=゚ω゚)ノ

Last edited: 2024-07-31 00:53