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
コマンドを持つことです。
Aegirを見てください。
Webサーバーのvhosts(Apacheまたはnginx)を管理するため、探しているものよりも少し多めです。つまり、システム構成の一部を引き継ぐことになります。また、Debianでも非常にうまく機能します(Debianパッケージを使用すると、インストール/アップグレードは非常に簡単です。
インストールしたら、ベースサイトを作成し、Aegirユーザーインターフェイス(Drupalサイト、「ホストマスター」と呼ばれます。これは、他のサイトから完全に自律的です)を使用して複製できます。ホスティング-Drupal開発者のように、開発者はDrupalをツールのフロントエンドに使用しました)。内部では、AegirはDrushを使用しているため、車輪を再発明しない。
とにかく、公平な免責事項:学習曲線はありますが、コミュニティはかなり良好であり、小規模サイトのファームを管理する場合には十分価値があります。また、いくつかの企業(プロジェクトページに記載)から利用できる商用トレーニング/サポートもあります。
すべてのDrupalインスタンスを簡単に管理できる単一の管理ユーティリティ(おそらくいくつかのマネージドクラウドソリューション)はないため、さまざまなツールを組み合わせる方法(Puppet + drushなど)を学ぶ必要があります。 drush で実行できます。
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つ作成するか、既存のサイトから生成します)。
Recruiter 、 Commerce 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
などの追加ファイルをインスタンス固有の構成ファイルとして含めることを検討できます(例 1 、 2 )を使用すると、メンテナンスが容易になります(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を実行し、すべての機能を元に戻します。
あなたのユースケース
上記に基づいて、ローカルで次のコマンドを使用してユースケースを解決できます。
サイトのクローンを作成します。
drush -yv @site exec drush rsync sites/site-1 sites/site-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
サイト間でデータベースを転送します。
drush -vy @site sql-sync --create-db site-1 site-2
選択したモジュールのセットを有効にします。
drush -vy @site en module_1 module_2
そのためのdrushエイリアスを簡単に作成できます。例えば。
drush clone-site site-1 site-2 # Last 2 are arguments.
最終的に policy.drush.inc の使用方法を確認して、任意のDrushコマンドに独自の前処理、後処理コードを追加できるようにします。
続きを読む:
プロビジョニング をインストールします。
これはAegirのバックエンド部分であり、drush拡張機能として実装されています。
文字通り、探しているコマンド provision-clone が含まれています。これにより、Clone a site between platforms
。プロビジョニング言語では、「プラットフォーム」はDrupalインストールです。同じプラットフォーム内でサイトを複製することもできます。
これらの2つのコマンドには、別のオプションもあります。
AegirのUI部分であるhostmasterを完全にスキップして、独自のプロビジョニングで作業することができます。よく知られているプロジェクトの中で、これはあなたが望むものに最も近いものだと思います。
残念ながら、必要なことを行うモジュールはありません。 Webサイトは、ApacheとMySQLを管理できません(管理してはいけません)。
スクリプトベースの方法:過去には、スクリプトを使用してDrupalマルチサイトを管理する試みが何度もありました。
drush -l site_name
コマンドまたはdrush @site_name command
(drush si
がスクリプトで分解される理由です)のようなものを使用して、Drushでカスタムスクリプトを拡張できます。しかし、それはサイト管理のみを自動化し、サイト展開(MySQl、Apache Vhostなど)は自動化しません。
Aegir: @bgmで前述したように、Drupalマルチサイトの「必須」の方法はAegirです。 Aegir 2.xはDrupal 6であり、2つの主要部分で構成されます(UIの場合は+2)
したがって、カスタムスクリプトを呼び出してAegir/Drupalのベストプラクティスを打ち破りたいが、サイトの展開を自動化したい場合は、Drushよりもカスタムの方法でProvisionを使用できます。しかし、私はこのアプローチをお勧めしません...
Aegirは急な学習曲線を持っています(特にOPSの助けがない場合)、簡単な展開/更新/管理Drupalサーバーがあるだけでなく、学習とフォローを余儀なくされますDrupalベストプラクティス。
ここでいくつかの回答をまとめるために、 OpenDevShop もあります。独自のサーバーにインストールしてインフラストラクチャとサイトを管理できるAcquia Cloud/Pantheonタイプのホスティング環境を目指しています。
Druml を見てください。 Drupalマルチサイトで完璧に動作します。
Barracuda Octopus Aegir = BOA をご覧ください。これは、ネイキッドサーバーをDrupalサイトの大量作成用のGUIに変換するオープンソースのインストールツールです。Drupal 7と8の両方をサポートしています。 ComposerベースのDrupal 8、composer.json
のrequire
セクションからDrush 9または10を削除する必要があります。
インストール手順はここにあります: https://github.com/omega8cc/boa/blob/master/docs/INSTALL.txt
BOAは堅牢で使いやすいと思いました。
技術的な内部:
BOAはOpenDevShopよりも非技術者を対象としています。ただし、OpenDevShopには、OPが希望するクローンコマンドがあります。