From 5e98b3fce6d66ecc37ce78ed75e63e2c59adc0cc Mon Sep 17 00:00:00 2001 From: Paul Payne Date: Fri, 19 Jun 2026 21:33:14 +0000 Subject: [PATCH] Adds moodle app. --- moodle/app.yaml | 5 ++ moodle/versions/4/README.md | 36 +++++++++ moodle/versions/4/db-init-job.yaml | 64 ++++++++++++++++ moodle/versions/4/deployment.yaml | 106 +++++++++++++++++++++++++++ moodle/versions/4/ingress.yaml | 26 +++++++ moodle/versions/4/kustomization.yaml | 16 ++++ moodle/versions/4/manifest.yaml | 19 +++++ moodle/versions/4/namespace.yaml | 4 + moodle/versions/4/pvc.yaml | 11 +++ moodle/versions/4/service.yaml | 13 ++++ 10 files changed, 300 insertions(+) create mode 100644 moodle/app.yaml create mode 100644 moodle/versions/4/README.md create mode 100644 moodle/versions/4/db-init-job.yaml create mode 100644 moodle/versions/4/deployment.yaml create mode 100644 moodle/versions/4/ingress.yaml create mode 100644 moodle/versions/4/kustomization.yaml create mode 100644 moodle/versions/4/manifest.yaml create mode 100644 moodle/versions/4/namespace.yaml create mode 100644 moodle/versions/4/pvc.yaml create mode 100644 moodle/versions/4/service.yaml diff --git a/moodle/app.yaml b/moodle/app.yaml new file mode 100644 index 0000000..10ae910 --- /dev/null +++ b/moodle/app.yaml @@ -0,0 +1,5 @@ +name: moodle +is: moodle +description: Moodle is a free, open-source learning management system (LMS) used to create online courses, manage learners, and deliver educational content. +icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/moodle.svg +latest: "4" diff --git a/moodle/versions/4/README.md b/moodle/versions/4/README.md new file mode 100644 index 0000000..8c8308b --- /dev/null +++ b/moodle/versions/4/README.md @@ -0,0 +1,36 @@ +# Moodle + +Moodle is the world's most widely used open-source Learning Management System (LMS), used by universities and schools globally. + +## Dependencies + +- **MySQL** - Database for storing courses, users, and grades + +## Configuration + +Key settings in `config.yaml`: + +- **domain** - Where Moodle will be accessible +- **storage** - Persistent volume size (default: `2Gi`) +- **db.name** - Database name (default: `moodle`) + +## First-Time Setup + +1. Add and deploy the app: + ```bash + wild app add moodle + wild app deploy moodle + ``` + +2. Moodle runs its installer automatically on first start. Log in with: + - **Username**: `admin` + - **Password**: value of `adminPassword` in your `secrets.yaml` + +3. Complete the site setup wizard (site name, contact email, etc.) that appears after first login. + +## Notes + +- First startup takes several minutes as Moodle runs all database migrations +- SMTP can be configured after login under **Site administration → Server → Email → Outgoing mail configuration** +- Moodle has a large plugin ecosystem — plugins can be installed via **Site administration → Plugins → Install plugins** +- Increase resource limits if running a large instance with many concurrent users diff --git a/moodle/versions/4/db-init-job.yaml b/moodle/versions/4/db-init-job.yaml new file mode 100644 index 0000000..4c90d1d --- /dev/null +++ b/moodle/versions/4/db-init-job.yaml @@ -0,0 +1,64 @@ +apiVersion: batch/v1 +kind: Job +metadata: + name: moodle-db-init + labels: + component: db-init +spec: + template: + metadata: + labels: + component: db-init + spec: + restartPolicy: OnFailure + securityContext: + runAsNonRoot: true + runAsUser: 999 + runAsGroup: 999 + seccompProfile: + type: RuntimeDefault + containers: + - name: mysql-init + image: mysql:9.1.0 + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + readOnlyRootFilesystem: false + env: + - name: MYSQL_ROOT_PASSWORD + valueFrom: + secretKeyRef: + name: moodle-secrets + key: mysql.rootPassword + - name: DB_HOSTNAME + value: {{ .db.host }} + - name: DB_PORT + value: "{{ .db.port }}" + - name: DB_DATABASE_NAME + value: {{ .db.name }} + - name: DB_USERNAME + value: {{ .db.user }} + - name: DB_PASSWORD + valueFrom: + secretKeyRef: + name: moodle-secrets + key: dbPassword + command: + - /bin/bash + - -c + - | + set -e + until mysql -h ${DB_HOSTNAME} -P ${DB_PORT} -u root -p${MYSQL_ROOT_PASSWORD} -e "SELECT 1" 2>/dev/null; do + echo "Waiting for MySQL..." + sleep 2 + done + mysql -h ${DB_HOSTNAME} -P ${DB_PORT} -u root -p${MYSQL_ROOT_PASSWORD} <