From f69e24c5187af6030ca56d712d9a9a331b440823 Mon Sep 17 00:00:00 2001 From: "lukas.weberruss" Date: Mon, 7 Jul 2025 13:48:27 +0000 Subject: [PATCH] =?UTF-8?q?Anpasungen=20f=C3=BCr=20den=20Einsatz=20im=20pr?= =?UTF-8?q?oduktiven=20Umfeld?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- readme.md | 114 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) diff --git a/readme.md b/readme.md index 27eb798..47bfc6b 100644 --- a/readme.md +++ b/readme.md @@ -255,3 +255,117 @@ Nach Abschluss des Deployments ist deine Moodle-Instanz unter der konfigurierten ``` ``` +## Einsatz im Produktiven Umfeld + +Um die Anwendung in einem produktiven Umfeld laufen zu lassen, sind die folgenden weiteren Anpassungen möglich + +### Datenbank + +Es empfielt sich für den produktiven Einsatz für die MariaDB anstelle einer Single Instanz eine Datenbank mit Replicas zu wählen: + +Siehe dazu: +https://docs.stackit.cloud/stackit/en/service-plans-for-mariadb-79071839.html + +Neben der reinen Hochverfügbarkeit ist auch die zu erwartetende Last zu beachten. + +### Session Persistenz + +Im aktuellen Setup wird die Persistenz der Sitzungen über die Datenbank (MariaDB) sichergestellt. Besser geeignet ist hier der Einsatz eines Redis Caches, den es ebenfalls im Marketplace der STACKIT gibt und die auf ähnliche Weise wie die Datenank an die Moodle App gebunden werden kann. + +```bash +cf create-service appcloud-redis60 redis-4.16.100-replica moodle-redis +``` + +Dazu ist dann auch eine Anpassung der config.php notwendig: + +```php +// --- Redis-Konfiguration für Sessions und Locks --- +$vcap_services = json_decode(getenv('VCAP_SERVICES'), true); +// Finde den Redis-Service (der Name kann variieren, z.B. 'redis') +$redis_service = null; +if (isset($vcap_services['redis'])) { + $redis_service = $vcap_services['redis'][0]; +} + +if ($redis_service) { + $redis_creds = $redis_service['credentials']; + + // Redis für Sessions verwenden + $CFG->session_handler_class = '\cachestore_redis\session_handler'; + $CFG->session_redis_host = $redis_creds['host']; + $CFG->session_redis_port = $redis_creds['port']; + $CFG->session_redis_password = $redis_creds['password']; + $CFG->session_redis_database = 0; // Normalerweise 0 + $CFG->session_redis_prefix = 'moodlesess_'; + + // Redis auch für Application Locks verwenden (Best Practice) + $CFG->lock_factory = '\cachestore_redis\lock_factory'; +} +// --- Ende der Redis-Konfiguration --- +``` + +Die Einstellung +```php +$CFG->session_handler_class = '\core\session\database'; +``` +ist auszukommentieren. + +Nun noch die angepasste manifest Datei: + +```yaml +--- +applications: +- name: moodle + memory: 2G + disk_quota: 2G + buildpack: php_buildpack + path: moodle + routes: + - route: deine-moodle-route.deine-domain.de + env: + # Buildpack anweisen, weniger Debug-Logs in Dateien zu schreiben + BP_PHP_LOG_LEVEL: WARNING + + # S3-Zugangsdaten für den Object Storage + S3_ACCESS_KEY: DEIN_S3_ACCESS_KEY + S3_SECRET_KEY: DEIN_S3_SECRET_KEY + S3_BUCKET: DEIN_S3_BUCKET_NAME + S3_ENDPOINT: DEIN_S3_ENDPOINT_URL + + services: + - moodle-demo-mariadb + - moodle-autoscaler + - moodle-redis # <-- Neuer Service hinzugefügt + + # Konfiguration für den Autoscaler-Service + autoscaling: + min_instances: 2 + max_instances: 10 + rules: + - metric_type: cpu + threshold: 50 + operator: ">" + adjustment: "+1" + breach_duration_secs: 60 + cool_down_secs: 60 + - metric_type: cpu + threshold: 10 + operator: "<" + adjustment: "-1" + breach_duration_secs: 60 + cool_down_secs: 60 +``` + +### CDN (Content Delivey Network) + +STACKIT bietet ein eigenes CDN an, welches nun im produktiven Einsatz noch zusätzlich die Performance erhöhen kann und die überregionale Erreichbarkeit erleichtert. + +Dazu legt man bei STACKIT einen CDN Eintrag auf die Orginale Route an (In diesem Beispiel: https://moodle.cf.demo.stackit.rocks ) + +https://docs.stackit.cloud/stackit/en/create-a-distribution-332824982.html + +Das CDN erzeugt damit nun eine eigene URL, in unserem Fall v22sf2s1td84d5hz6rsf2715mw.aa.cdn.onstackit.cloud. Um diese wieder "schön" zu bekommen, legt man in STACKIT noch einen weiteren DNS Eintrag an. In unserem Fall ein CNAME Eintrag von moodle.demo.stackit.rocks auf die vom CDN Service vorgeschlagene URL (hier v22sf2s1td84d5hz6rsf2715mw.aa.cdn.onstackit.cloud.) und legt damit im CDN eine Custom Domain an: + +https://docs.stackit.cloud/stackit/en/add-a-custom-domain-to-your-distribution-332824866.html + +Nun kann der weltweite Zugriff auf die URL https://moodle.demo.stackit.rocks erfolgen. \ No newline at end of file