tar ベースのポータルを RPM ベースのポータルに変換する

4.18.05 リリースの Apigee Developer Services ポータル(略して「ポータル」)では、以前の tar ベースのポータルを更新することはできません。RPM ベースのポータルを直接 4.18.05 に更新する方法しかありません。

ただし、tar ベースのポータルを 4.18.05 の RPM ベースのポータル インスタンスに変換することは可能です。この変換プロセスの一環として、既存のポータルの MySQL / MariaDB を Postgres データベースに移行します。変換したポータルは RPM ベースのポータルとして維持されます。

tar ベースのポータルは、4.17.05 だけでなく 4.16.09 や 4.17.01 など、多数の旧バージョンを RPM ベースのポータルに移行できます。唯一の要件は、そのポータルで Drupal 7 以降が実行されていることです。Drupal のバージョンを確認するには、Drupal メニューで [Reports] > [Status Reports] を選択します。Drupal のバージョンは出力の先頭行に表示されます。

tar ベースのポータルを RPM ベースのポータルに移行する大まかな手順は次のとおりです。

  • RPM ベースの 4.18.05 バージョンのポータルを新しいノードにインストールします。
  • RPM ベースのポータルで新しい Postgres データベースを作成します。
  • tar ベースのポータルからポータル データベースを移行します。
  • tar ベースのポータルからすべての付属ファイルを RPM ベースのポータルにコピーします。
  • DNS エントリを更新して、新しい RPM ベースのポータルを指すようにします。

    デフォルトのポート番号が互いに異なることにご注意ください。RPM ベースのポータルでは、デフォルトのポート番号は 8079 ですが、tar ベースのポータルでは 80 です。DNS エントリで必ず正しいポート番号を使用してください。別のポートを使用する方法については、ポータルで使用する HTTP ポートを設定するをご覧ください。

変換後の新しいデフォルト インストール ディレクトリ

インストール済みのポータルを更新して Nginx / Postgres を使用するように変更すると、ルート ディレクトリも変わります。変更前のディレクトリは以下のとおりです。

/opt/apigee/apigee-drupal

変更後のディレクトリは以下となります。

/opt/apigee/apigee-drupal/wwwroot

ポータル変換手順

tar ベースのポータルを RPM ベースのポータルに変換するには:

  1. RPM ベースの 4.18.05 バージョンのポータルを tar ベースのポータルとは異なるノードにインストールします。
  2. RPM ベースのポータルで、新しい Postgres データベースを作成します。後で、tar ベースのポータルのデータベースをこの新しいデータベースに移行します。
    1. psql にログインします。
      psql -h localhost -p 5432 -U apigee

      ポータル構成ファイルの PG_PWD プロパティで定義された Postgres パスワードを入力します。

    2. 新しい Postgres データベースを作成します。
      CREATE DATABASE newportaldb;
    3. psql を終了します。
      \q
  3. tar ベースのポータルで、不要になった古いモジュールを削除します。

    cd /var/www/html
        drush sql-query --db-prefix "DELETE from {system} where name = 'apigee_account' AND type = 'module';"
        drush sql-query --db-prefix "DELETE from {system} where name = 'apigee_checklist' AND type = 'module';"
        drush sql-query --db-prefix "DELETE from {system} where name = 'apigee_sso_ui' AND type = 'module';"
  4. tar ベースのポータルで、Migrator Drupal モジュールをインストールして構成します。
    1. cd /tmp 
    2. wget https://ftp.drupal.org/files/projects/dbtng_migrator-7.x-1.4.tar.gz 
    3. gunzip /tmp/dbtng_migrator-7.x-1.4.tar.gz 
    4. tar -xvf /tmp/dbtng_migrator-7.x-1.4.tar --directory /var/www/html/sites/all/modules 
    5. 管理者としてポータルにログインします。
    6. Drupal メニューで [Modules] を選択します。
    7. [DBTNG Migrator] モジュールを有効にします。
    8. 構成を保存します。
  5. tar ベースのポータルで、/var/www/html/sites/default/settings.php をエディタで開き、RPM ベースのポータルに新しく作成したデータベースを指す 2 つ目のデータベース構成を追加します。現在のデータベース構成の名前は「default」です。新しい構成は「custom」という名前にします。次の例をご覧ください。
    $databases = array (
          'default' =>
          array (
            'default' =>
            array (
              'database' => 'devportal',
              'username' => 'devportal',
              'password' => 'devportal',
              'host' => 'localhost',
              'port' => '',
              'driver' => 'mysql',
              'prefix' => '',
            ),
          ),
          'custom' =>
          array (
            'default' =>
            array (
              'database' => 'newportaldb',
              'username' => 'apigee',
              'password' => 'postgres',
              'host' => '192.168.168.100',
              'port' => '5432',
              'driver' => 'pgsql',
              'prefix' => '',
            )
          )
        );

    ここで、hostport には PostgreSQL サーバーの IP アドレスとポートを指定します。Postgres への接続にはポート 5432 が使用されます。

  6. tar ベースのポータルで、Postgres ドライバをインストールして構成します。
    1. Yum を使用してドライバをインストールします。
      yum install php-pdo_pgsql
    2. /etc/php.ini をエディタで開き、次の行をファイルの任意の場所に追加します。
      extension=pgsql.so
    3. Apache を再起動します。
      service httpd restart
  7. tar ベースのポータルで、ポータル データベースを RPM ベースのポータルに移行します。
    1. 管理者としてポータルにログインします。
    2. Drupal メニューで [Structure] -> [Migrator] を選択します。
    3. 変換元データベースとして tar ベースのポータルのデータベース(default)を選択し、変換先となるデータベース(上記の settings.php ファイルに基づくと custom)を選択します。
    4. [Migrate] をクリックします。tar ベースのデータベースが RPM ベースのデータベースに移行されます。
  8. tar ベースサーバーの sites ディレクトリを RPM ベースサーバーにコピーします。以下の手順に示すパスはデフォルトのパスに基づいています。ご使用の環境に合わせてパスを変更してください。
    1. tar ベースのポータルで、/var/www/html/sites ディレクトリを tar ファイルにまとめます。
      cd /var/www/html/sites
          tar -cvzf /tmp/sites.tar.gz .
    2. /tmp/sites.tar.gz を RPM ベースサーバー上の /opt/apigee/apigee-drupal/wwwroot/sites にコピーします。
    3. tar ファイルから sites ディレクトリを展開します。ただし、重要なファイルは上書きしないでください。
      1. settings.php ファイルをバックアップします。
        sudo cp /opt/apigee/apigee-drupal/wwwroot/sites/default/settings.php
              /opt/apigee/apigee-drupal/wwwroot/sites/default/settings.bak.php
      2. 既存の files ディレクトリをバックアップします。
        sudo mv /opt/apigee/apigee-drupal/wwwroot/sites/default/files
              /opt/apigee/apigee-drupal/wwwroot/sites/default/files_old
      3. 既存の sites ディレクトリをバックアップします。
        tar -cvzf /tmp/sites_old.tar.gz /opt/apigee/apigee-drupal/wwwroot/sites
      4. tar ベースサーバーからコピーしたファイルを解凍し、sites ディレクトリを展開します。
        gunzip /opt/apigee/apigee-drupal/wwwroot/sites/sites.tar.gz
            tar -xvf /opt/apigee/apigee-drupal/wwwroot/sites/sites.tar
      5. コピーされたファイルに適切な所有者を設定します。
        chown -R apigee:apigee /opt/apigee/apigee-drupal/wwwroot/sites/
      6. settings.php ファイルを復元します。
        sudo cp /opt/apigee/apigee-drupal/wwwroot/sites/default/settings.bak.php
              /opt/apigee/apigee-drupal/wwwroot/sites/default/settings.php
      7. private フォルダのファイルを新しい場所に移動します。
        cp -r /opt/apigee/apigee-drupal/wwwroot/sites/default/files/private/* /opt/apigee/data/apigee-drupal-devportal/private
            rm -rf /opt/apigee/apigee-drupal/wwwroot/sites/default/files/private
            chown -R apigee:apigee /opt/apigee/data/apigee-sap-drupal-devportal/private
  9. (tar ベースのポータル上のウェブルート ディレクトリのパスをデフォルトパスの /var/www/html 以外に変更した場合のみ)tar ベースのポータルで、drush status を実行して filesprivate files のパスを確認します。
    cd /var/www/html
        drush status

    files / private ファイルが sites ディレクトリの下にない場合は、それらのファイルを上記のように RPM ベースサーバーにコピーします。

  10. RPM ベースのポータルで、/opt/apigee/apigee-drupal/wwwroot/sites/default/settings.php をエディタで開いてデフォルト データベースのプロパティを設定します。
    vi /opt/apigee/apigee-drupal/wwwroot/sites/default/settings.php

    settings.php で、デフォルト データベースの記述を設定します。

    $databases = array (
          'default' =>
          array (
            'default' =>
            array (
              'database' => 'newportaldb',
              'username' => 'apigee',
              'password' => 'postgres',
              'host' => 'localhost', 'port' => '5432',
              'driver' => 'pgsql',
              'prefix' => '',
            )
          )
        );

    ここで、database には新しく作成したデータベースを指定し、usernamepassword には tar ベースのポータルで custom データベースに対して定義したユーザー名とパスワードを指定します。prefix は空にします。

  11. RPM ベースのポータルに含まれる Drupal モジュールの数は、tar ベースのポータルより少なくなっています。RPM ベースのポータルに移行したら、不足しているモジュールがないか確認し、必要に応じてそのモジュールをインストールします。
    1. 不足モジュールの検出に使用する Drupal missing_module をインストールします。
      cd /opt/apigee/apigee-drupal/wwwroot
          drush dl missing_module
          drush en missing_module
    2. 管理者として RPM ベースのポータルにログインします。
    3. Drupal メニューで [Reports] > [Status reports] を選択し、不足しているモジュールがないか確認します。
    4. 上記のレポートを確認して足りないモジュールをインストールするか、次のコマンドを実行します。
      cd /opt/apigee/apigee-drupal/wwwroot
          drush dl <moduleA> <moduleB> ...
          drush en <moduleA> <moduleB> ...
    5. すべてのモジュールを有効にした後、ファイルの所有者を「apigee」ユーザーにします。
      chown -LR apigee:apigee /opt/apigee/apigee-drupal/wwwroot

      ファイルのパーミッションの詳細については、https://www.drupal.org/node/244924 をご覧ください。

  12. RPM ベースのポータルで、update.php をブラウザで実行し、不足モジュールに関するエラーを取り除きます。
    1. 管理者として RPM ベースのポータルにログインします。
    2. ブラウザで次の URL に移動します。
      http://portal_IP_or_DNS:8079/update.php

      ここで、portal_IP_or_DNS は、RPM ベースのポータルの IP アドレスまたはドメイン名です。

    3. 画面の指示に従います。
  13. DNS エントリを更新して、新しい RPM ベースのポータルを指すようにします。

    デフォルトのポート番号が互いに異なることにご注意ください。RPM ベースのポータルでは、デフォルトのポート番号は 8079 ですが、tar ベースのポータルでは 80 です。DNS エントリで必ず正しいポート番号を使用してください。別のポートを使用する方法については、ポータルで使用する HTTP ポートを設定するをご覧ください。

これで変換は完了です。