2007-10-14

Debian で Drupal の複数インスタンスをホストする

$ sudo apt-get install drupal5

インストールされるもの

/usr/share/drupal5/ 本体
/etc/drupal/5/ 設定
/etc/cron.d/drupal5  
/var/lib/drupal5/ 作業域
/usr/share/dbconfig-common/data/drupal5/  
/usr/share/lintian/overrides/drupal5  
/etc/apache2/conf.d/drupal.conf  

アクセス経路解析

  • /etc/apache2/conf.d/drupal.conf で Alias /drupal5 /usr/share/drupal5
  • /usr/share/drupal5/includes/bootstrap.inc の conf_path() で /etc/drupal/5/sites/XXX/settings.php の XXX が決定される.基本的には URL のホスト部分とパスからディレクトリ名の候補を作り,settings.php が見つかるまで探す.
  • settings.php で $db_url が設定される.これは同じディレクトリにある dbconfig.php で設定された $dbname などから決定される.
    • $db_url が設定されている箇所の近くの $db_prefix というのを設定すれば一つのデータベースで複数のインスタンスをサポートできそうだ.

手順

# cd /etc/drupal/5/sites
# vi default/settings.php
  $db_prefix = $dbprefix;
# vi default/dbconfig.php
  $dbprefix = '';
# mkdir /srv/drupal5
# chown www-data.www-data /srv/drupal5
# chmod g+s /srv/drupal5
# sudo -u www-data mkdir -p /srv/drupal5/sites/all/modules /srv/drupal5/sites/all/themes
# ln -s /srv/drupal5/sites/all .
# cp -a default www.example.com.drupal.one
# vi www.example.com.drupal.one/dbconfig.php
  $dbprefix = 'one_';
# sudo -u www-data mkdir /srv/drupal5/dirs
# sudo -u www-data ln -s /usr/share/drupal5 /srv/drupal5/dirs/one
# sudo -u www-data mkdir -p /srv/drupal5/files/one
# chmod 750 /srv/drupal5/files/one
# sudo -u www-data ln -s /srv/drupal5/files/one /var/lib/drupal5/files
# sudo -u www-data mkdir -p /srv/drupal5/sites/one/modules /srv/drupal5/sites/one/themes
# ln -s /srv/drupal5/sites/one/* www.example.com.drupal.one
# cd ..
# vi htaccess
  # RewriteEngine on
  # RewriteCond %{REQUEST_FILENAME} !-f
  # RewriteCond %{REQUEST_FILENAME} !-d
  # RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
  php_value mbstring.language               "neutral"
  php_value mbstring.func_overload          "0"
  php_value mbstring.internal_encoding      "UTF-8"
# vi apache.conf
  Alias /drupal/one /srv/drupal5/dirs/one
  <Directory /srv/drupal5/dirs/one>
  <IfModule mod_rewrite.c>
      RewriteEngine on
      RewriteBase /drupal/one
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
  </IfModule>
# vi /usr/share/drupal5/scripts/cron.sh
  grep '^Alias' /etc/drupal/5/apache.conf | while read a; do
      b=($a)
      curl --silent --compressed "http://${HOSTNAME}${b[1]}/cron.php"
  done
# /etc/init.d/apache2 reload
(access to http://www.example.com/drupal/one/install.php)

追加手順

# cd /etc/drupal/5/sites
# cp -a default www.example.com.drupal.two
# vi www.example.com.drupal.two/dbconfig.php
  $dbprefix = 'two_';
# sudo -u www-data ln -s /usr/share/drupal5 /srv/drupal5/dirs/two
# sudo -u www-data mkdir /srv/drupal5/files/two
# chmod 750 /srv/drupal5/files/two
# sudo -u www-data ln -s /srv/drupal5/files/two /var/lib/drupal5/files
# sudo -u www-data mkdir -p /srv/drupal5/sites/two/modules /srv/drupal5/sites/two/themes
# ln -s /srv/drupal5/sites/two/* www.example.com.drupal.one
# cd ..
# vi apache.conf
  Alias /drupal/two /srv/drupal5/dirs/two
  <Directory /srv/drupal5/dirs/two>
      Options +FollowSymLinks
      AllowOverride All
      order allow,deny
      allow from all
  <IfModule mod_rewrite.c>
      RewriteEngine on
      RewriteBase /drupal/two
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
  </IfModule>
  </Directory>
# /etc/init.d/apache2 reload
(access to http://www.example.com/drupal/two/install.php)

最初に設定すべきもの

  • Administer → Site configuration → File system → File system path
  • Administer → Site configuration → Date and time
  • Administer → Site configuration → Clean URLs

0 件のコメント:

コメントを投稿