使用Docker快速部署Moodle與備份還原

使用Docker快速部署Moodle與備份還原

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,儲存並且重啟。