相关文章推荐
非常酷的消防车  ·  H2 vs. HyperSQL vs. ...·  1 年前    · 
热心的砖头  ·  Fresh Airsonic ...·  1 年前    · 

本文介绍将本地 Moodle 存档迁移到 Azure 的步骤。 此 Moodle 存档的内容包括 Moodle 应用程序、相关配置以及来自本地 Moodle 部署的数据库副本。 将本地备份成功导入 Azure 基础结构后,即可执行 Moodle 的配置更新。

在开始此过程之前,请确保完成以下文章中的所有步骤:

  • 如何为 Moodle 迁移做准备
  • Moodle 迁移体系结构和模板
  • Azure 资源管理器 (ARM) 模板部署完成后,登录到 Azure 门户 并转到你在部署过程中创建的资源组。 查看新创建的基础结构资源列表。 创建的资源类似于下图,具体取决于你用于部署的 ARM 模板。

    复制 Moodle 存档

    迁移过程的第一步是将 Moodle 备份存档从 Azure Blob 存储复制到用于 Moodle 部署的控制器虚拟机 (VM)。 这是在 创建存档 中创建的同一存档。

    登录到控制器虚拟机

  • 使用免费的开源终端模拟器或串行控制台工具(如 PuTTY )登录控制器 VM。

  • 在“PuTTY 配置”中,输入控制器 VM 的公共 IP 地址作为“主机名”。

  • 在左侧导航栏中,展开 SSH。

  • 选择“身份验证”,然后找到用于使用 ARM 模板部署 Azure 基础结构的 SSH 密钥文件。

  • 选择“打开” 。 对于用户名,请输入 azureadmin,因为它在模板中硬编码。

    有关 PuTTY 详细信息,请参阅 PuTTY 常规常见问题解答/疑难解答

    在控制器 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/
    

    备份当前配置

    在开始导入过程之前,建议备份默认或当前配置。

  • 创建备份目录:

    cd /home/azureadmin/
    mkdir -p backup
    mkdir -p backup/moodle
    mkdir -p backup/moodle/html
    
  • 创建 moodlemoodledata 目录的备份:

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

    将 Moodle 存档复制到控制器 VM

  • 运行以下命令,将压缩的 storage.tar.gz 备份文件从 Azure Blob 存储下载到控制器 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"

  • 将压缩文件解压到目录。

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

    将 Moodle 文件导入 Azure

    解压后,可以在 home/azureadmin 下找到 storage 目录。 此 storage 目录包含 moodlemoodledataconfiguration 目录,以及一个数据库备份文件。 执行以下步骤将这些文件和目录中的每一个复制到目标位置:

  • moodlemoodledata 目录复制到 /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 门户配置防火墙。

    运行以下 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 门户中,从部署的 Moodle 基础结构资源中选择 Azure Database for MySQL 服务器。 在服务器页面的左侧导航中,选择“连接安全”。

    你可以在此处添加允许的 IP 地址并配置防火墙规则。 创建规则后,选择“保存”。

    现在可以使用 mysql 命令行工具或 MySQL Workbench 来连接到 MySQL 服务器。

    要获取连接信息,请转到 Azure 门户中 MySQL 服务器的“概览”页面。 使用每个字段旁边的复制图标复制“服务器名称”和“服务器管理员登录名”。

    例如,服务器名称可能是 mydemoserver.mysql.database.azure.com,服务器管理员登录名可能是 myadmin@mydemoserver

    还需要密码。 如果需要重置密码,请在菜单栏中选择“重置密码”。

    在以下部分使用这些数据库服务器详细信息。

    将 Moodle 数据库导入 Azure Database for MySQL

  • 创建 MySQL 数据库,将本地数据库导入到:

    mysql -h $server_name -u $server_admin_login_name -p$admin_password -e "CREATE DATABASE $moodledbname CHARACTER SET utf8;"
    
  • 为数据库分配正确的权限:

    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';"
    
  • 导入数据库:

    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 名称,请执行以下操作:

  • 在 Azure 门户,从部署的 Moodle 基础结构资源中选择“负载均衡器公共 IP 地址”。

  • 在“概览”页面上,选择“DNS 名称”旁边的复制图标。

    要更新 config.php 文件,请执行以下操作:

  • 输入以下命令以在 nano 编辑器中编辑 config.php

    cd /moodle/html/moodle/
    nano config.php
    
  • 使用从 Azure 门户复制的值更新文件中的数据库详细信息:

    $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'.
    
  • 进行更改后,按 Ctrl+O 保存文件,按 Ctrl+X 退出编辑器。

    你可以将本地 dataroot 目录存储在任何位置。

    配置目录权限

  • 将 755 和 www-data owner:group 权限分配给 moodle 目录。

    sudo chmod 755 /moodle/html/moodle sudo chown -R www-data:www-data /moodle/html/moodle
    
  • 将 770 和 www-data owner:group 权限分配给 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 名称。

  • 打开 NGINX 配置文件:

    nano /etc/nginx/sites-enabled/*.conf
    
  • ARM 模板部署将 NGINX 服务器设置为端口 81。 如果不是 81,则将文件中的 SERVER_PORT 更新为 81。

  • 更新 server_name。 例如,对于 server_name on-premises.com,使用 DNS 名称更新 on-premises.com。 大多数情况下,DNS 名称在迁移过程中不会更改。

  • 更新 HTML root 目录位置。 例如,将 root /var/www/html/moodle; 更新为 root /moodle/html/moodle;

    本地根目录可以位于任何位置。

  • 进行更改后,按 Ctrl+O 保存文件,按 Ctrl+X 退出。

    安装任何缺少的 PHP 扩展

    ARM 部署模板安装以下 PHP 扩展:

  • mbstring
  • mcrypt
  • redis
  • bcmath
  • mysql
  • xmlrpc
  • 如果控制器 VM 上没有本地 Moodle 应用程序中包含的任何 PHP 扩展,可以手动安装它们。

    要获取本地应用程序中的 PHP 扩展列表,请运行:

    php -m
    

    要安装缺少的扩展,请运行:

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

    确保控制器 VM 上的 Web 服务器实例已停止

  • 重启 Web 服务器。

    sudo systemctl restart nginx
    sudo systemctl restart php$_PHPVER-fpm
    
  • 停止 Web 服务器。

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

    当请求到达 Azure 负载均衡器时,它现在重定向到虚拟机规模集实例,而不是控制器 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 迁移过程的后续步骤。

  •