為了讓MoodleBox在實務中使用,有必要進行最佳化的動作。
我們不僅設置Moodle的盒子,也要管理檔案的儲存及下載。
Moodle特定檔案使用的RAM記憶體
新建一個資料夾作為RAM記憶體的掛載點。
$ cd /var/cache/
$ sudo mkdir moodle
$ sudo chown www-data:www-data moodle/
RAM記憶體也可用於暫存資料夾及Moodle連線的資料夾。這兩個資料夾都位於 moodledata。
我們在樹莓的分割表中定義RAM記憶體。 要達成這個目的,我們在/ etc / fstab中新增以下文字:
tmpfs /var/cache/moodle tmpfs size=64M,mode=775,uid=www-data,gid=www-data 0 0
tmpfs /var/www/moodledata/temp tmpfs size=64M,mode=775,uid=www-data,gid=www-data 0 0
tmpfs /var/www/moodledata/sessions tmpfs size=32M,mode=775,uid=www-data,gid=www-data 0 0
新增以上文字後 /etc/fstab的檔案內容如下:
proc /proc proc defaults 0 0
/dev/mmcblk0p1 /boot vfat defaults 0 2
/dev/mmcblk0p2 / ext4 defaults,noatime 0 1
# a swapfile is not a swap partition, no line here
# use dphys-swapfile swap[on|off] for that
tmpfs /var/cache/moodle tmpfs size=64M,mode=775,uid=www-data,gid=www-data 0 0
tmpfs /var/www/moodledata/temp tmpfs size=64M,mode=775,uid=www-data,gid=www-data 0 0
tmpfs /var/www/moodledata/sessions tmpfs size=32M,mode=775,uid=www-data,gid=www-data 0 0
重新啟動樹莓後,在Moodle中就可以設定快取記憶體。
使用管理員帳號(上述所建立的)連上Moodle,然後在Moodle上進入網站管理>外掛>快取>配置。我們要新增兩個新的儲存實體,在網頁上方的安裝快取儲存區段,按一下添加實列。
儲存名稱:TMPFS application快取路徑:/var/cache/moodle/application,勾選自動建立目錄;
儲存名稱:TMPFS sessions 快取路徑:/var/cache/moodle/sessions,勾選自動建立目錄。
最後,它仍然需要連結這兩個新的實例至它們的目的地,在網頁的最下方「當沒有對映出現時所用的儲存」區段下方按一下「編輯對映」。
驗證
這些在MoodleBox上的Moodle的動作完成後,使用SSH連上MoodleBox,然後執行下列命令:
ls -l /var/cache/moodle/
終端機應該會顯示一些東西如:
total 0
drwxrwxrwx 19 www-data www-data 380 mai 30 19:18 application
drwxrwxrwx 8 www-data www-data 160 mai 29 19:00 sessions
快取RAM記憶體有一個缺陷:內含的資料在每次重新啟動時會消失。所以Moodle每次都得重建快取。 如果我們要在動新啟動時保存的快取,就需定期拷貝RAM記憶體中的內容至MicroSD卡,並且,在每次重新啟動時,就要執行相反的操作(從MicroSD拷貝至RAM記憶體)
我們新建備份資料夾,然後設定排程cron
$ sudo mkdir /var/cache/moodle-cache-backup/
$ sudo crontab -e
我們新增下面的兩行指令到cron排程表來每隔20分鐘執行備份工作,並在重新啟動時回存快取內容:
*/20 * * * * rsync -a --delete /var/cache/moodle/ /var/cache/moodle-cache-backup/
@reboot cp -Rpf /var/cache/moodle-cache-backup/* /var/cache/moodle/
使用X SENDFILE
使用 X-SENDFILE 可以提高Web伺服器傳送Moodle資料庫的檔案的速度。
在Moodle的設定檔案/var/www/html/config.php裏,在$CFG->admin = 'admin'這行後面,增加這些行命令
$CFG->xsendfile = 'X-Accel-Redirect';
$CFG->xsendfilealiases = array (
'/dataroot/' => $CFG->dataroot
);
/var/www/html/config.php檔案的內容將會是:
<?php // Moodle configuration file
unset($CFG);
global $CFG;
$CFG = new stdClass();
$CFG->dbtype = 'mariadb';
$CFG->dblibrary = 'native';
$CFG->dbhost = 'localhost';
$CFG->dbname = 'moodle';
$CFG->dbuser = 'root';
$CFG->dbpass = 'Moodlebox4$';
$CFG->prefix = 'mdl_';
$CFG->dboptions = array (
'dbpersist' => 0,
'dbport' => '',
'dbsocket' => '',
);
$CFG->wwwroot = 'http://moodlebox.home';
$CFG->dataroot = '/var/www/moodledata';
$CFG->admin = 'admin';
$CFG->xsendfile = 'X-Accel-Redirect';
$CFG->xsendfilealiases = array (
'/dataroot/' => $CFG->dataroot
);
$CFG->directorypermissions = 02777;
require_once(dirname(__FILE__) . '/lib/setup.php');
// There is no php closing tag in this file,
// it is intentional because it prevents trailing whitespace problems!
接下來在/etc/nginx/sites-available/default 檔案加入下列數行:
location /dataroot/ {
internal;
alias /var/www/moodledata/;
}
/etc/nginx/sites-available/default 檔案的內容就變成如此:
# Default server configuration
#
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name moodlebox;
location / {
try_files $uri $uri/ =404;
}
location /dataroot/ {
internal;
alias /var/www/moodledata/;
}
location ~ [^/]\.php(/|$) {
include fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_read_timeout 300;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PHP_VALUE "max_execution_time=300\n upload_max_filesize=50M
\n post_max_size=50M";
client_max_body_size 50M;
}
}
優化MariaDB的
我們要在 /etc/mysql/mariadb.conf.d/50-server.cnf 檔案中修改MariaDB的一些變數的數值。因此,打開該檔案後,找到適當的行列進行修改:
table_cache = 512
table_definition_cache = 512
max_connections = 100
query_cache_size = 16M
query_cache_type = 0