web-dev-qa-db-ja.com

マルチサイト展開用の管理ユーティリティはありますか?

Webform を多用するクライアント用のマルチサイトインスタンスを作成しています。これは、単一の基本ドメイン(no sub-domains)と単一のSSL証明書を使用する一種の調査ツールになります。

他のすべてのサイトの基本となる/sites/defaultを設定しました。私はこれまで、bashを使用してこれを試みました。 (これは私の最高のコードではなく、使い捨てのVM *にあります):

# Create temporary password
PASS=`tr -dc a-z1-4 </dev/urandom  | head -c 10`

# File structure and empty settings file
mkdir /var/www/html/sites/$1
mkdir /var/www/html/sites/$1/files
cp /var/www/html/sites/default/default.settings.php /var/www/html/sites/$1/settings.php

mysql -u root -p -e "create database $1"
mysql -u root -p -e "GRANT ALL PRIVILEGES ON $1.* TO '$1'@'%' IDENTIFIED AS PASSWORD('$PASS');"

# And here is where things fall apart
drush si ???

私の質問は、このマルチサイトインストール内に新しいサイトを作成するのに役立つモジュールまたはユーティリティはありますか?つまり、モデルデータベースのクローンを作成し、/sites/new-site/settings.phpを作成して、選択したモジュールのセットを有効にします。

私の夢はdrush clone-siteコマンドを持つことです。

6
Rick

Aegirを見てください。

Webサーバーのvhosts(Apacheまたはnginx)を管理するため、探しているものよりも少し多めです。つまり、システム構成の一部を引き継ぐことになります。また、Debianでも非常にうまく機能します(Debianパッケージを使用すると、インストール/アップグレードは非常に簡単です。

インストールしたら、ベースサイトを作成し、Aegirユーザーインターフェイス(Drupalサイト、「ホストマスター」と呼ばれます。これは、他のサイトから完全に自律的です)を使用して複製できます。ホスティング-Drupal開発者のように、開発者はDrupalをツールのフロントエンドに使用しました)。内部では、AegirはDrushを使用しているため、車輪を再発明しない。

とにかく、公平な免責事項:学習曲線はありますが、コミュニティはかなり良好であり、小規模サイトのファームを管理する場合には十分価値があります。また、いくつかの企業(プロジェクトページに記載)から利用できる商用トレーニング/サポートもあります。

8
bgm

すべてのDrupalインスタンスを簡単に管理できる単一の管理ユーティリティ(おそらくいくつかのマネージドクラウドソリューション)はないため、さまざまなツールを組み合わせる方法(Puppet + drushなど)を学ぶ必要があります。 drush で実行できます。


Ansible

Ansibleは柔軟かつ拡張可能な自動化ツールであり、マルチサイトの展開を確実に支援します。

見る:


パペット

おそらくそれは必要ありませんが、毎回(たとえば、複数のサーバー上で)LAMP構成全体をセットアップする必要がある場合は、構成管理ユーティリティを使用する必要があります。

たとえば、LAMP環境構成(Linux、Apache、MySQL、およびPHP)を自動化するには、 Puppet または Chef を使用できます。適切なPuppetレシピがあれば、LAMP構成全体を1つのコマンドで構成できます。 [〜#〜] ads [〜#〜] 分布の基本的なレシピの例を確認してください: ads.dev.pp

Puppetのインストールは簡単(Sudo apt-get -y install puppet)で、必要なモジュール(Apt、Apache、Pearなど)をインストールする必要があります。例では:

Sudo puppet module install puppetlabs/apt; Sudo puppet module install rafaelfc/pear; Sudo puppet module install puppetlabs-Apache

より高度なレシピ(vhostごとに異なるdb)については、次を確認してください: vhost定義を含む多くのマニフェストファイルをインポートする適切な方法


Drush remotes

LAMP環境の準備が整ったら、リモートシェルエイリアスを定義する必要があります。これにより、サイト間でファイルとデータベースを転送できます。 example.aliases.drushrc.php の使用方法を確認してください。

マルチサイトインスタンスごとに異なるリモートを使用できます。例:

// The site in sites/default/
$aliases['site.default'] = array(
  'uri' => 'default',
  'root' => '/path/to/drupal',
);
// The site in sites/site1/
$aliases['site.site1'] = array(
  'uri' => 'site1',
  'root' => '/path/to/drupal',
);

SSHキーをauthorized_keysに必ず追加してください。リモートコマンドを実行するたびにパスワードの入力を求められることはありません。参照: authorized_keysファイルにRSAキーを追加する方法 .


サイトのインストール

Drupalサイトを最初からインストールする場合は、 Drupalインストールプロファイル または drush make files (1つ作成するか、既存のサイトから生成します)。

RecruiterCommerce Kickstart または [〜#〜] adsなどの分布を簡単に確認できます[〜#〜] 仕事。

複雑なソリューションでは、 phing (または ant )を使用できます。 ADSからの build.xml の例を確認するか、 Template Phing build.xmlファイルでDrupal projects

参照: クリーンをインストールする最も簡単な方法は何ですかDrupalゼロからインストールしますか?


リモートへのファイルの転送

シェルエイリアスを設定したら、ファイルの転送は簡単です。

例では:

drush -v rsync drupal/ @remote

マルチサイトの例:

drush -v rsync drupal/ @remote1,@remote1

または、これはそれぞれを定義することで実現できます。 devエイリアスは別の*.aliases.drushrc.phpグループエイリアスファイルにあるため、@devを呼び出すと、定義されているすべてのdev環境が呼び出されます。

参照: 同じホストを共有する2つのリモート間でファイルをrsyncする方法


サイト間でデータベースを同期しています

データベースの転送もdrush sql-syncによって簡単です。例:

drush sql-sync @self @remote

これにより、ローカルDrupalデータベースがリモートに転送されます。同じコマンドを使用して、2つのリモート間でデータベースを転送することもできます。


設定ファイルの管理

settings.phpを編集して、最後にsettings.local.phpなどの追加ファイルをインスタンス固有の構成ファイルとして含めることを検討できます(例 12 )を使用すると、メンテナンスが容易になります(gitで無視できるため)。したがって、複数の環境がある場合は、次の簡単なアプローチを使用して、現在の環境に基づいて設定を読み込むことができます。

$conf['environment'] = $env = 'local'; // dev, test, prod)

そして、単純なswitchステートメントを使用して、環境ごとに異なる設定を呼び出します。

これは、使用できるADSディストリビューションからの サンプル設定ファイル です。

設定ファイルへの変更を自動化したい場合は、sed s/DB_NAME/real_db_name/(drushは通常引数を受け入れてリモートに渡す)のように、drushエイリアスを定義するか、チェック できますdrush? を使用して、settings.phpファイルを変更します。


Drush Shellエイリアス

夢を実現したい場合は、drushシェルエイリアスを使用して、展開スクリプトの一部としてリモートで実行するコマンドを定義します。

リモコンの同じ例:

$aliases['dev'] = array(
'Shell-aliases' => array(
  'deploy-code' => '!git fetch Origin && Sudo git stash && Sudo git reset Origin/dev --hard',
  'deploy-db' => '!drush sql-sync --yes @prod @self',
  'deploy-files' => '!drush --yes rsync @prod:%files @self:%files',
  'deploy-drupal' => "!
    Sudo -uwww-data drush -y updb &&
    Sudo -uwww-data drush cc all &&
    Sudo -uwww-data drush -y fra &&
    Sudo -uwww-data drush cron &&
    Sudo -uwww-data drush status-report --severity=2 &&
    echo Deployment completed.
  ",
));

そして、drushrc.phpにローカルエイリアスを定義することで、それらを組み合わせることができます。

$options['Shell-aliases'] = array(
  'deploy-dev' => '!drush @dev deploy-db && drush @dev deploy-code && drush @dev deploy-files && drush @dev deploy-drupal',
);

したがって、単にdrush deploy-devを実行すると、ファイルとデータベースがprodからテスト(dev)環境に転送され、更新を実行し、キャッシュをクリアし、cronを実行し、すべての機能を元に戻します。


あなたのユースケース

上記に基づいて、ローカルで次のコマンドを使用してユースケースを解決できます。

  1. サイトのクローンを作成します。

    drush -yv @site exec drush rsync sites/site-1 sites/site-2
    
  2. 設定ファイルをアップロードしてデータベースを変更します。

    drush rsync examples/default.settings.local.php @site:sites/site-2/settings.local.php
    drush -vy @site exec sed -i -e s/DB_NAME/real_db_name/ sites/site-2/settings.local.php
    
  3. サイト間でデータベースを転送します。

    drush -vy @site sql-sync --create-db site-1 site-2
    
  4. 選択したモジュールのセットを有効にします。

    drush -vy @site en module_1 module_2
    

そのためのdrushエイリアスを簡単に作成できます。例えば。

drush clone-site site-1 site-2 # Last 2 are arguments.

最終的に policy.drush.inc の使用方法を確認して、任意のDrushコマンドに独自の前処理、後処理コードを追加できるようにします。


続きを読む:

7
kenorb

プロビジョニング をインストールします。

これはAegirのバックエンド部分であり、drush拡張機能として実装されています。

文字通り、探しているコマンド provision-clone が含まれています。これにより、Clone a site between platforms。プロビジョニング言語では、「プラットフォーム」はDrupalインストールです。同じプラットフォーム内でサイトを複製することもできます。

これらの2つのコマンドには、別のオプションもあります。

  1. backup-サイトディレクトリ、サイトデータ構成、およびデータベースダンプを含むtarballを生成します。
    • これにより、tarballは「サイトパッケージ」として機能し、他のインストールに再展開したり、アップグレードに使用したりできます。
  2. デプロイ-サイトパッケージ(バックアップ)を引数として受け入れ、再デプロイして、アップグレードプロセスを実行します。
    • Hook_provision_pre_upgrade()、hook_provision_upgrade()、およびhook_provision_post_upgrade()フックを使用し、エラーが発生した場合にクリーンなロールバックを可能にします。モジュールバージョンの厳格なチェックが含まれ、ユニットテストを実行できます。

AegirのUI部分であるhostmasterを完全にスキップして、独自のプロビジョニングで作業することができます。よく知られているプロジェクトの中で、これはあなたが望むものに最も近いものだと思います。

5
Letharion

残念ながら、必要なことを行うモジュールはありません。 Webサイトは、ApacheとMySQLを管理できません(管理してはいけません)。

スクリプトベースの方法:過去には、スクリプトを使用してDrupalマルチサイトを管理する試みが何度もありました。

drush -l site_nameコマンドまたはdrush @site_name commanddrush siがスクリプトで分解される理由です)のようなものを使用して、Drushでカスタムスクリプトを拡張できます。しかし、それはサイト管理のみを自動化し、サイト展開(MySQl、Apache Vhostなど)は自動化しません。

Aegir: @bgmで前述したように、Drupalマルチサイトの「必須」の方法はAegirです。 Aegir 2.xはDrupal 6であり、2つの主要部分で構成されます(UIの場合は+2)

  • ホストマスター(他の部分を管理するDrupal 6インストール)
  • プロビジョニング(サイトを展開および管理するためのすべてのDrushベースの魔法)

したがって、カスタムスクリプトを呼び出してAegir/Drupalのベストプラクティスを打ち破りたいが、サイトの展開を自動化したい場合は、Drushよりもカスタムの方法でProvisionを使用できます。しかし、私はこのアプローチをお勧めしません...

Aegirは急な学習曲線を持っています(特にOPSの助けがない場合)、簡単な展開/更新/管理Drupalサーバーがあるだけでなく、学習とフォローを余儀なくされますDrupalベストプラクティス。

2
tvl

ここでいくつかの回答をまとめるために、 OpenDevShop もあります。独自のサーバーにインストールしてインフラストラクチャとサイトを管理できるAcquia Cloud/Pantheonタイプのホスティング環境を目指しています。

1
diamondsea

Druml を見てください。 Drupalマルチサイトで完璧に動作します。

1
Vadym Myrgorod

Barracuda Octopus Aegir = BOA をご覧ください。これは、ネイキッドサーバーをDrupalサイトの大量作成用のGUIに変換するオープンソースのインストールツールです。Drupal 7と8の両方をサポートしています。 ComposerベースのDrupal 8、composer.jsonrequireセクションからDrush 9または10を削除する必要があります。

インストール手順はここにあります: https://github.com/omega8cc/boa/blob/master/docs/INSTALL.txt

BOAは堅牢で使いやすいと思いました。

技術的な内部:

  • 内部的に、BOAはマルチサイトをセットアップします。データベースとコンテンツは別々ですが、コードベースは同じです。つまり、セキュリティ更新プログラムのインストールが速くなります。
  • 対照的に、 OpenDevShop は完全に独立したDrupalインストールを個別のディレクトリに使用します。これにより、サイト間のカップリングが減少します。それぞれに異なるバージョンのモジュールがインストールされている可能性があります。これはカスタムで特に重要ですOpenDevShopがGitブランチを理解するため、モジュール開発。その結果、コードをダウンロードする必要があり、通常Composerを実行する必要があるため、新しいサイトのセットアップはBOAを使用する場合よりも遅くなります。

BOAはOpenDevShopよりも非技術者を対象としています。ただし、OpenDevShopには、OPが希望するクローンコマンドがあります。

0
Gogowitsch