网站搜索

如何在 CentOS 8 中使用 Nginx 安装 Moodle 学习平台


Moodle 是世界上最受欢迎的学习管理系统,用于构建强大的在线学习网站。它具有一系列可供您选择的活动和教育工具,支持评估管理并附带自定义证书。它还可以通过强大的视频会议工具与您的学生进行实时交流。此外,它支持移动设备,因此您的学生可以通过他们的移动设备进行学习。

Moodle 服务器要求

  • 操作系统:安装了 LEMP 堆栈的 CentOS 8 或 RHEL 8 服务器的最小安装。
  • 磁盘空间:Moodle 需要 200MB,5GB 可能是存储内容的实际最小空间。
  • 处理器:建议使用 1GHz(最低)、2GHz 双核或更高频率。
  • 内存:512MB(最小),建议1GB或更多。大型生产服务器上可能需要 8GB 以上。

在本页

  • 为 Moodle 网站创建域名 DNS 记录
  • 在CentOS 8服务器中安装Moodle学习平台
  • 配置 NGINX 为 Moodle 网站提供服务
  • 通过 Web 安装程序完成 Moodle 安装
  • 使用 Let’s Encrypt 在 Moodle 站点上启用 HTTPS

为 Moodle 网站创建域名 DNS 记录

1. 首先创建一个子域,用户将使用该子域访问 Moodle 在线学习网站。例如,如果您的域名是 testprojects.me,您可以创建一个名为 learning.testprojects.me 的子域。

打开域名的高级 DNS 设置并添加 A 记录,如下图所示。

在 CentOS 8 服务器中安装 Moodle

2.在安装Moodle之前,请确保您的服务器上有所需的PHP扩展,您可以运行以下命令来安装它们:

dnf install php-common php-iconv php-curl php-mbstring php-xmlrpc php-soap php-zip php-gd php-xml php-intl php-json libpcre3 libpcre3-dev graphviz aspell ghostscript clamav

3. 接下来,为 Moodle 应用程序创建一个数据库,如下所示。

mysql -u root -p

然后创建数据库、数据库用户并创建安全密码以供使用。

MariaDB [(none)]> CREATE DATABASE moodledb;
MariaDB [(none)]> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,CREATE TEMPORARY TABLES,DROP,INDEX,ALTER ON moodledb.* TO 'moodleadmin'@'localhost' IDENTIFIED BY 'p@zzwd0L2';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exit

4. 现在从官方moodle项目网站下载最新版本的Moodle(撰写本文时为3.9),解压存档文件并将其移动到您的 webroot (/var/www/html/) 目录中,然后设置适当的权限和所有权以允许 Web 服务器访问 Moodle 目录,如下所示。

wget -c https://download.moodle.org/download.php/direct/stable39/moodle-latest-39.tgz
tar -xzvf  moodle-latest-39.tgz
mv moodle /var/www/html/
chmod 775 -R /var/www/html/moodle
chown nginx:nginx -R /var/www/html/moodle

5.接下来,创建moodledata目录,该目录是Moodle界面上传或创建的文件的位置,然后分配适当的权限和所有权以允许网络服务器对其进行读写访问:


mkdir -p /var/www/html/moodledata
chmod 770 -R /var/www/html/moodledata
chown :nginx -R /var/www/html/moodledata

6. 接下来,进入 Moodle 安装目录并从示例 config.dist.php< 创建一个 config.php 文件提供的 文件,然后打开它进行编辑,为您的 Moodle 平台配置一些关键设置,例如数据库连接参数和站点位置以及在哪里可以找到 mudledata 目录:

cd /var/www/html/moodle/
cp config-dist.php config.php
vim config.php

设置正确的数据库类型、正确的数据库主机、数据库名称以及数据库用户和用户密码。

$CFG->dbtype    = 'mariadb';      // 'pgsql', 'mariadb', 'mysqli', 'sqlsrv' or 'oci'
$CFG->dblibrary = 'native';     // 'native' only at the moment
$CFG->dbhost    = 'localhost';  // eg 'localhost' or 'db.isp.com' or IP
$CFG->dbname    = 'moodledb';     // database name, eg moodle
$CFG->dbuser    = 'moodleadmin';   // your database username
$CFG->dbpass    = 'p@zzwd0L2';   // your database password
$CFG->prefix    = 'mdl_';       // prefix to use for all table names

7.同时设置用于访问您的Moodle站点的URL,这指定了您的Moodle Web文件所在的wwwroot的位置,并且还有dataroot(moodledata 目录):

$CFG->wwwroot   = 'http://learning.testprojects.me';
$CFG->dataroot  = '/var/www/html/moodledata';

配置 NGINX 为 Moodle 网站提供服务

8. 在本部分中,您需要配置 NGINX 来为您的 Moodle 应用程序提供服务。您需要在 NGINX 配置中为其创建一个服务器块,如图所示。

vim /etc/nginx/conf.d/moodle.conf

将以下配置复制并粘贴到服务器块配置文件中。将服务器名称替换为上面创建的子域名fastcgi_pass应指向php-fpm(注意在 CentOS 8 上,PHP-FPM 使用 /etc/nginx/conf.d/ 中定义的地址接受 FastCGI 请求php-fpm.conf 配置)。

server{
   listen 80;
    server_name learning.testprojects.me;
    root        /var/www/html/moodle;
    index       index.php;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ ^(.+\.php)(.*)$ {
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        fastcgi_index           index.php;
        fastcgi_pass            php-fpm;
        include                 /etc/nginx/mime.types;
        include                 fastcgi_params;
        fastcgi_param           PATH_INFO       $fastcgi_path_info;
        fastcgi_param           SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}

保存文件并关闭它。

9.然后检查NGINX配置是否正确,如果Ok,则重新启动nginx php-fpm 服务来应用最近的更改:

nginx -t
systemctl restart nginx
systemctl restart php-fpm

10.如果您的系统上启用了SELinux,请运行以下命令来设置正确的上下文以访问Moodle网络文件服务器:

setsebool -P httpd_can_network_connect on
chcon -R --type httpd_sys_rw_content_t /var/www/html

11.此外,确保防火墙中打开HTTPHTTPS服务,以允许流量到达NGINX网络服务器:

firewall-cmd --permanent --zone=public --add-service=http 
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload

通过 Web 安装程序完成 Moodle 安装

12. 要访问 Moodle 网络安装程序,请打开网络浏览器,然后使用您在上面创建的子域进行导航:

http://learning.testprojects.me

欢迎页面加载后,请仔细阅读条款和条件,然后单击继续

13.接下来,网络安装程序将检查您的系统是否满足运行指定版本的Moodle站点的要求。您可以向下滚动查看更多信息。

14.安装程序会抱怨HTTPS未启用,暂时忽略该错误(在下一节中,我们将展示如何在 Moodle 上启用 HTTPS),然后单击继续,开始实际安装网络文件。

15.现在安装程序将开始实际安装Moodle文件,如下面的屏幕截图所示。完成后,点击继续

16. 在下一步中,您需要通过更新用户名、密码、名字和姓氏以及电子邮件地址来更新 Moodle 网站的管理员帐户。然后向下滚动页面并点击更新个人资料

17. 然后更新 Moodle 网站首页设置。然后向下滚动并点击更新开始使用您的 Moodle 网站。

18.接下来,您需要按照屏幕上的说明注册您的网站。您可以通过单击仪表板转到仪表板。

使用 Let’s Encrypt 在 Moodle 站点上设置 HTTPS

HTTPS 为您的站点添加了第一层安全保障,以确保您的用户和 Moodle 应用程序(尤其是接收消息的 NGINX Web 服务器)之间的安全通信请求并提供响应)。

您可以从商业 CA 购买 SSL/TLS 证书,也可以使用免费且所有现代网络浏览器都能识别的 Let’s Encrypt。在本指南中,我们将使用Let’s Encrypt

19. Let’s Encrypt 证书部署是使用 certbot 工具自动管理的。您可以使用以下命令安装 certbot 和其他所需的软件包:

dnf install certbot python3-certbot-nginx

20. 然后运行以下命令获取 Let's Encrypt 证书,并让 Certbot 自动编辑您的 NGINX 配置来为其提供服务(它还会配置HTTP 自动重定向到 HTTPS)。

certbot --nginx

21. 然后运行以下命令以启用 Let’s Encrypt SSL/TLS 证书的自动续订:

echo "0 0,12 * * * root python3 -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew -q" | sudo tee -a /etc/crontab > /dev/null

22. 接下来,更新您的 Moodle 配置以开始使用 HTTPS

vim /var/www/html/moodle/config.php

wwwroot 网址从 HTTP 更改为 HTTPS

$CFG->wwwroot   = 'https://learning.testprojects.me';

23. 最后但并非最不重要的一点是,确认您的 Moodle 网站现在正在 HTTPS 上运行。

现在就是这样!有关运行新学习平台的更多信息和配置选项,请访问 Moodle 网站并阅读官方文档。