メインコンテンツに移動

メインナビゲーション

  • ホーム
  • サイトマップ
  • ビデオ
  • ご連絡

パンくず

  • ホーム
  • Drupalのソースを共有する複数サイトの構築

Drupalのソースを共有する複数サイトの構築

drupal
customization
development
module usage

やりたいこと:一つDrupalのソースで複数のサイト(複数のドメイン)を構築したいです

  • Drupalを用いて複数のサイト(ドメイン)を構築する場合、一つサイト(ドメイン)ごとに一つのDrupalソースで構築することがもちろん問題はありません
  • Drupalソースが分散すると、バージョンアップ、バグ管理などの作業が大変になります
  • 当然一つのDrupalソースの元で複数のサイト(ドメイン)の構築が必要となります
    • 一ドメイン ⇒ Drupalソース ⇒ 共有DB
    • 一ドメイン ⇒ Drupalソース ⇒ 独立DB
  • Drupalでは複数のサイト(ドメイン)への対応をしています

sitesディレクトリの下にドメインごとの子ディレクトリを作成してマルティサイトを構築します

  • 複数のドメイン名をDrupalのルートディレクトリに同期します(例:シンボリックリンクでドメイン名をディレクトリと同期します)
    • 例: old-pine.net をDrupalのルートディレクトリにシンボリックリンクで同期します
  • Drupalのルートディレクトリの下に sites ディレクトリがあります。sitesの下に各メイン名に同期したいディレクトリを作成します
    • 例:sites/pine を作成します
  • sites/sites.phpファイルでドメイン名をディレクトと同期設定を行います
    • 例: 'old-pine.net' => 'pine'  (書き方: ドメイン名 => ディレクトリ名)
       $sites = array(
          'old-pine.net' => 'pine',
       );
      
  • 新規作成したディレクトの下にサイトのインストール設定ファイル(settings.php)の作成
    • 例:sites/pine/settings.phpを作成します
    • settings.phpの内容はsites/pine/default.settings.phpのコピーで良いです(サイト新規作成する場合)
  • 追加したドメイン名でサイトをアクセスして、新規サイトができたことを確認します
apache
linux
command

やりたいこと:レンタルサーバーで申請したドメイン名を特定なディレクトリに同期するシンボリックリンク作成したいです

  • レンタルサーバー(例:valueserver)で申請したドメイン名を特定なディレクトに同期するツールが提供されています
  • 同期ツールを利用するのは便利だが、設定が誤ると同期先のディレクトリのファイルがすべて削除されてします危険があります
  • 特に、この操作がよく行うことではなく、誤って設定する確率は実は高そうです(実際に設定を誤って、同期先のファイルが消されてしまう事項がありました)

安全のため、シンボリックリンク作成コマンドでディレクト同期をしたほうがよいです

  • シンボリックリンク作成:
    • public_htmlディレクトリ(apacheではdocument root)に入ります
    • コマンド: ln -s [ディレクト名] [ドメイン名] (例:ln -s drupal7 old-pine.net)
    • コマンド: ls -l で生成したシンボリックリンクを確認します(例: old-pine.net -> pine)
  • シンボリックリンクの削除
    • コマンド:unlink [ドメイン名] (例:unlink old-pine.net)
    • コマンド:ls -l でドメイン名の同期先が消えたことを確認します

安全のため、コマンド(rm)でシンボリックリンクを削除しないこと

  • シンボリックリンクを削除するのはコマンド(rm)できますが、誤って指定すると、同期先のディレクトリの内容を削除していまう危険があります
  • シンボリックリンクを削除するには、コマンド(unlink)を使用すべきです
drupal
php
development
bug
syntax highlighter

別々のDrupal(バージョン7)ソースのサイトを一つ共有ソースのところにサイト移行

  • 複数のDrupalソースで構築した複数のウェブサイトがありまして、Drupalソースのバージョンアップ、バグ管理などに手間がかかり、一つのDrupal共有ソールの元で複数のサイトを構築しました。
  • 今回は一つのサイトを共有ソースのところに移行を行いました
  • 移行をシンプルにするため、事前に不必要ないくつかモジュール(SyntaxHighlighter含め)をアンインストールしました
  • 移行後に再度モジュール(SyntaxHighlighter含め)をインストールし直します

モジュール(SyntaxHighlighter)インストール後にSyntaxHighlighterライブラリが見つからないエラー

  • まずSyntaxHighlighterのライブラリ(3.0.83)をダウンロードしてsites/all/libraies/syntaxhighlighter_3.0.83に展開しました
  • 通常の方法でSyntaxHighlighterモジュール(7.x-2.0)をインストールして有効化しました
  • 以前のサイトになっかたエラーメッセージ:
    Warning: file_get_contents(sites/all/libraries/flexslider/scripts/shCore.js): failed to open stream: No such file or directory _locale_parse_js_file() (/virtual/drills/public_html/drupal7/includes/locale.inc ファイル 1527行).
    Warning: file_get_contents(sites/all/libraries/flexslider/scripts/shBrushPhp.js): failed to open stream: No such file or directory _locale_parse_js_file() (/virtual/drills/public_html/drupal7/includes/locale.inc ファイル 1527行)
    
  • shCore.jsがSyntaxHighlighterのライブラリにあるはずなのに、なぜかflexsliderライブラリに関連付けられました(不思議なエラー)

問題:flexsliderのライブラリに同じ名前(shCore.js)のファイルがありました

  • 他に同じようなエラーがあるか、検索してみたが、答えはありませんでした
  • ソースコードを読んで自力で解決するしかないですね。幸い、複雑なモジュールではなく、SyntaxHighlighterのjsファイルをページロード時にクライアント側に渡すプログラムです
  • 最初は sites/all/modules/syntaxhighlighter/syntaxhighlighter.install をチェックしました。44行目にあるライブラリパス取得関数:sntaxhighlighter_get_lib_location()を注目しました
  • 関数(_syntaxhighlighter_get_lib_location())は sites/all/modules/syntaxhighlighter/syntaxhighlighter.module にあります。さらに、ライブラリパス取得ロジックを探してみました
  • syntaxhighlighter.moduleの377行あたりにあるライブラリフォルダスキャン関数:_syntaxhighlighter_scan_lib_location()があります
    • ライブラリフォルダスキャンの原理:shCore.jsが含まれているフォルダを取得します
  • _syntaxhighlighter_scan_lib_location()にwatchdogを入れて、取得したフォルダをログとして出力しました。
  • 結果として、このパス「sites/all/libraries/flexslider/demo/js/shCore.jssites/all/libraries/flexslider/demo/js/shCore.js」を取得しました。
  • flexSlider/demoの下に同じ名前(shCore.js)のファイルがあるため、flexsliderライブラリに関連づけられました。

解決:demoフォルダ(「sites/all/libraries/flexslider/demo」)を消して、再インストールします

  • flexsliderのdemoフォルダが邪魔にになってるため、またライブラリにdemoプログラムを使用しないため、demoフォルダを消しました
  • SyntaxHighlighterモジュールをアンインストールして、再インストールしたら、機能正常に戻りました
drupal
customization
development
module usage

やりたいこと:一つDrupalのソースで複数のサイト(複数のドメイン)を構築したいです

  • Drupalを用いて複数のサイト(ドメイン)を構築する場合、一つサイト(ドメイン)ごとに一つのDrupalソースで構築することがもちろん問題はありません
  • Drupalソースが分散すると、バージョンアップ、バグ管理などの作業が大変になります
  • 当然一つのDrupalソースの元で複数のサイト(ドメイン)の構築が必要となります
    • 一ドメイン ⇒ Drupalソース ⇒ 共有DB
    • 一ドメイン ⇒ Drupalソース ⇒ 独立DB
  • Drupalでは複数のサイト(ドメイン)への対応をしています

sitesディレクトリの下にドメインごとの子ディレクトリを作成してマルティサイトを構築します

  • 複数のドメイン名をDrupalのルートディレクトリに同期します(例:シンボリックリンクでドメイン名をディレクトリと同期します)
    • 例: old-pine.net をDrupalのルートディレクトリにシンボリックリンクで同期します
  • Drupalのルートディレクトリの下に sites ディレクトリがあります。sitesの下に各メイン名に同期したいディレクトリを作成します
    • 例:sites/pine を作成します
  • sites/sites.phpファイルでドメイン名をディレクトと同期設定を行います
    • 例: 'old-pine.net' => 'pine'  (書き方: ドメイン名 => ディレクトリ名)
       $sites = array(
          'old-pine.net' => 'pine',
       );
      
  • 新規作成したディレクトの下にサイトのインストール設定ファイル(settings.php)の作成
    • 例:sites/pine/settings.phpを作成します
    • settings.phpの内容はsites/pine/default.settings.phpのコピーで良いです(サイト新規作成する場合)
  • 追加したドメイン名でサイトをアクセスして、新規サイトができたことを確認します
drupal
development
module usage

Drupal共有ソースサイトへの移行計画

  • Drupal7で複数のサイト(ドメイン)を構築しました。それぞれのバージョンアップ、ソースのバグ管理に手間がかかります。
  • 一つの共有ソースにすれば、Drupalのバージョンアップ、ソースのバグ管理に効率は良いと考えられています
  • 例:以下イメージのようにサイト移行
  • サイト移行時の両側の違い:
    • Drupalのバージョンは同じ:7
    • モジュール:共有ソース側の方が多い、また同じモジュールに違うバージョンが存在している可能性があります
    • DB:移行先に各サイトは別々のDBで違うコンテンツを有します

サイト移行の一番大きな問題点:メディア保存のフォルダが変わる

  • サイト移行にどんな方法を使っても、元サイトのメディア(例:写真など)保存フォルダー(sites/default)が、共有ソース側に別名のフォルダ(それぞれのサイトのメディア保存フォルダ)に変わります
  • 元サイトにあるメディア(写真、ファイル、ビデオなど)のパスが共有ソース側に移行先フォルダ名で書き換えなければならないです

移行方法1:共有ソース側で新規サイトを構築して、Featureモジュールで旧サイトの設定、Node Exportモジュールでコンテンツを移行します

  • 共有ソース側で以降先のフォルダ(例:pine ⇒ sites/pine)を作成します
    • defaultフォルダ(sites/default)にあるdefault.settings.phpをコピーして、移行先のフォルダ(pine)にペストし、settings.phpに名前を変更します
    • sites.php(sites/sites.php)設定ファイルに移行元のドメイン名とフォルダ名を関連つけます(設定方法:「Drupalのソースを共有する複数サイトの構築」をご参考)
  • 設定されたドメイン名で新サイトへアクセスし、Drupalのインストール手法で新しいサイトを構築します(新しいサイト、移行元のものはなにもない状態)
  • モジュール(Feature)で元サイトの設定を移行します(Drupalのモジュール(Feature)を用いてサイト間のデータ移行/開発管理を行いますをご参考)
    • すべての元サイト設定移行はできません。例:テーマの設定が最初からやり直しが必要はあります(結構手間がかかる作業)
  • モジュール(Node Export)でコンテンツ(例:Article)を元サイトから出力して、移行先にインポートします
    • 大量なコンテンツがある場合、Drushのコマンドで出力したほうが良いでしょう
    • コンテンツに含まれている画像、ビデオ、ファイルなどのパスを移行先のフォルダ名に合わせて変更しなければならない(今回:sites/default ➡ sites/pine すべてのパスを検索して、変更)
  • 元サイトのメディア保存フォルダ(sites/default)にあるすべての内容(settings.php除外)を移行先にフォルダ(sites/pine)にコピーします
  • 移行先でファイルシステム設定画面(ホーム » 管理 » 環境設定 » メディア » ファイルシステム)の元サイトと同じファイルパス設定を行います

移行方法2:元サイトのDBとメディア保存フォルダを移行先にコピーします

  • 元サイトのすべてのものをそのままで移行先にコピーできれば、一番楽です
  • 重要なのは、両サイトが側のDrupalバージョン、モジュールバージョンが完全一致していれば、うまく行きます
    • バージョンが合わなければ、移行後にサイトからエラーがでて、完全に動かなくなりことがあります(以下のエラー例で、実は一つのモジュールバージョン差で引き起こされています)
    • 移行する前にモジュールのバージョン合わせに十分に気を付ける必要はあります
    • もちろん、移行先にでのモジュールバージョンを変えると、他のサイトにも影響を与えるので、調整が必要となります
  • 移行する前に、移行先と移行元のDB、メディアファイルフォルダ(sites/default)の内容をバックアップします(うまく行かなければ、バックアップで戻します)
  • 移行するサイトのすべてDBテーブルをSQL文に出力(MySql:mysqldump)します
    • 出力されたファイルにあるすべてのメディア保存フォルダパスを移行先のフォルダパスに書き換えます(sites/default ➡ sites/pine)
    • もしドメイン名も変わる場合、新しいドメイン名で古いのを書き換えます
  • 移行元のメディア保存フォルダにすべての内容(settings.phpも含む)、移行先にのメディア保存フォルダにコピーします(sites/default ➡ sites/pine)
  • 移行先でファイルシステム設定画面(ホーム » 管理 » 環境設定 » メディア » ファイルシステム)の元サイトと同じファイルパス設定を行います
  • ブラウザで移行先のページにアクセスし、管理者権限でデータベース更新(http://your-site-domin/update.php)を行います(Drushでも更新可能)

結論:新規サイト構築はエラーが少ないが手間がかかります。DBコピーは便利だがエラーが出やすいです。

  • 安心で、きれいに移行する場合新規サイトを構築したほうが良いでしょう。多少手間がかかっても、難しいことは少ないです
  • DBコピーの方式は上級者向けですね。常にエラーの調査、修正にが必要となります
drupal
development
module usage

Drupal共有ソースサイトへの移行計画

  • Drupal7で複数のサイト(ドメイン)を構築しました。それぞれのバージョンアップ、ソースのバグ管理に手間がかかります。
  • 一つの共有ソースにすれば、Drupalのバージョンアップ、ソースのバグ管理に効率は良いと考えられています
  • 例:以下イメージのようにサイト移行
  • サイト移行時の両側の違い:
    • Drupalのバージョンは同じ:7
    • モジュール:共有ソース側の方が多い、また同じモジュールに違うバージョンが存在している可能性があります
    • DB:移行先に各サイトは別々のDBで違うコンテンツを有します

サイト移行の一番大きな問題点:メディア保存のフォルダが変わる

  • サイト移行にどんな方法を使っても、元サイトのメディア(例:写真など)保存フォルダー(sites/default)が、共有ソース側に別名のフォルダ(それぞれのサイトのメディア保存フォルダ)に変わります
  • 元サイトにあるメディア(写真、ファイル、ビデオなど)のパスが共有ソース側に移行先フォルダ名で書き換えなければならないです

移行方法1:共有ソース側で新規サイトを構築して、Featureモジュールで旧サイトの設定、Node Exportモジュールでコンテンツを移行します

  • 共有ソース側で以降先のフォルダ(例:pine ⇒ sites/pine)を作成します
    • defaultフォルダ(sites/default)にあるdefault.settings.phpをコピーして、移行先のフォルダ(pine)にペストし、settings.phpに名前を変更します
    • sites.php(sites/sites.php)設定ファイルに移行元のドメイン名とフォルダ名を関連つけます(設定方法:「Drupalのソースを共有する複数サイトの構築」をご参考)
  • 設定されたドメイン名で新サイトへアクセスし、Drupalのインストール手法で新しいサイトを構築します(新しいサイト、移行元のものはなにもない状態)
  • モジュール(Feature)で元サイトの設定を移行します(Drupalのモジュール(Feature)を用いてサイト間のデータ移行/開発管理を行いますをご参考)
    • すべての元サイト設定移行はできません。例:テーマの設定が最初からやり直しが必要はあります(結構手間がかかる作業)
  • モジュール(Node Export)でコンテンツ(例:Article)を元サイトから出力して、移行先にインポートします
    • 大量なコンテンツがある場合、Drushのコマンドで出力したほうが良いでしょう
    • コンテンツに含まれている画像、ビデオ、ファイルなどのパスを移行先のフォルダ名に合わせて変更しなければならない(今回:sites/default ➡ sites/pine すべてのパスを検索して、変更)
  • 元サイトのメディア保存フォルダ(sites/default)にあるすべての内容(settings.php除外)を移行先にフォルダ(sites/pine)にコピーします
  • 移行先でファイルシステム設定画面(ホーム » 管理 » 環境設定 » メディア » ファイルシステム)の元サイトと同じファイルパス設定を行います

移行方法2:元サイトのDBとメディア保存フォルダを移行先にコピーします

  • 元サイトのすべてのものをそのままで移行先にコピーできれば、一番楽です
  • 重要なのは、両サイトが側のDrupalバージョン、モジュールバージョンが完全一致していれば、うまく行きます
    • バージョンが合わなければ、移行後にサイトからエラーがでて、完全に動かなくなりことがあります(以下のエラー例で、実は一つのモジュールバージョン差で引き起こされています)
    • 移行する前にモジュールのバージョン合わせに十分に気を付ける必要はあります
    • もちろん、移行先にでのモジュールバージョンを変えると、他のサイトにも影響を与えるので、調整が必要となります
  • 移行する前に、移行先と移行元のDB、メディアファイルフォルダ(sites/default)の内容をバックアップします(うまく行かなければ、バックアップで戻します)
  • 移行するサイトのすべてDBテーブルをSQL文に出力(MySql:mysqldump)します
    • 出力されたファイルにあるすべてのメディア保存フォルダパスを移行先のフォルダパスに書き換えます(sites/default ➡ sites/pine)
    • もしドメイン名も変わる場合、新しいドメイン名で古いのを書き換えます
  • 移行元のメディア保存フォルダにすべての内容(settings.phpも含む)、移行先にのメディア保存フォルダにコピーします(sites/default ➡ sites/pine)
  • 移行先でファイルシステム設定画面(ホーム » 管理 » 環境設定 » メディア » ファイルシステム)の元サイトと同じファイルパス設定を行います
  • ブラウザで移行先のページにアクセスし、管理者権限でデータベース更新(http://your-site-domin/update.php)を行います(Drushでも更新可能)

結論:新規サイト構築はエラーが少ないが手間がかかります。DBコピーは便利だがエラーが出やすいです。

  • 安心で、きれいに移行する場合新規サイトを構築したほうが良いでしょう。多少手間がかかっても、難しいことは少ないです
  • DBコピーの方式は上級者向けですね。常にエラーの調査、修正にが必要となります
apache
windows
apache
html
windows

やりたいこと:複数のサイトをApacheのDocumentRootにある別々のディレクトリに関連付けして設定したいです

  • Windows10のOS、XAMMP5.6.8でローカルサーバー環境を構築しています
    • ApacheのDocumentRoot: C:\develop\sources\php
  • ローカルに複数のテストサイト(wp.local, ligare.local, drills.local)の対応するPHPソースが違います
    • wp.local -> php/wordpress
    • ligare.local -> php/ligare  (drupal共有ソース)
    • drills.local -> php/ligare (drupal共有ソース)

Windowsのhostsファイルでローカルドメイン名とApacheのDocumentRootに関連付けます

  • 複数のローカルサイトのドメイン名をWindowsのhostsファイル(C:\Windows\System32\drivers\etc\hots)でローカルウェブサーバー(Apache)のDocumentRootに関連付けます
    127.0.0.1 drills.local
    127.0.0.1 ligare.local
    127.0.0.1 wp.local
  • すべてのローカルサイトのドメインを同じフォルダ(DocumentRoot)に関連付けます

Apacheの仮想ホスト設定でそれぞれのドメインをディレクトリに関連付けます

  • 仮想ホスト設定(apache/conf/extra/httpd-vhosts.conf)ファイルで各ドメイン名をそれぞれのディレクトリに関連付けます
    <VirtualHost *:80>
        ServerName drills.local
        DocumentRoot C:/develop/sources/php/ligare
        ServerAdmin root@drills
     
        <Directory "C:/develop/sources/php/ligare">
            Options All
            AllowOverride All
            Order Allow,Deny
            Allow from all
        </Directory>
    </VirtualHost>
    
    <VirtualHost *:80>
        ServerName ligare.local
        DocumentRoot C:/develop/sources/php/ligare
        ServerAdmin root@drills
     
        <Directory "C:/develop/sources/php/ligare">
            Options All
            AllowOverride All
            Order Allow,Deny
            Allow from all
        </Directory>
    </VirtualHost>
    
    <VirtualHost *:80>
        ServerName wp.local
        DocumentRoot C:/develop/sources/php/wordpress
        ServerAdmin root@drills
     
        <Directory "C:/develop/sources/php/wordpress">
            Options All
            AllowOverride All
            Order Allow,Deny
            Allow from all
        </Directory>
    </VirtualHost>
  • 全体的な設定イメージは以下のよう

Drupal共有ソース利用の場合、sitesディレクトリの下にそれぞれのディレクトに関連付けます

  • 共有ソースのDrupal(例:ここはphp/ligareディレクトリ)では複数のサイトの構築が可能
  • 詳細な設定は「Drupalのソースを共有する複数サイトの構築」を参考してください
drupal
customization
development
module usage

やりたいこと:一つDrupalのソースで複数のサイト(複数のドメイン)を構築したいです

  • Drupalを用いて複数のサイト(ドメイン)を構築する場合、一つサイト(ドメイン)ごとに一つのDrupalソースで構築することがもちろん問題はありません
  • Drupalソースが分散すると、バージョンアップ、バグ管理などの作業が大変になります
  • 当然一つのDrupalソースの元で複数のサイト(ドメイン)の構築が必要となります
    • 一ドメイン ⇒ Drupalソース ⇒ 共有DB
    • 一ドメイン ⇒ Drupalソース ⇒ 独立DB
  • Drupalでは複数のサイト(ドメイン)への対応をしています

sitesディレクトリの下にドメインごとの子ディレクトリを作成してマルティサイトを構築します

  • 複数のドメイン名をDrupalのルートディレクトリに同期します(例:シンボリックリンクでドメイン名をディレクトリと同期します)
    • 例: old-pine.net をDrupalのルートディレクトリにシンボリックリンクで同期します
  • Drupalのルートディレクトリの下に sites ディレクトリがあります。sitesの下に各メイン名に同期したいディレクトリを作成します
    • 例:sites/pine を作成します
  • sites/sites.phpファイルでドメイン名をディレクトと同期設定を行います
    • 例: 'old-pine.net' => 'pine'  (書き方: ドメイン名 => ディレクトリ名)
       $sites = array(
          'old-pine.net' => 'pine',
       );
      
  • 新規作成したディレクトの下にサイトのインストール設定ファイル(settings.php)の作成
    • 例:sites/pine/settings.phpを作成します
    • settings.phpの内容はsites/pine/default.settings.phpのコピーで良いです(サイト新規作成する場合)
  • 追加したドメイン名でサイトをアクセスして、新規サイトができたことを確認します
ホーム

古松

検索

Article Category

  • apache(7)
  • css(19)
  • drupal(295)
  • Electron(4)
  • html(34)
  • javascript(27)
  • laravel(4)
  • linux(5)
  • macOS(2)
  • mysql(13)
  • php(19)
  • python(4)
  • SEO(12)
  • video(72)
  • Visual Studio Code(4)
  • windows(13)
  • wordpress(32)