當前位置:
首頁 > 最新 > Ubuntu18.04LTS下搭建Web環境暨安裝Moodle平台

Ubuntu18.04LTS下搭建Web環境暨安裝Moodle平台

Ubuntu 18.04LTS

搭建Nginx+MariaDB+PHP環境和安裝Moodle平台

作者:學虹夜雨

版本:18.34.180502

版本說明:

Linux Ubuntu 18.04LTS(Bionic Beaver)

Nginx 1.14.0

MariaDB 10.1.29

PHP 7.2.3

Moodle 3.4.2+(Build: 20180502)

本文介紹一下如何在 Ubuntu這個基於debian開發版的 Linux 操作系統下搭建 WEB 服務環境(Nginx+MariaDB+PHP)以及 Moodle 3.4 的安裝。

本文主要針對初學者、對Linux不太熟悉的人,有經驗的朋友歡迎提出批評和建議。

特別申明:喜歡編譯安裝的讀者,請立即移動滑鼠到右上角單擊。

如果不想自己架設Moolde,可以使用本人製作的速裝光碟

③關注微信公眾號Moodle速裝獲取

一、準備工作

最小化安裝Ubuntu server 18.04 ,詳細安裝方案參考《Ubuntu18安裝圖文教程》。

安裝光碟鏡像 ubuntu-18.04-server-amd64.iso

鏡像下載地址:http://mirrors.ustc.edu.cn/ubuntu-releases/18.04/

啟動,選擇Install開始安裝

語言:English

區域:Other/Asia/China

編碼:en_US.UTF-8

鍵盤布局:English

網路:192.168.128.218/255.255.255.0192.168.128.2 223.6.6.6(根據實際網路環境修改)

主機名:ubuntu(默認即可,也可根據實際需要修改如moodle)

域名後綴:(默認為空,若伺服器分配有域名請填上)

Root密碼:(123456)

新用戶:moodle/123456

磁碟分區:

新手使用 Guided - use entire disk

軟體選擇:只選 OpenSSH server


Linux下面系統配置的修改,基本都是通過編輯文本文件進行的,所以一定要熟悉linux下面某個文本編輯器的使用,常用的是vi/vim和 nano,具體使用方法請大家自行百度吧,會簡單的插入、刪除、保存等操作就可以了,能會批量替換就更好了。

推薦大家使用nano,簡單的編輯很好用,最小化安裝好的Ubuntu系統是默認沒有nano工具的,所以先安裝nano工具(apt-get install -y nano),這樣就跟Debian一樣編輯了。

如果你是在虛擬機裡面安裝的,默認路由模式,可能是DHCP獲得的IP,我們要修改為靜態的,當然,虛擬機裡面要改為橋接模式。如果是物理機安裝,可能不需要這一步了,當然你以後修改IP地址或者其他設置也是需要的。只要把最後一部分按照你的網路環境修改即可。如果在系統安裝中已經手動設置好IP地址,也不需要更改網路環境,請直接閱讀【準備工作之02.修改源

(以下用紅色表示你需要輸入的命令,藍色表示配置修改內容,所有中文均為說明或注釋)

root@ubuntu:~#nano/etc/network/interfaces

# ifupdown hasbeen replaced by netplan(5) on this system. See

# /etc/netplanfor current configuration.

# To re-enableifupdown on this system, you can run:

# sudo apt install ifupdown

#當你仍然打開以前的配置文件你會發現當前網路已經被netplan替代

root@ubuntu:~#ll /etc/netplan

#當前配置文件為 01-netcfg.yaml

root@ubuntu:~#nano /etc/netplan/01-netcfg.yaml

# This filedescribes the network interfaces available on your system

# For moreinformation, see netplan(5).

network:

version: 2

renderer: networkd

ethernets:

ens33:

addresses: [ 192.168.128.218/24 ]

gateway4: 192.168.128.2

nameservers:

addresses:

- "223.6.6.6"

# IP地址addresses、網關gateway4和域名服務nameservers

#以上三項請按自己的網路環境作相應修改,不要照搬照抄

#保存退出

修改了網路設置,需要重啟網卡或重啟系統

root@ubuntu:~#netplan apply

命令正常,沒有任何提示,可以使用下面的命令查看IP

root@ubuntu:~#ip addr

如果有錯誤提示或IP還是不正確,就重啟系統:

root@ubuntu:~#systemctlreboot

如果和ubuntu之間有防火牆,注意ubuntu 的ssh 服務需要22埠開放。

伺服器通常會安裝防火牆,Ubuntu系統默認已經裝上Iptables防火牆,它是比較常用的免費防火牆,但防火牆允許所有的請求,就如沒有設置防火牆一樣。需要配置使用防火牆,請閱讀附錄部分

如果安裝系統的時候沒有勾選SSH,請先用下面的命令安裝好SSH服務:

root@ubuntu:~#apt-get installopenssh-server

如果自己輸入命令,linux支持命令的自動補齊,這樣在輸入較長的命令或者參數的時候,可以嘗試輸入幾個字母后敲tab鍵,自動補齊會大大提高我們的效率。

現在我們可以通過ssh遠程登錄到Ubuntu伺服器進行操作,這樣可以把我這裡的很多命令直接拷貝粘貼過去,會大大簡化操作。如果你的桌面是Linux系統,可以直接用ssh命令,如果桌面是Windows系統,可以下載一個PuTTy或SecureCRT程序,通過這個來遠程連接到Ubuntu伺服器。

若使用PuTTy無法登錄伺服器,那是因為Ubuntu默認禁止root用戶SSH登錄,請修改sshd配置

root@ubuntu:~#nano/etc/ssh/sshd_config

#允許root登錄,找到PermitRootLogin行修改為

PermitRootLoginyes

#保存退出,重啟ssh 服務

root@ubuntu:~#systemctlrestart sshd.service

本文後續命令在沒有特別說明下都是在PuTTy窗口下超級用戶下完成,如果你當前環境是普通用戶,請自行在前面添加sudo。


安裝卸載軟體我們選擇apt來完成,這樣會大大簡化安裝卸載軟體的操作步驟,一條命令即可安裝/卸載所有軟體包,不需要採用複雜的編譯操作。

特別申明:喜歡編譯安裝的讀者,請立即移動滑鼠到右上角單擊。

下面我們修改源(軟體源),Ubuntu8起默認源已有MariaDB,所以可以不用修改軟體源。但如果你原來安裝系統時使用的光碟鏡像較早,或者安裝時沒有選擇國內源,建議完成這步操作,把軟體源修改為科大源(這是Ubuntu官方主鏡像源),否則直接閱讀【準備工作之03.更新系統

root@ubuntu:~#mv/etc/apt/sources.list /etc/apt/sources.list.bak

root@ubuntu:~#nano/etc/apt/sources.list

#粘貼下述內容

debhttp://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse

debhttp://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universemultiverse

debhttp://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universemultiverse

debhttp://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universemultiverse

debhttp://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universemultiverse

deb-srchttp://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse

deb-srchttp://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universemultiverse

deb-srchttp://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universemultiverse

deb-src http://mirrors.ustc.edu.cn/ubuntu/bionic-proposed main restricted universe multiverse

deb-srchttp://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universemultiverse

#保存退出


更新源列表

root@ubuntu:~#apt-get update

更新已安裝的軟體

root@ubuntu:~#apt-getdist-upgrade -y

可以使用以下命令

查看系統內核版本

root@ubuntu:~#cat/proc/version

查看系統版本

root@ubuntu:~#cat /etc/debian_version

這裡,你能看到Ubuntu 18.04 是基於Debian 開發版本buster/sid的。

建議,你用ubuntu來建伺服器的話,還是選用Debian更好!


二、環境搭建

下面通過apt安裝必須的環境軟體

root@ubuntu:~#apt-get install-y mariadb-server nginx php7.2-fpm php7.2-mysql php7.2-gd php7.2-xsl php7.2-xmlrpcphp7.2-curl php7.2-intl php7.2-tidy php7.2-mbstring php7.2-soap php7.2-zip

一條命令安裝Nginx+MariaDB+PHP,注意這條命令比較長

等待幾分鐘,直到回到命令提示行,表示環境已經裝好。

任何操作系統下,安裝Nginx+MariaDB+PHP都不難,命令都很簡單,真正需要花心思的是對Nginx、MariDB和PHP的配置的修改,否則不是Moodle運行不流暢,而是Moodle根本無法安裝。


下面要修改一些配置,因為我們安裝的是Nginx伺服器,默認配置在生產環境中很容易出現502錯誤,需要修改

root@ubuntu:~#nano/etc/nginx/nginx.conf

找到下面這行

pid /run/nginx.pid;

在它下面添加如下一行內容

worker_rlimit_nofile 65535;

找到

worker_connections768;

#multi_accept on;

修改為

worker_connections 7680;

use epoll;

multi_accept on;

繼續,找到下面這行

#server_tokens off;

修改為

server_tokens off;

client_max_body_size 2048m;

client_header_buffer_size32k;

large_client_header_buffers 4 32k;

server_names_hash_bucket_size 128;

fastcgi_connect_timeout 300;

fastcgi_send_timeout 300;

fastcgi_read_timeout 300;

fastcgi_buffer_size 256k;

fastcgi_buffers 4 256k;

fastcgi_busy_buffers_size 256k;

fastcgi_temp_file_write_size 256k;

#保存退出

#其中client_max_body_size涉及上傳文件大小限制

#fastcgi_connect_timeout指定同FastCGI伺服器的連接超時時間,默認60秒(避免504錯誤)

#fastcgi_send_timeout向fastcgi請求超時時間(這個指定值已經完成兩次握手後向fastcgi傳送請求的超時時間)

#fastcgi_rend_timeout接收fastcgi應答超時時間,同理也是2次握手後

Nginx默認站點配置中沒有啟用PHP支持,必須啟用,請修改默認站點配置文件

root@ubuntu:~#nano/etc/nginx/sites-available/default

找到下面這一段

#location ~ .php$ {

# includesnippets/fastcgi-php.conf;

#

# #With php-fpm (or other unix sockets):

# fastcgi_passunix:/var/run/php/php7.0-fpm.sock;

# #With php-cgi (or other tcp sockets):

# fastcgi_pass127.0.0.1:9000;

#}

修改成如下

location ~.php$ {

includesnippets/fastcgi-php.conf;

fastcgi_passunix:/run/php/php7.2-fpm.sock;

}

if (!-e$request_filename) {

rewrite"^(.*.php)(/)(.*)$" $1?file=/$3 last;

}

上面修改就是刪除四個#號(即第1、2、7、8這四行前的,其他幾行可以刪除),然後在該段後面添加一個if判斷語句包含一條rewrite規則(共三行),此rewrite規則必須,否則界面會混亂,而且有了此規則,可以啟用反斜杠支持。

再用游標移到前面,找到:

root/var/www/html;

指定站點默認目錄,修改為:

root /www/moodle;

找到

indexindex.html index.htm index.nginx-ubuntu.html;

默認首頁,修改為:

#完成後保存退出


修改默認上傳文件大小及超時:

root@ubuntu:~#nano/etc/php/7.2/fpm/php.ini

#找到

max_execution_time= 30

#設置了在強制終止腳本前PHP等待腳本執行完畢的時間,此時間以秒計算。建議修改為

max_execution_time = 3000

#找到

max_input_time = 60

#以秒為單位對通過POST、GET以及PUT方式接收數據時間進行限制。建議修改為

max_input_time = 6000

#找到

memory_limit = 128M

#為了避免正在運行的腳本大量使用系統可用內存,PHP允許定義內存使用限額。建議修改為

memory_limit = 4096M

#找到

;cgi.fix_pathinfo=1

#安全問題,建議修改為

cgi.fix_pathinfo=0

#找到

post_max_size = 8M

#控制在採用POST方法進行一次表單提交中PHP所能夠接收的最大數據量。如果希望使用PHP文件上傳功能,則需要將此值改為比upload_max_filesize要大,建議修改為

post_max_size = 2048M

#找到

upload_max_filesize= 2M

#允許上傳文件大小的最大值,建議修改為

upload_max_filesize = 2048M

#找到

default_socket_timeout= 60

#socket流的超時時間(秒),建議修改為

default_socket_timeout = 6000

#保存退出

#根據內存容量修改FastCGI進程數

root@ubuntu:~#nano/etc/php/7.2/fpm/pool.d/www.conf

pm =dynamic

pm.max_children = 50

pm.start_servers = 5

pm.min_spare_servers= 5

pm.max_spare_servers= 35

pm.process_idle_timeout= 10s

pm.max_requests= 10000

#上述幾個參數,可以參照下面的說明修改

pm設置進程管理器如何管理子進程,可用值: static, dynamic. 必須設置

static– 子進程的數量是固定的 (pm.max_children)

dynamic– 子進程的數量在下面配置的基礎上動態設置: pm.max_children, pm.start_servers, pm.min_spare_servers,pm.max_spare_servers

pm.max_children子進程的數量,pm 設置為 static 時表示創建子進程固定數量, pm 設置為 dynamic 時表示最大可創建的子進程數量. 必須設置. 該選項設置可以同時提供服務的請求數限制,一般每個進程約佔30M,設置150,大約佔用4~5G內存

pm.start_servers設置啟動時創建的子進程數目,僅在 pm 設置為dynamic 時使用. 默認值:min_spare_servers + (max_spare_servers –min_spare_servers) / 2,比如可以設置為70

pm.min_spare_servers設置空閑服務進程的最低數目. 僅在 pm 設置為 dynamic 時使用. 必須設置,比如設置為5

pm.max_spare_servers設置空閑服務進程的最大數目. 僅在 pm 設置為 dynamic 時使用. 必須設置,比如設置為135

pm.max_requests設置每個子進程重生之前服務的請求數. 對於可能存在內存泄漏的第三方模塊來說是非常有用的. 如果設置為0,則一直接受請求. 默認值: 0,建議設置為10000

#設置完成後重啟Nginx和PHP

root@ubuntu:~#systemctlrestart nginx.service

root@ubuntu:~#systemctlrestart php7.2-fpm.service

正常重啟,沒有任何提示,否則請仔細檢查配置文件,是否有輸入錯誤。

再編輯一個測試的php文件

root@ubuntu:~#mkdir -p/www/moodle

root@ubuntu:~#echo"" > /www/moodle/index.php

在瀏覽器裡面打開ubuntu 伺服器的IP,看看能否看到PHP的信息,如圖

表明你的PHP已經正常運作

當然你可以修改OPcache的一些默認配置,選項都在/etc/php/7.2/fpm/php.ini中,建議配置以下幾項:

opcache.memory_consumption=128

opcache.interned_strings_buffer=8

opcache.max_accelerated_files=4000

opcache.revalidate_freq=60

opcache.fast_shutdown=1

如果你修改了配置,請重啟php-fpm:

root@ubuntu:~#systemctlrestart php7.2-fpm.service

或重新載入配置

root@ubuntu:~#systemctlreload php7.2-fpm.service


資料庫配置文件的修改

root@ubuntu:~#nano/etc/mysql/mariadb.conf.d/50-server.cnf

找到

#log_bin =/var/log/mysql/mysql-bin

在它下面增加一行

binlog_format = mixed

#說明:二進位日誌默認是關閉的,但你有一天需要啟用時,必須修改日誌默認格式STATEMENT為MIXED,否則Moodle將會出現無法寫資料庫的錯誤信息。

找到

# Read the manual for more InnoDB related options.There are many!

在它後面添加行

default_storage_engine =InnoDB

innodb_buffer_pool_size =1024M

#建議設置:一般可以設置為內存的25%~50%(內存2G以下使用默認值128M,4G以內設為256M,8G以內設為512M,8G以上設為1024M),單機單實例可設為內存大小的50%~80%。

#並在後面添加(Moodle20150421開始需要)以下幾行

innodb_large_prefix =1

innodb_file_per_table =1

innodb_file_format =Barracuda

innodb_file_format_check = 1

innodb_file_format_max =Barracuda

#保存退出

重啟資料庫服務

root@ubuntu:~#systemctl restartmysql.service

如果你單獨為資料庫分區,則可以把資料庫數據存放目錄修改,請參照執行(本文數據存放目錄設為/www/mariadb/data、日誌存放目錄設為/www/mariadb/logs),否則跳過以下操作,直接閱讀【Moodle的安裝之8.Moodle代碼準備】

首先修改配置文件

root@ubuntu:~#nano/etc/mysql/mariadb.conf.d/50-server.cnf

找到

datadir =/var/lib/mysql

修改為

datadir = /www/mariadb/data

找到

log_error =/var/log/mysql/error.log

修改為

log_error = /www/mariadb/logs/error.log

#其他日誌目錄中涉及的/var/log/mysql/也全部修改為/www/mariadb/logs/,不再一一列出

#保存退出

運行以下6條命令(即停止服務、建立日誌目錄、複製數據目錄、添加目錄許可權、重啟服務)完成操作,任何一步有錯誤提示,必須搞清錯誤原因,才能繼續。

root@ubuntu:~#systemctl stop mysql.service

root@ubuntu:~#mkdir -p /www/mariadb/logs

root@ubuntu:~#cp -a/var/lib/mysql/www/mariadb/data

root@ubuntu:~#chown -Rmysql:mysql/www/mariadb/data

root@ubuntu:~#chown -Rmysql:mysql/www/mariadb/logs

root@ubuntu:~#systemctl restartmysql.service

現在添加Moodle資料庫及資料庫專用帳號

root@debian:~#mysql -p

看到Enterpassword,默認是空密碼,直接按回車鍵

首先設置root密碼,不妨設為123456

MariaDB [(none)]>update mysql.user set password=password("123456") whereuser="root";

下面我們添加一個Moodle專用用戶moodle,密碼為123456

MariaDB [(none)]>grant all on moodle.* to "moodle"@"localhost"identified by "123456";

MariaDB [(none)]>grant all on moodle.* to "moodle"@"127.0.0.1"identified by "123456";

再添加一個專用資料庫moodle

MariaDB [(none)]>CREATE DATABASE moodle DEFAULT CHARACTER SET utf8mb4COLLATE utf8mb4_unicode_ci;

使設置立即生效,然後退出命令行

MariaDB [(none)]>flush privileges;

MariaDB [(none)]>quit

至此,安裝Moodle所需的環境完全建好了。


三、Moodle的安裝

完成以上操作後,我們開始安裝Moodle網站,首先需要準備源代碼。


代碼準備階段,可以選擇兩種方案,任選其一,推薦第一種。

▲3.1.1.方案一:使用GIT管理(強烈推薦)

#使用git管理不能存在moodle目錄,首先

root@ubuntu:~#rm -fr /www/moodle

#安裝git軟體

root@ubuntu:~#apt-get install -y git

#遠程庫克隆到本地庫

root@ubuntu:~#git clone git://git.moodle.org/moodle.git /www/moodle

#說明:從遠程克隆到本地,下載量較大(320M+),官網伺服器在國外,可能速度較慢(凌晨較快),如果看不到上圖中克隆成功的標誌done,而是看到失敗標誌failed,

那麼可以換用本人維護的Moodle源碼國內鏡像站,改為執行

git clone https://gitee.com/hongm/moodle.git /www/moodle

#進入moodle目錄

root@ubuntu:/www#cd /www/moodle

#更新源代碼

root@ubuntu:/www/moodle#git pull

#查看分支(星號標識的是你當前所處的分支)

root@ubuntu:/www/moodle#git branch -a

#創建新分支並與遠程分支建立關聯(下面以安裝moodle 3.4為例,如果你要安裝Moodle其他版本,修改相應數字即可,例如你想安裝Moodle2.8,就把命令中的數值更改為28即可,其他版本依此類推,下同)

root@ubuntu:/www/moodle#git branch --track MOODLE_34_STABLE origin/MOODLE_34_STABLE

#切換分支

root@ubuntu:/www/moodle#git checkout MOODLE_34_STABLE

代碼準備完畢,開始安裝,閱讀【Moodle的安裝之09.Moodle的安裝


(不建議使用,安裝簡單但後續升級複雜麻煩易出錯)

#下載最新版moodle代碼包,其他版本安裝基本一致

root@ubuntu:~#wget -chttp://download.moodle.org/download.php/direct/stable34/moodle-latest-34.tgz

root@ubuntu:~#tar zxvfmoodle-latest-34.tgz-C /www/

#進入Moodle目錄

root@ubuntu:~#cd /www/moodle


Moodle的安裝常用的有兩種方式:一種是命令行方式安裝,一種是瀏覽器模式安裝。建議使用命令行方式。

如果你想使用瀏覽器模式安裝Moodle,使用瀏覽器打開伺服器IP地址,按提示操作即可,這裡略過。

▲下面開始以命令行方式安裝Moodle


#編寫Moodle配置文件config.php

root@ubuntu:/www/moodle#nano /www/moodle/config.php

unset($CFG);

global $CFG;

$CFG = new stdClass();

$CFG->dbtype = "mariadb";

$CFG->dblibrary = "native";

$CFG->dbhost = "localhost";

$CFG->dbname = "moodle";

$CFG->dbuser = "moodle";

$CFG->dbpass ="123456";

$CFG->prefix = "mdl_";

$CFG->dboptions = array(

"dbpersist" =>0,

"dbport" =>"",

"dbsocket" =>"",

"dbcollation"=> "utf8mb4_unicode_ci",

);

$CFG->wwwroot = "http://192.168.128.218";

$CFG->dataroot = "/www/moodledata";

$CFG->admin = "admin";

$CFG->directorypermissions = 0777;

require_once(__DIR__ . "/lib/setup.php");

// There is no php closing tag in this file,

// it is intentional because it prevents trailingwhitespace problems!

#請根據需要修改變數$CFG->dbuser和$CFG->dbpass的值,它們是Moodle訪問資料庫的帳戶和密碼,必須與前面添加的帳戶和密碼完全一致(本文使用moodle和123456);

# 根據網路配置,請修改$CFG->wwwroot後面的IP地址為該伺服器IP地址或直接使用域名(推薦使用域名);

#完成後保存退出


#許可權設置

root@ubuntu:/www/moodle#mkdir -p /www/moodledata

root@ubuntu:/www/moodle#chown -R www-data:www-data /www/moodle

root@ubuntu:/www/moodle#chown -R www-data:www-data /www/moodledata

root@ubuntu:/www/moodle#chmod -R 0750 /www/moodle

root@ubuntu:/www/moodle#chmod -R 0750 /www/moodledata

root@ubuntu:/www/moodle#find /www/moodle -type f -exec chmod 0640 {} ;


#開始安裝,注意修改adminpass後面字元串為你需要的Moodle管理員帳號admin的密碼(這裡設置為跟MariaDB一樣都是123456,請修改為你需要的密碼)

#參數說明:

--lang=CODE網站默認語言,可省略為en

--adminuser=USERNAME管理員用戶名,可省略為admin

--adminpass=PASSWORD管理員密碼

--adminemail=STRING管理員郵箱,系統需要使用此郵箱發送電子郵件

--fullname=STRING網站名稱

--shortname=STRING網站簡稱

--agree-license同意軟體許可協議

#安裝成功的提示:

至此安裝基本結束。


四、後續工作

Moodle許多功能必須依靠計劃任務來完成

root@ubuntu:/www/moodle#crontab-u www-data -e

#首次運行,會選擇編輯器,我們就選nano,這樣編輯方法一樣

#在底部添加以下行

* * * * */usr/bin/php /www/moodle/admin/cli/cron.php > /dev/null

#保存退出


現在你可以使用瀏覽器訪問Moodle網站:

使用用戶名admin,密碼123456登錄,登錄成功後,一個全新的Moodle網站來了:

用戶登錄後,默認進入「個人主頁」,你可以點擊「網站管理→外觀→導航」,給用戶的預設主頁,選擇「網站」,如圖所示

保存更改,單擊「首頁」,會出現歡迎界面:

點擊「向後」繼續嚮導,點擊「End tour」結束嚮導。發現熟悉的Moodle界面回來了:

到處Moodle安裝全部完成。

當然後續很多相關設置和優化,不在此文討論範圍,文中如有不當之處請指正。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Moodle速裝 的精彩文章:

TAG:Moodle速裝 |