LoginSignup
4
4

More than 1 year has passed since last update.

LandoでDrupal 9のマルチサイトを起動する

Posted at

Drupalでは、マルチサイトと呼ばれる、単一のコードベースから複数のサイトを提供できる機能が用意されています。各サイトは独立したデータベース、構成設定、ファイルを持ちます。コードベースが共通化されていることによって次のことが実現できます。

  • モジュール、テーマの一括配置
  • セキュリティアップデートの一括適用

同じモジュール、テーマを配布しながら、設定やコンテンツは各サイトごとに持てるので、類似するサイトをある程度柔軟性を持ちながら建てることができます。グローバル企業の各現地法人ウェブサイトなどがユースケースとしてよく挙げられます。

設定方法

Dockerベースのローカル開発環境を構築できるLandoを使用して、ローカル環境にマルチサイトを起動します。

Drupalプロジェクトの作成

ローカル環境で composer create-project を実行し、Drupalプロジェクトを作成する。後々drushコマンドを使用してサイトをインストールするのでdrushコマンドもインストールする。

$ composer create-project drupal/recommended-project my-multi-site
$ cd my-multi-site
$ composer require drush/drush

各設定ファイルの作成

次の4つのファイルを作成していく。

  • .lando.yml
  • drush/sites/site1.site.yml
  • drush/sites/site2.site.yml
  • web/sites/sites.php

.lando.ymlを次の内容で作成する。

.lando.yml
name: my-multi-site
recipe: drupal9
config:
  webroot: web
proxy:
  appserver:
    - site1.lndo.site
    - site2.lndo.site
services:
  site1_db:
    type: mysql:5.7
    portforward: 33068
  site2_db:
    type: mysql:5.7
    portforward: 33069

Drushで簡単にマルチサイトを操作できるようにするために、Drushのサイトエイリアスファイルを作成する。まず drush/sites ディレクトリを作成する。

$ mkdir -p drush/sites

YAMLファイルのrootキーには、Drupalのプロジェクトルートを指定する。今回はlandoで作成した環境に対してdrushコマンドを実行するので、ローカル環境のプロジェクトルートではなく、lando環境内のプロジェクトルートを指定する。

drush/sites/site1.site.yml
local:
  root: /app
  uri: 'http://site1.lndo.site'
  paths:
   - files: sites/site1/files
drush/sites/site2.site.yml
local:
  root: /app
  uri: 'http://site2.lndo.site'
  paths:
   - files: sites/site2/files

web/sites/sites.phpファイルを作成する。

web/sites/sites.php
<?php
$sites['site1.lndo.site'] = 'site1';
$sites['site2.lndo.site'] = 'site2';

web/sites/site1、web/sites/site2ディレクトリを作成する。

$ mkdir web/sites/site1
$ mkdir web/sites/site2

各サイトの起動

lando環境を起動する。

$ lando start

# ...省略...

Here are some vitals:

 NAME            my-multi-site                              
 LOCATION        /Users/hikaru.maruyama/src/test/my-multi-site 
 SERVICES        appserver, database, site1_db, site2_db    
 APPSERVER URLS  https://localhost:54934                    
                 http://localhost:54935                     
                 http://site1.lndo.site/                    
                 https://site1.lndo.site/                   
                 http://site2.lndo.site/                    
                 https://site2.lndo.site/

drushコマンドで site1 の初期インストールを行う。@site1.local と指定することで、 site1.site.yml で設定したDrushのサイトエイリアスが利用される。

$ lando drush @site1.local site:install standard \
--locale=ja \
--db-url=mysql://mysql:mysql@site1_db:3306/database \
--sites-subdir=site1

You are about to:
 * Create a sites/site1/settings.php file        
 * DROP all tables in your 'database' database.
 Do you want to continue? (yes/no) [yes]:
 > yes

# ...省略...

[success] Installation complete.  User name: admin  User password: WALZ8wD47z

http://site1.lndo.site にアクセスすると、初期インストールが完了したDrupalサイトが作成できていることがわかる。また、web/sites/site1ディレクトリにsettings.phpファイルとfilesディレクトリが作成されていることがわかる。

site2の初期インストールも同様に行う。マルチサイトで異なるデータベースが使用されるようにしたいので、データベースの構成をsite1と同じ設定にしないように気をつける。

$ lando drush @site2.local site:install standard \
--locale=ja \
--db-url=mysql://mysql:mysql@site2_db:3306/database \
--sites-subdir=site2

ちなみにデータベース名やユーザー名は lando info コマンドで確認できる。特に設定していなければ、

  • データベース名:database
  • ユーザー名:mysql
  • パスワード:mysql

となる。

$ lando info

# ...省略...

{ service: 'site1_db',
    urls: [],
    type: 'mysql',
    healthy: true,
    internal_connection: { host: 'site1_db', port: '3306' },
    external_connection: { host: '127.0.0.1', port: '33068' },
    healthcheck: 'bash -c "[ -f /bitnami/mysql/.mysql_initialized ]"',
    creds: { database: 'database', password: 'mysql', user: 'mysql' },

以上の手順で、コードベースを共有しながら異なるDB、ファイル、設定を持つサイトを起動することができる。

参考サイト

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4