如何在Ubuntu18.04上安装和配置Mahara
作者选择了 COVID-19 Relief Fund 作为 Write for DOnations 计划的一部分来接受捐赠。
介绍
Mahara 是一个开源的 ePortfolio 和社交网络系统,自称是“以学习者为中心的个人学习环境”。 Mahara 在学术机构中特别受欢迎,它为学习者提供了一个平台来管理和分享他们的知识和成长。 在远程学习环境中,Mahara 可以帮助教育工作者打造数字课堂并组织学生的学习进度。 与更传统的学习管理系统 (LMS) 不同,Mahara 更加分散且以用户为中心。 如此多的用户创造力与其他更制度化的系统形成鲜明对比。
Mahara 也有许多非学生申请。 您可以使用它来构建博客、简历构建器、文件存储库或能力框架。
在本指南中,您将安装 Mahara 并将其配置为使用 Postgres 数据库 作为身份验证源。 完成后,您将拥有对基于服务器的 ePortfolio 的管理访问权限。
先决条件
- 一台具有非 root
sudo
用户和防火墙的 Ubuntu 18.04 服务器。 您可以按照我们的 Ubuntu 18.04 初始服务器设置指南 获取说明。 - 安装了 Postgres 关系数据库管理系统。 您可以按照我们的 如何在 Ubuntu 18.04 上安装和使用 PostgreSQL 指南获取说明。 Step 1 — 安装 PostgreSQL 就足够了。
- 安装了 Apache 和 PHP。 您可以按照我们的 如何在 Ubuntu 18.04 上安装 Linux、Apache、MySQL、PHP(LAMP 堆栈)指南获取说明。 请注意,Mahara 建议使用 Postgres 而不是 MySQL,但您可以 按照本指南的第 2 步来安装和使用 MySQL 。
- 配置为指向您的服务器的域名。 要将域指向 DigitalOcean Droplets,请按照我们的 如何从通用域注册商 指南指向 DigitalOcean 名称服务器。 本教程将以
mahara.your_domain
为例。 - 使用
ServerName
指令为域配置的虚拟主机。 如需指南,请跳至 如何在 Ubuntu 18.04 上安装 Apache Web 服务器中的 第 5 步 — 设置虚拟主机(推荐)。 - 按照 如何在 Ubuntu 18.04 上使用 Let's Encrypt 指南来保护 Apache,为您配置的域设置 Let's Encrypt 证书。
第 1 步 — 为 Mahara 创建数据库和用户
您的第一步是为 Mahara 创建一个 Postgres 数据库和用户。
从服务器的命令行,切换到 postgres
用户:
sudo -i -u postgres
-i
开关提供交互式外壳,而与 -u
开关一起使用的 sudo
允许您切换用户。
现在创建一个 Postgres 用户; 确保将 mahara
替换为您的首选用户名:
createuser -SRDP mahara
Postgres 将提示您输入 Enter password for a new role:
。 role
这里指的是你要创建的新用户。 提供您选择的密码,然后在出现提示时重新输入密码。
现在为您的 Mahara 安装创建一个数据库。 使用以下命令,将 maharadb
替换为新数据库的首选名称,将 mahara
替换为您刚刚创建的新用户:
createdb -O mahara -EUTF8 maharadb
您现在可以退出 postgres
用户:
exit
注意: 推荐使用 Postgres 作为你的 Mahara 数据库,但是如果你决定使用 MySQL,你需要为 Mahara 建立一个新的用户和数据库。 为此,请使用以下命令登录您的 MySQL 根帐户:
mysql -u root -p
提供您的 MySQL root 密码以获得访问权限。 现在创建您的 Mahara 数据库。 将 maharadb
替换为另一个名称:
create database maharadb character set UTF8;
接下来,为 Mahara 创建一个新的 MySQL 用户,设置密码,并授予它访问您的 maharadb
数据库的权限。 请记住提供强密码代替 password
并将 mahara
替换为您想要的用户名:
grant all on maharadb .* to 'mahara '@'localhost' identified by 'password';
您现在已经为 Mahara 创建了一个数据库并创建了一个角色。 现在您可以安装和配置 Mahara。
第 2 步 — 下载 Mahara
现在您已经为 Mahara 创建并配置了一个数据库,让我们下载 Mahara 本身。 您可以从 Mahara 的服务器下载标准版本,您可以在此处找到最新的 Mahara 版本。
获得最新稳定版本的 .tar.gz
链接后,使用 wget
命令下载它。 确保将 /19.10/19.10.2/+download/mahara-19.10.2.tar.gz
替换为您选择的版本:
wget https://launchpad.net/mahara/19.10/19.10.2/+download/mahara-19.10.2.tar.gz
这将下载一个标记为 mahara-19.10.2.tar.gz
的压缩文件。 解压压缩文件,创建 Mahara 目录结构:
tar xzvf mahara-19.10.2.tar.gz ls
ls
命令检查提取。 您现在将看到新的 mahara-19.10.2
目录:
Outputmahara-19.10.2.tar.gz mahara-19.10.2
让我们将 Mahara 复制到 /var/www/mahara.your_domain
。 mahara.your_domain
应该与您在 Prerequisite 部分的虚拟主机配置步骤中创建的目录匹配。
注意: Mahara 必须安装到一个空目录中。 如果这里已经有文件,请考虑更改 DocumentRoot
并使用新目录。
现在复制 Mahara 目录:
sudo cp -a mahara-19.10.2/. /var/www/mahara.your_domain/
-a
开关确保系统将文件权限与文件和文件夹一起复制。 源文件末尾的 .
确保源目录中的所有内容,包括隐藏文件,都被复制到目标目录。
Mahara 需要额外的 PHP 扩展才能正常工作。
运行以下命令来安装所有必要的依赖项:
sudo apt update sudo apt install php-gd php-pgsql php-xmlrpc php-xml php-curl php-mbstring
键入 y
以获取完成安装的任何提示。
您已经在服务器上安装了 Mahara。 接下来,您将创建 dataroot 目录。
第 3 步 — 创建 Dataroot 目录
现在您已经设置了 Mahara 代码,让我们创建一个 dataroot 目录。 这是 Mahara 将写入上传的文件以及它需要运行的其他一些文件的地方。 因此,Web 服务器需要能够对其进行写入。
dataroot 目录也应该在您拥有 Mahara 代码的目录之外。 您应该完全避免将它放在您的 public_html
目录中。
让我们在 /var/maharadata
中创建目录:
sudo mkdir /var/maharadata
用 chown
更新所有权:
sudo chown -R www-data:www-data /var/maharadata
这允许 Web 服务器写入目录。 现在我们可以完成对 Mahara 的配置。
第 4 步 — 设置 Mahara 配置文件
在这一步中,您将对 Mahara 的 config.php
文件进行一些最终调整。 这些调整将连接您的数据库并加密您的密码。
切换到 Mahara 代码目录:
cd /var/www/mahara.your_domain/htdocs
通过复制 htdocs
目录中的 config-dist.php
文件来创建您的 config.php
文件。
更改目录并复制文件:
cp config-dist.php config.php
现在使用 nano
或您喜欢的文本编辑器打开 config.php
:
nano config.php
在文件中找到以下部分并进行所需的更改。 除非您使用 MySQL,否则将 $cfg->dbtype
保留为 postgres
,在这种情况下将其更改为 mysql
。 分别更改 maharadb
、mahara
和 dbpassword
以匹配您在 Step 1 中为数据库名称、用户和密码使用的值:
./htdocs/config.php
... $cfg->dbtype = 'postgres'; $cfg->dbhost = 'localhost'; $cfg->dbport = null; // Change if you are using a non-standard port number for your database $cfg->dbname = 'maharadb'; $cfg->dbuser = 'mahara'; $cfg->dbpass = 'dbpassword'; ...
在同一文件中,找到以下部分:
/var/www/mahara/htdocs/config.php
... $cfg->dataroot = '/path/to/uploaddir'; ...
将其更改为指向 Mahara 的 dataroot 目录,就像您在 Step 3 中设置的那样:
/var/www/mahara/htdocs/config.php
... $cfg->dataroot = '/var/maharadata'; ...
最后,让我们用随机秘密字符串更新 passwordsaltmain
。 这会加密存储的用户密码。 找到并取消注释以下行:
/var/www/mahara/htdocs/config.php
... // $cfg->passwordsaltmain = 'some long random string here with lots of characters'; ...
您可以使用 OpenSSL rand
函数生成一个随机字符串以用作您的秘密盐字符串。 打开一个新终端,再次连接到您的服务器,然后运行以下命令来生成此字符串:
openssl rand -base64 32
-base64 32
选项确保 Base64 编码的字符串长度为 32 个字符。 将 passwordsaltmain
的值更新为 your_generated_salt
:
/var/www/mahara/htdocs/config.php
... $cfg->passwordsaltmain = 'your_generated_salt'; ...
警告: 一旦设置,您不能丢失此字符串,否则您将需要重置所有用户密码。 最好对 config.php
文件进行安全备份
注意: 在使用 Mahara 作为开发或测试站点时,您可能希望将 productionmode
设置为 false。 将此设置为 false 将启用警告和错误消息的屏幕显示以帮助测试。
保存并关闭文件。
配置 Mahara 后,您就可以使用 Apache Web 服务器为 Mahara 提供服务了。
第 5 步 — 配置 Apache
在先决条件中,您配置了一个域并将其指向此服务器。 您还安装了 Apache 并使用 Let's Encrypt 设置了 HTTPS。 现在让我们使用 Apache 来为 Mahara 服务。
如果您的虚拟主机配置文件名为 mahara.your_domain.conf
,Let's Encrypt 创建了一个名为 mahara.your_domain-le-ssl.conf
的新配置文件,用于处理您的域的 HTTPS 请求。
打开那个文件。 请务必将 mahara.your_domain
替换为文件的实际名称:
sudo nano /etc/apache2/sites-available/mahara.your_domain-le-ssl.conf
该文件将类似于以下内容:
/etc/apache2/sites-available/your_domain-le-ssl.conf
... <IfModule mod_ssl.c> <VirtualHost *:443> ServerAdmin webmaster@localhost ServerName mahara.your_domain DocumentRoot /var/www/mahara.your_domain ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLCertificateFile /etc/letsencrypt/live/mahara.your_domain/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/mahara.your_domain/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf </VirtualHost> </IfModule> ...
ServerName
指令定义了应与此虚拟主机定义匹配的基域。 这也应该是您在 Prerequisites 部分中选择使用 SSL 证书保护的域名。
注意: 您的 Apache 配置不应包含 ServerAliases
。 Mahara 期望通过 一个 url 访问。 如果您使用服务器别名,您将遇到诸如必须登录两次和破坏单点登录 (SSO) 功能等问题。
但是,如果出于某种原因确实需要别名,则可以在上面的指令之外设置一个单独的第二个 VirtualHost 指令。
在文件中添加以下内容:
/etc/apache2/sites-available/your_domain-le-ssl.conf
... <IfModule mod_ssl.c> <VirtualHost *:443> ServerAdmin webmaster@localhost ServerName mahara.your_domain DocumentRoot /var/www/mahara.your_domain/htdocs <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/your_domain/htdocs> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLCertificateFile /etc/letsencrypt/live/mahara.your_domain/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/mahara.your_domain/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf </VirtualHost> </IfModule> ...
首先,更新 DocumentRoot
以包含 /htdocs
。 然后添加两个新块。
<Directory />
块是指文件系统根。 它指定适用于服务器上任何位置的所有文件和目录的指令。 为该块指定指令允许我们通过放置默认指令(例如 AllowOverride None
)来保护您的服务器免受入侵。
<Directory /var/www/mahara.your_domain/htdocs>
块是指 Mahara 的文档根。 此处声明的指令会覆盖在 <Directory />
块上声明的指令。 这些指令是为 Mahara 服务的 Apache 配置的基本要求。
保存并关闭文件。
您现在已准备好配置您的 PHP 服务。
第 6 步 — 调整 PHP 设置
最后一步是更新 Apache 的 php.ini
文件。 这将改变我们的日志记录详细程度并调整最大上传大小和 POST
大小。
打开文件:
sudo nano /etc/php/7.2/apache2/php.ini
这是一个大文件。 让我们一一浏览更新。
找到 log_errors
行并确保它与突出显示的代码匹配:
/etc/php/7.2/apache2/php.ini
. . . log_errors = On . . .
将 log_errors
设置为 On 将使 PHP 能够记录运行 Mahara 时遇到的错误以帮助调试。
现在找到以 upload_max_filesize = 2M
开头的行。 将 2M
替换为 50M
:
/etc/php/<^>7.2<^>/apache2/php.ini
. . . upload_max_filesize = 50M . . .
这会将最大上传文件大小增加到 50 兆字节。
现在找到以 post_max_size = 8M
开头的行。 将 8M
替换为 100M
:
/etc/php/<^>7.2<^>/apache2/php.ini
. . . post_max_size = 100M . . .
upload_max_filesize
是允许发布的文件的最大大小,而 post_max_size
是所有 POST
正文数据允许的最大大小。 所以你总是希望第二个数字更高。 这些设置将使 Mahara 能够以设置的最大值接受文件上传。
现在移动到文件末尾并添加以下指令:
/etc/php/7.2/apache2/php.ini
... register_globals = Off magic_quotes_runtime = Off magic_quotes_sybase = Off magic_quotes_gpc = Off allow_call_time_pass_reference = Off
register_globals = Off
禁用 register_globals
。 启用它具有安全隐患,如 PHP 手册 中强调的那样。
将 magic_quotes_runtime
设置为 Off
会阻止 PHP 自动转义来自外部源(POST
/GET
)的任何函数的反斜杠引号。 magic_quotes_runtime
、magic_quotes_sybase
和 magic_quotes_gpc
已弃用。
allow_call_time_pass_reference
也被弃用了。
保存并关闭文件。
现在重新启动 Apache:
sudo systemctl restart apache2
这样就完成了您的服务器设置。 您现在可以运行 Mahara 安装程序并通过 Web 浏览器输入您的 ePortfolio。
第 7 步 — 运行 Mahara 安装程序
正确配置 Apache 和 PHP 后,让我们继续通过其基于 Web 的安装程序完成 Mahara 的安装。
在您的浏览器中,导航到您的服务器的域名。 将出现一个屏幕,显示 Mahara 的许可信息和一个继续安装的按钮。
单击 Install Mahara 按钮并等待安装程序完成所有安装。 完成后,向下滚动。 你会看到一个部分说成功安装 Mahara。 继续 . 点击继续继续。
Mahara 将提示您输入新密码和主电子邮件地址。 继续并提交表格。
您已准备好开始使用 Mahara。 但在您开始探索新的 ePortfolio 之前,您可能需要设置一些最终功能。
设置电子邮件
对于生产设置,请确保 Mahara 可以发送电子邮件。 这对于在用户在网站上注册后发送通知(例如确认电子邮件)很有用。 您可以使用管理员设置指定 外发 SMTP 服务器。 点击右上角的下拉菜单,选择配置站点 -> 站点选项 -> 电子邮件。
设置 Cron 作业
最后,考虑设置一个 cron 作业以每分钟点击 htdocs/lib/cron.php
。 如果不进行此设置,您会发现 RSS 提要不会更新,并且某些电子邮件通知也不会发送出去。 继续并输入以下命令。 您将获得一个选项来选择您选择的编辑器。 在这个例子中,我们继续使用 nano
编辑器:
sudo crontab -e
在文件底部添加以下行,将 mahara.your_domain
替换为您在 Step 2 上安装 Mahara 的目录名称:
* * * * * php /var/www/mahara.your_domain/htdocs/lib/cron.php
配置好电子邮件和 cron 作业后,您现在可以使用 Mahara。
结论
Mahara 是一个强大且受欢迎的平台。 对于教师和学习者来说,它是一个很好的资源,尤其是在远程学习环境中。 Mahara 在教育之外也很受欢迎,用户创建博客和简历构建者。
用户还可以从众多主题中进行选择,而管理员可以探索大型插件库。
熟悉用户界面后,考虑关注 Mahara 网站 上的 Next Steps 文章以获得更多想法。