Anpasungen für den Einsatz im produktiven Umfeld

This commit is contained in:
Lukas_Weberruß 2025-07-07 13:48:27 +00:00
parent 617e757435
commit f69e24c518

114
readme.md
View file

@ -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.