手動による Moodle 移行の手順

この記事では、オンプレミスの Moodle アーカイブを Azure に移行する手順について説明します。 この Moodle アーカイブの内容には、Moodle アプリケーション、関連する構成、オンプレミスの Moodle デプロイからのデータベースのコピーが含まれます。 オンプレミスのバックアップが Azure インフラストラクチャに正常にインポートされたら、Moodle の構成の更新を実行します。

このプロセスを開始する前に、次の記事に記載されているすべての手順を確実に完了してください。

Azure Resource Manager (ARM) テンプレートのデプロイが完了したら、Azure portal にサインインし、デプロイ プロセスの一環として作成したリソース グループに移動します。 新しく作成されたインフラストラクチャ リソースの一覧を確認します。 作成されたリソースは、デプロイに使用した ARM テンプレートにもよりますが、次の図のようになります。

Moodle 移行リソース グループに作成されたインフラストラクチャ リソースを示すスクリーンショット。

Moodle アーカイブをコピーする

移行プロセスの最初の手順では、Moodle バックアップ アーカイブを Azure Blob Storage から Moodle デプロイのコントローラー仮想マシン (VM) にコピーします。 これは、アーカイブの作成で作成したのと同じアーカイブです。

コントローラー仮想マシンにサインインする

  1. 無料のオープンソースのターミナル エミュレーターまたはシリアル コンソール ツール (PuTTY など) を使用して、コントローラー VM にサインインします。

  2. [PuTTY Configuration](PuTTY の構成) で、コントローラー VM のパブリック IP アドレスを ホスト名 として入力します。

  3. 左側のナビゲーションで、 [SSH] を展開します。

    [PuTTY Configuration](PuTTY の構成) ページのスクリーンショット。

  4. [Auth](認証) を選択し、ARM テンプレートを使用して Azure インフラストラクチャをデプロイしたときに使用した SSH キー ファイルを見つけます。

  5. [Open] を選択します。 ユーザー名として「azureadmin」と入力します (これがテンプレートにハードコーディングされているため)。

    SSH 認証設定を示す PuTTY 構成ページのスクリーンショット。

PuTTY の詳細については、PuTTY の一般的な FAQ/トラブルシューティングの質問に関するページをご覧ください。

コントローラー VM に AzCopy をダウンロードしてインストールする

コントローラー VM にサインインしたら、次のコマンドを実行して AzCopy をインストールします。

sudo -s
wget https://aka.ms/downloadazcopy-v10-linux
tar -xvf downloadazcopy-v10-linux
sudo rm /usr/bin/azcopy
sudo cp ./azcopy_linux_amd64_*/azcopy /usr/bin/

現在の構成をバックアップする

インポート プロセスを開始する前に、既定の、または現在の構成をバックアップすることをお勧めします。

  1. バックアップ ディレクトリを作成します。

    cd /home/azureadmin/
    mkdir -p backup
    mkdir -p backup/moodle
    mkdir -p backup/moodle/html
    
  2. moodle ディレクトリと moodledata ディレクトリのバックアップを作成します。

    mv /moodle/html/moodle /home/azureadmin/backup/moodle/html/moodle
    mv /moodle/moodledata /home/azureadmin/backup/moodle/moodledata
    

Moodle アーカイブをコントローラー VM にコピーする

  1. 次のコマンドを実行して、圧縮された storage.tar.gz バックアップ ファイルを Azure Blob Storage からコントローラー VM の /home/azureadmin/ ディレクトリにダウンロードします。

    sudo -s
    cd /home/azureadmin/
    azcopy copy "https://<storageaccount>.blob.core.windows.net/<container>/<BlobDirectoryName><SAStoken>" "/home/azureadmin/storage.tar.gz"
    

    ご自身のストレージ アカウントと SAS トークンの値に置き換えます。 次に例を示します。

    azcopy copy "https://onpremisesstorage.blob.core.windows.net/migration/storage.tar.gz?sv=2019-12-12&ss=" "/home/azureadmin/storage.tar.gz"

  2. 圧縮されたファイルをディレクトリに抽出します。

    cd /home/azureadmin
    tar -zxvf storage.tar.gz
    

Moodle ファイルを Azure にインポートする

抽出が終わると、home/azureadmin の下に storage ディレクトリが見つかります。 この storage ディレクトリには、moodlemoodledataconfiguration ディレクトリ、およびデータベース バックアップ ファイルが格納されています。 これらの各ファイルとディレクトリを、次の手順でターゲットの場所にコピーします。

  1. moodle および moodledata ディレクトリを /moodle の下の共有の場所にコピーします。

    cp -rf /home/azureadmin/storage/moodle /moodle/html/
    cp -rf /home/azureadmin/storage/moodledata /moodle/moodledata
    

Moodle データベースを Azure にインポートする

Azure Database for MySQL サーバーに接続し、オンプレミスの Moodle データベース アーカイブを Azure Database for MySQL にインポートします。

MySQL サーバーに接続する

Azure Database for MySQL インスタンスは、ファイアウォールによって保護されます。 既定では、サーバーとサーバー内部のデータベースに対する接続はすべて拒否されます。 初めて Azure Database for MySQL に接続する場合は、その前に、コントローラー VM のパブリック IP アドレスまたは IP アドレス範囲のアクセスを許可するようにファイアウォールを構成します。

ファイアウォールを構成するには、Azure コマン ドライン (Azure CLI) または Azure portal を使用します。

次の Azure CLI コマンドを実行します。プレースホルダーはご自身の値に置き換えてください。

az mysql server firewall-rule create --resource-group <myresourcegroup> --server <mydemoserver> --name <AllowMyIP> --start-ip-address <192.168.0.1> --end-ip-address <192.168.0.1>

または、Azure portal 内で、デプロイされているご自身の Moodle インフラストラクチャ リソースから Azure Database for MySQL サーバーを選択します。 サーバー ページの左側のナビゲーションで、 [接続のセキュリティ] を選択します。

ここで、許可されている IP アドレスを追加し、ファイアウォール規則を構成できます。 規則を作成した後、 [保存] を選択します。

Azure Database for MySQL サーバーの [接続セキュリティ] ウィンドウのスクリーンショット。

これで、mysql コマンド ライン ツールまたは MySQL Workbench を使用して MySQL サーバーに接続できます。

MySQL Workbench の [Setup New Connection](新しい接続の設定) 画面のスクリーンショット。

接続情報を取得するには、Azure portal の MySQL サーバーの [概要] ページに移動します。 各フィールドの横のコピー アイコンを使用して、サーバー名サーバー管理者ログイン名 をコピーします。

たとえば、サーバー名は mydemoserver.mysql.database.azure.com、サーバー管理者ログイン名は myadmin@mydemoserver の場合があります。

また、パスワードも必要です。 パスワードをリセットする必要がある場合は、メニュー バーの [パスワードのリセット] を選択します。

これらのデータベース サーバーの詳細は、次のセクションで使用します。

Moodle データベースを Azure Database for MySQL にインポートする

  1. オンプレミス データベースをインポートする MySQL データベースを作成します。

    mysql -h $server_name -u $server_admin_login_name -p$admin_password -e "CREATE DATABASE $moodledbname CHARACTER SET utf8;"
    
  2. 正しいアクセス許可をデータベースに割り当てます。

    mysql -h $server_name -u $server_admin_login_name -p$admin_password -e "GRANT ALL ON $moodledbname.* TO '$server_admin_login_name' IDENTIFIED BY '$admin_password';"
    
  3. データベースをインポートします。

    mysql -h $server_name -u $server_admin_login_name -p$admin_password $moodledbname < /home/azureadmin/storage/database.sql
    

構成を更新する

オンプレミスの Moodle データベース アーカイブを Azure Database for MySQL にインポートしたら、必要に応じて、コントローラー VM 上で次の構成を更新します。

  • Moodle 構成ファイルを更新する。
  • ディレクトリのアクセス許可を構成する。
  • PHP と NGINX Web サーバーを構成する。
  • DNS 名とその他の変数を更新する。
  • 不足している PHP 拡張機能をインストールする。
  • コントローラー VM 上の Web サーバー インスタンスが停止していることを確認する。
  • 構成ファイルを仮想マシン スケール セットにコピーするために共有の場所にコピーする。

Moodle 構成ファイルを更新する

Moodle 構成ファイル /moodle/config.php 内のデータベースの詳細パラメーターを更新します。

このタスクの DNS 名を取得するには:

  1. Azure portal 内で、デプロイされているご自身の Moodle インフラストラクチャ リソースから ロード バランサーのパブリック IP アドレス を選択します。

  2. [概要] ページで、DNS 名 の横のコピー アイコンを選択します。

config.php ファイルを更新するには:

  1. 次のコマンドを入力して、nano エディターで config.php を編集します。

    cd /moodle/html/moodle/
    nano config.php
    
  2. Azure portal からコピーした値を使用して、ファイル内のデータベースの詳細を更新します。

    $CFG->dbhost    = 'localhost';                // Change 'localhost' to the server name.
    $CFG->dbname    = 'moodle';                   // Change 'moodle' to the newly created database name.
    $CFG->dbuser    = 'root';                     // Change 'root' to the server admin login name.
    $CFG->dbpass    = 'password';                 // Change 'password' to the server admin login password.
    $CFG->wwwroot   = 'https://on-premises.com';  // Change 'on-premises' to the DNS name.
    $CFG->dataroot  = '/var/moodledata';          // Change the path to '/moodle/moodledata'.
    
  3. 変更後、Ctrl キーを押しながら O キーを押してファイルを保存し、Ctrl キーを押しながら X キーを押してエディターを終了します。

オンプレミスの dataroot ディレクトリを任意の場所に格納できます。

ディレクトリのアクセス許可を構成する

  • 755 と www-data の所有者:グループのアクセス許可を moodle ディレクトリに割り当てます。

    sudo chmod 755 /moodle/html/moodle sudo chown -R www-data:www-data /moodle/html/moodle
    
  • 770 と www-data の所有者:グループのアクセス許可を moodledata ディレクトリに割り当てます。

    sudo chmod 770 /moodle/moodledata sudo chown -R www-data:www-data /moodle/moodledata
    

Web 構成ファイルを更新する

NGINX conf ファイルをバックアップして更新します。

sudo mv /etc/nginx/sites-enabled/*.conf /home/azureadmin/backup/
cd /home/azureadmin/storage/configuration/
sudo cp -rf nginx/sites-enabled/*.conf /etc/nginx/sites-enabled/

PHP www.conf ファイルをバックアップして更新します。

_PHPVER='/usr/bin/php -r "echo PHP_VERSION;" | /usr/bin/cut -c 1,2,3'
echo $_PHPVER
sudo mv /etc/php/$_PHPVER/fpm/pool.d/www.conf /home/azureadmin/backup/www.conf
sudo cp -rf /home/azureadmin/storage/configuration/php/$_PHPVER/fpm/pool.d/www.conf /etc/php/$_PHPVER/fpm/pool.d/

NGINX 構成の変数を更新する

Azure クラウドの DNS 名を、オンプレミスの Moodle アプリケーションの DNS 名に更新します。

  1. NGINX 構成ファイルを開きます。

    nano /etc/nginx/sites-enabled/*.conf
    
  2. ARM テンプレートのデプロイによって、NGINX サーバーがポート 81 に設定されます。 81 でない場合は、ファイル内の SERVER_PORT を 81 に更新します。

  3. server_name を更新します。 たとえば、server_name on-premises.com の場合は、DNS 名を使用して on-premises.com を更新します。 ほとんどの場合、DNS 名は移行時に変更されません。

  4. HTML root ディレクトリの場所を更新します。 たとえば、root /var/www/html/moodle;root /moodle/html/moodle; に更新します。

    オンプレミスのルート ディレクトリは、任意の場所に配置できます。

  5. 変更後、Ctrl キーを押しながら O キーを押してファイルを保存し、Ctrl キーを押しながら X キーを押して終了します。

不足している PHP 拡張機能をインストールする

ARM デプロイ テンプレートによって、次の PHP 拡張機能がインストールされます。

  • fpm
  • cli
  • curl
  • zip
  • pear
  • mbstring
  • dev
  • mcrypt
  • soap
  • json
  • redis
  • bcmath
  • gd
  • mysql
  • xmlrpc
  • intl
  • xml
  • bz2

オンプレミスの Moodle アプリケーションに、コントローラー VM 上にない PHP 拡張機能がある場合は、手動でインストールできます。

オンプレミス アプリケーション内の PHP 拡張機能の一覧を取得するには、次を実行します。

php -m

不足している拡張機能をインストールするには、次を実行します。

sudo apt-get install -y php-<extension>

コントローラー VM 上の Web サーバー インスタンスが停止していることを確認する

  1. Web サーバーを再起動します。

    sudo systemctl restart nginx
    sudo systemctl restart php$_PHPVER-fpm
    
  2. Web サーバーを停止します。

    sudo systemctl stop nginx
    sudo systemctl stop php$_PHPVER-fpm
    

要求が Azure Load Balancer に達すると、その要求は仮想マシン スケール セットのインスタンスにリダイレクトされます。コントローラー VM にはリダイレクトされません。

構成ファイルをコピーする

PHP および Web サーバーの構成ファイルを、後で仮想マシン スケール セットのインスタンスにコピーするために、共有の場所にコピーします。

共有の場所に構成用ディレクトリを作成するには、次を実行します。

mkdir -p /moodle/config
mkdir -p /moodle/config/php
mkdir -p /moodle/config/nginx

PHP および Web サーバーの構成ファイルを共有ディレクトリにコピーするには、次を実行します。

cp /etc/nginx/sites-enabled/* /moodle/config/nginx
cp /etc/php/$_PHPVER/fpm/pool.d/www.conf /moodle/config/php

次の手順

Moodle コントローラー インスタンスとワーカー ノードの設定に関するページに進み、Moodle 移行プロセスの次の手順を実行します。