Moodle是一個教學平臺,可以在上面建立課程、測驗等,此外也可以透過Docker部署。
爲了讓教學資源可以更好分享,建立一個長久良好的教育訓練平臺,我覺得目前Moodle算是符合我心目中的選擇。
但是,如果辛苦創建的東西之後,也要能備份還原或搬遷。這次也順帶練習我一直想做的docker備份還原。
本文將會以Docker部署Moodle爲例,並且使用Docker架構下的備份還原,確保心血能夠確實在其他設備上還原。
Docker Moodle官方文件
https://hub.docker.com/r/bitnami/moodle
部署描述
預設各位已經安裝好docker,之後照着以下步驟進行。
- 將docker-compose.yml複製到特定資料夾
- CMD切到特定資料夾,並且使用「docker-compose up -d」
- 等待Moodle初始化完成
- 透過瀏覽器進入Moodle,並使用預設帳密登入
- 開始設定您的Moodle
docker-compose.yml
# Copyright Broadcom, Inc. All Rights Reserved.
# SPDX-License-Identifier: APACHE-2.0
services:
mariadb:
image: docker.io/bitnami/mariadb:latest
environment:
# ALLOW_EMPTY_PASSWORD is recommended only for development.
- ALLOW_EMPTY_PASSWORD=yes
- MARIADB_USER=bn_moodle
- MARIADB_DATABASE=bitnami_moodle
- MARIADB_CHARACTER_SET=utf8mb4
- MARIADB_COLLATE=utf8mb4_unicode_ci
volumes:
- 'mariadb_data:/bitnami/mariadb'
moodle:
image: docker.io/bitnami/moodle:4.5
ports:
- '80:8080'
- '443:8443'
environment:
#- MOODLE_USERNAME=user
#- MOODLE_PASSWORD=bitnami
- MOODLE_DATABASE_HOST=mariadb
- MOODLE_DATABASE_PORT_NUMBER=3306
- MOODLE_DATABASE_USER=bn_moodle
- MOODLE_DATABASE_NAME=bitnami_moodle
# ALLOW_EMPTY_PASSWORD is recommended only for development.
- ALLOW_EMPTY_PASSWORD=yes
volumes:
- 'moodle_data:/bitnami/moodle'
- 'moodledata_data:/bitnami/moodledata'
depends_on:
- mariadb
links:
- mariadb
volumes:
mariadb_data:
driver: local
moodle_data:
driver: local
moodledata_data:
driver: local
將docker-compose.yml複製到特定資料夾

CMD切到特定資料夾,並且使用「docker-compose up -d」

等待Moodle初始化完成
初始化完成時,可以看到Apache已經啓動中。

透過瀏覽器進入Moodle,並使用預設帳密登入
透過docker-compose.yml設定的對應port,使用「localhost:80」或是「https://localhost:443」都能登入。如果想要改Port,可以在docker-compose.yml去調整。

右上角「Log in」登入

Moodle預設帳密
根據官方文件,Moodle預設帳密可以用參數指定,若未指定:
帳號:user
密碼:bitnami
#- MOODLE_USERNAME=user
#- MOODLE_PASSWORD=bitnami
開始設定您的Moodle

備份還原概念
相比官方文件的備份步驟,Docker的備份還原更爲簡單,因爲Docker使用Volume去存放長期資料。
因此,最重要的就是將Volume與docker-compose.yml備份:
docker-compose.yml:建立Container的步驟與參數流程,並且建立對應的volumes。
volume:長期資料儲存,留意權限問題。
由於docker-compose.yml在初始化時就已經存在,接下來我們要匯出volumes。
透過docker desktop可以看到目前所有Volumes

此外,透過指令「docker volume ls」可以查看目前的volume爲何。

備份還原流程
- 複製docker-compose.yml到目的資料夾
- 停止Moodle,並匯出volumes與匯出images(可選)
- 在目的資料夾放入docker-compose.yml,與放入images備份檔並匯入(可選),並建立Moodle
- 匯入volumes
- 啓動Moodle,成功還原。
這邊作爲演示,我使用兩台不同的電腦,確保能夠使moodle能透過備份檔在任何一臺設備上還原回去。
複製docker-compose.yml到目的資料夾
將docker-compose.yml,複製到目的設備,新增資料夾取名爲「moodle」。
目的資料夾建議與volume的前綴取名相同,像是都在「moodle」的資料夾下操作,如此docker-compose時所建立volume都會是相同前綴。

停止Moodle,並匯出volumes與匯出images(可選)
匯出volumes時必須先停止容器運作。
接着透過備份指令,將volumes與images匯出。如果有些路徑或名稱上的異動,再依自身環境調整指令。
成功時應該能匯入

Docker版本備份指令
# 匯出image
docker save -o image_backup_mariadb.tar bitnami/mariadb
docker save -o image_backup_moodle.tar bitnami/moodle
# 匯出volume
docker run --rm -v moodle_mariadb_data:/volume -v %cd%:/backup bitnami/mariadb tar czvf /backup/volume_moodle_mariadb_data.tar.gz -C /volume .
docker run --rm -v moodle_moodle_data:/volume -v %cd%:/backup bitnami/moodle tar czvf /backup/volume_moodle_moodle_data.tar.gz -C /volume .
docker run --rm -v moodle_moodledata_data:/volume -v %cd%:/backup bitnami/moodle tar czvf /backup/volume_moodle_moodledata_data.tar.gz -C /volume .
在目的資料夾放入docker-compose.yml,與放入images備份檔並匯入(可選),並建立Moodle

Docker版本還原指令-1
# 匯入image
docker load -i image_backup_mariadb.tar
docker load -i image_backup_moodle.tar
# 建立Container但不啓動,使Volume產生
docker-compose create

完成後,在docker可以看到Moodle使用的images與volumes。
由於部分檔案權限的問題,因爲需要先Create,使Volumes先產生使權限檔案先建立,再匯入Volumes備份,重要權限的檔案不會被覆蓋過去,如此才能避免Moodle啓動異常。
匯入Volumes

Docker版本還原指令-2
# 匯入volume
docker run --rm -v moodle_mariadb_data:/volume -v %cd%:/backup bitnami/mariadb sh -c "cd /volume && tar xzvf /backup/volume_moodle_mariadb_data.tar.gz"
docker run --rm -v moodle_moodle_data:/volume -v %cd%:/backup bitnami/moodle sh -c "cd /volume && tar xzvf /backup/volume_moodle_moodle_data.tar.gz"
docker run --rm -v moodle_moodledata_data:/volume -v %cd%:/backup bitnami/moodle sh -c "cd /volume && tar xzvf /backup/volume_moodle_moodledata_data.tar.gz"
# 複製docker-compose.yml過去
docker-compose up -d
貼上還原指令-2,完成後會自動啓動

啓動Moodle,成功還原
透過瀏覽器查看,帳號以及課程等都是備份時的樣子,成功還原!

修改上傳檔案大小最大值
預設為40M,實在不夠用。這邊改為2000M。
https://docs.bitnami.com/aws/apps/moodle/administration/increase-upload-limit-php
依照官方文件,找到對應的文件,在703行左右與855行左右,修改為2000M,儲存並且重啟。

