標籤: moodle
讓moodle透過nextcloud提供的oauth2 服務進行登入認證
1. moodle與nextcloud需要有一樣名稱的管理者帳號
有點類似微軟網域伺服器之間的互信,我這邊兩方都建立admin這個有管理權限的帳號。
2. 管理者帳號登入nextcloud網站進行設定
新增客戶端
名稱: moodle
網址: https://xxxxx/admin/oauth2callback.php (xxxxx 為您moodle伺服器網址)
3.管理者帳號登入moodle網站,讓oauth2納入認證範圍
網站管理->外掛->身分認證->管理身分認帳
4.管理者帳號登入moodle網站,將nextcloud產生的帳密輸入進去
儲存變更後,點選以下小圖示,進行moodle與nextcloud的第一次交流驗證,成功後會出現一個綠色勾勾
4. 大功告成
最後建議安裝keepalive,延長已登入狀態,否則常常要登入,麻瓜會生氣氣(安裝時,要注意/bitnami/moodle/local目錄是否可讀寫)
安裝完畢,可以設定session存活時間,最多300分鐘
此時我們就可以設定外觀,隱藏需要登入帳號與密碼的畫面
在「原始初始化SCSS」輸入以下語法隱藏登入畫面,只剩下oauth2登入。
.login-form {display:none}
設定完登出,重新登入就只能透過oauth2登入了
moodle無法使用多個網域主控認證(Ldap server)
moodle 是目前最強開源線上學習系統,台灣學校在疫情期間紛紛安裝線上開課,當然也很適合公司當作知識管理系統、線上無紙化測驗使用;可惜只能認證一個ldap server,有多網域伺服器就很麻煩,除非上雲端或許還可以解決此問題。
好險我想到moodle支援oauth2,可以透過公司目前最常用的nextcloud 雲端檔案伺服器進行驗證,而nextcloud可以連結多個ldap server進行驗證,那這樣可以解決問題了。
moodle 升級(docker)
去年安裝了moodle想要當作公司知識管理,沒多久就遇到資安問題,系統需要升級。
可是 moodle 網站 對於升級並沒有太多說明;反而有點誤導,似乎只要容器(container)更新到最新即可自動更新。
其實不是的
必須:
1、先在舊版容器進入維護模式,下載最新版程式,並且更新到最新,更新後離開維護模式
2、停用已升級完畢舊版容器
3、改用最新的images(套用原先的volume資料)
4、刪除舊容器
以下紀錄相關作法:
- 本文必須搭配bitnami moodle docker-compose 安裝。
https://kafeiou.pw/2021/01/18/2961/ - 先用管理者登入, 在網站管理->主機->網站維護模式, 改成維護模式。
- 在網站管理->一般->通知(反正就是找到通知) ,點選”檢查可用的更新”, 查看是否有新版本可供下載。
- 一旦發現新版本,請複製官網下載網址,再docker container裡面進行下載。
docker exec -it <container name> bash
apt update
apt install wget
wget --no-check-certificate https://download.moodle.org/download.php/direct/stable401/moodle-4.1.10.zip
- 備份舊版本程式(先備後刪)
#請注意/bitnami/moodledata 必須連到對應為volume
/bin/cp -R /bitnami/moodle /bitnami/moodledata
rm -rf /bitnami/moodle/*
- 下載並更新最新程式
下載最新版zip檔, 解開會有一個moodle目錄,請複製或覆蓋到 /bitnami/moodle 。
apt install unzip
unzip xxx.zip
/bin/cp -R moodle/* /bitnami/moodle
- 將先前備份moodle.bak目錄, 裡面的config.php檔案複製(取代)到 /bitnami/moodle
- 接下來改用瀏覽器登入,系統自動會發現有新版,且要求一系列升級工作。
- 升級完畢,請關閉維護模式
- 這樣升級就大功告成。因為現主時container為舊版, 可停用且刪除目前舊版容器,修改yaml檔案改用新的container版本。
官方網站建議做法如下
Step 1: Get the updated image
$ docker pull bitnami/moodle:latest
Step 2: Stop the running container
Stop the currently running container using the command
#這部分有時候會停用失敗,請用docker stop 方式直接停用container
$ docker-compose stop moodle
Step 3: Take a snapshot of the application state
Backup your container 要備分(我之前有做了)
Step 4: Remove the currently running container
Remove the currently running container by executing the following command:
docker-compose rm -v moodle
Step 5: Run the new image (修改yml裡面moodle版本->到最新)
Update the image tag in docker-compose.yml and re-create your container with the new image
$ docker-compose up -d
升級docker images, 舊版images變成none
最近升級moodle到4.0.1版本, 發現有問題, 想用回舊版, 發現舊版的變成 moodle:<none> , 這樣一來不就不能使用舊版了, 後來發現只要知道舊版images id , 就可以改成想要的tag, 也就能繼續使用了
docker tag <images id> <images name>:x.x
docker tag 43b9473f010d bitnami/moodle:3.10
moodle課程需要寄發email通知
需安裝外掛(block_quickmail)才能寄發通知, 但是官方的版本目前無法使用, 會出現”There are no users to whom you can send emails.” 或是 “There are no users you are capable of emailing“的錯誤,
請到 https://github.com/lsuits/lsu-block_quickmail 下載v2版本就能使用了.
docker安裝moodle線上學習初體驗
# 2024/05/03
這邊提醒一下,預設安裝,資料庫不需要密碼就能連線,這樣一般都不會有問題,因為資料庫沒有開放對外。
若資料庫開放外面連線的話,建議先設定資料庫密碼,然後再改設定開放外面連線。
以下是我將資料庫改完密碼後,再開放到外面透過3307連線
=========================== docker-compose.yml =====================================
version: '2'
services:
mariadb:
image: 'docker.io/bitnami/mariadb:10.6.8'
ports:
- '3307:3306'
environment:
# - ALLOW_EMPTY_PASSWORD=yes
- MARIADB_ROOT_PASSWORD=root的密碼
- MARIADB_USER=bn_moodle
- MARIADB_PASSWORD=密碼
- 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.1.5'
ports:
- '8090:8080'
- '8446:8443'
environment:
- MOODLE_DATABASE_HOST=192.168.1.1(主機名稱或ip)
- MOODLE_DATABASE_PORT_NUMBER=3307
- MOODLE_DATABASE_USER=bn_moodle
- MOODLE_DATABASE_NAME=bitnami_moodle
- MOODLE_DATABASE_PASSWORD=密碼
- MOODLE_DATABASE_ROOT_PASSWORD=root的密碼
# - ALLOW_EMPTY_PASSWORD=yes
- MOODLE_SMTP_HOST=郵件伺服器IP
- MOODLE_SMTP_PORT=587
- MOODLE_SMTP_USER=帳號
- MOODLE_SMTP_PASSWORD=密碼
- MOODLE_SMTP_PROTOCOL=tls
volumes:
- 'moodle_data:/bitnami/moodle'
- 'moodledata_data:/bitnami/moodledata'
depends_on:
- mariadb
hostname:
'moodle.test.com'
volumes:
mariadb_data:
driver: local
moodle_data:
driver: local
moodledata_data:
driver: local
=========================== docker-compose.yml =====================================
若一開始測試系統安裝成功後(不需要密碼),之後要改需要密碼方式,這樣啟動會報告錯誤。
請改docker volume moodle_data 裡面的config.php ,在裡面加上密碼,才能正常運作。
$CFG->dbpass = '密碼';
docker搜尋一下, 找到 bitnami 製作的moodle images , 照著做滿簡單就能架站
0. 建立網路
docker network create moodle-network
1. 下載docker compose yaml檔案
curl -sSL https://raw.githubusercontent.com/bitnami/bitnami-docker-moodle/master/docker-compose.yml > docker-compose.yml
2. 修改yml如下
version: '2'
services:
mariadb:
image: 'docker.io/bitnami/mariadb:10.6'
hostname: mariadb
environment:
# 若開放外面連線,請務必加上#,否則很容易被入侵
- 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.0.1'
ports:
- '8088:8080'
- '8445:8443'
environment:
- MOODLE_DATABASE_HOST=mariadb
- MOODLE_DATABASE_PORT_NUMBER=3306
- MOODLE_DATABASE_USER=bn_moodle
- MOODLE_DATABASE_NAME=bitnami_moodle
# 若開放外面連線,請務必加上#,否則很容易被入侵
- ALLOW_EMPTY_PASSWORD=yes
- MOODLE_SMTP_HOST=ip
- MOODLE_SMTP_PORT=587
- MOODLE_SMTP_USER=xxx
- MOODLE_SMTP_PASSWORD=yyy
- MOODLE_SMTP_PROTOCOL=tls
volumes:
- 'moodle_data:/bitnami/moodle'
- 'moodledata_data:/bitnami/moodledata'
depends_on:
- mariadb
hostname: moodle
volumes:
mariadb_data:
driver: local
moodle_data:
driver: local
moodledata_data:
driver: local
3. 這個moodle container 內部預設的http port 8080 , https port 8443, 我改成 8088 與 8445
docker-compose up -d
4. 瀏覽器輸入 https://ip:8445 登入, 預設帳號 user , 密碼 bitnami
5. 設定docker本體主機上面的let’s enpcrypt後, 進行httpd apache 與container對應工作
<VirtualHost *:443> ServerName 主機名稱 ErrorLog /var/log/httpd/ssl_error_log TransferLog /var/log/httpd/ssl_access_log SSLEngine On SSLCertificateFile /etc/letsencrypt/live/<主機名稱>/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/<主機名稱>/privkey.pem SSLCACertificateFile /etc/letsencrypt/live/<主機名稱>/fullchain.pem SSLProxyEngine On ProxyRequests Off ProxyPreserveHost On RequestHeader set X-Forwarded-Proto "https" ProxyPass / http://localhost:8088/ ProxyPassReverse / http://localhost:8088/ <Location /> Order allow,deny Allow from all </Location> </VirtualHost>
6. 進入container設定網址(預設為 http://127.0.0.1:8080
[root@firewall ~]# docker exec -it moodle_hlmt_moodle_1 bash root@moodle:/# vi /bitnami/moodle/config.php ////////////////////////////////////////////////// if (empty($_SERVER['HTTP_HOST'])) { $_SERVER['HTTP_HOST'] = '127.0.0.1:8080'; } 改成 if (empty($_SERVER['HTTP_HOST'])) { $_SERVER['HTTP_HOST'] = '你的網址'; } //////////////////////////////////////////////////
2022/02/18
—
安裝的時候, 一直無法啟用, 後來才發現,原來docker本身已經有container叫做mariadb , 但moodle預設也剛好是,於是就衝突, 衝突之後就算修改docker-compose.yml的資料庫名稱, 一樣沒反應, 所以解決方式應該是把這兩個container獨立出一個區域網路,
我不是很熟docker-compose如何自成一個網路, 版本太亂, 因此只好轉向改用一般方式啟用, 這也是官網建議的方式.
- 建立自己的網路
docker network create moodle-network
- 建立mariadb
docker volume create --name moodle_mariadb_data
docker run --restart always -d --name moodle-mariadb \
--env ALLOW_EMPTY_PASSWORD=yes \
--env MARIADB_USER=bn_moodle \
--env MARIADB_PASSWORD=bitnami \
--env MARIADB_DATABASE=bitnami_moodle \
--network moodle-network \
--volume moodle_mariadb_data:/bitnami/mariadb \
bitnami/mariadb:latest
- 建立moodle
到目前為止, 我覺得沮喪的是以下這一段常常失敗, 原來主機效能太差, 還是會造成影響, 因為資料庫需要時間建立資料, 這時候就不能啟用moodle主系統, 因此必須等上一段資料庫跑久一點大概5分鐘, 再執行, 當然主機效能好可能就秒開.
docker volume create --name moodle_moodle_data
docker run --restart always -d --name moodle \
-p 8082:8080 -p 8445:8443 \
--env MOODLE_DATABASE_HOST=moodle-mariadb \
--env ALLOW_EMPTY_PASSWORD=yes \
--env MOODLE_DATABASE_USER=bn_moodle \
--env MOODLE_DATABASE_PASSWORD=bitnami \
--env MOODLE_DATABASE_NAME=bitnami_moodle \
--network moodle-network \
--volume moodle_moodle_data:/bitnami/moodle \
bitnami/moodle:latest
- 注意事項
第一次啟動會很慢,至少10分鐘,大概是建立一些元件吧