SWS The Shifters 3 colors.png
Le Site Web des Shifters est désormais en ligne.
Retrouvez le sur www.theshifters.org

Différences entre versions de « Plateforme pédagogique »

De The Shifters Wiki
Sauter à la navigation Sauter à la recherche
imported>ChristianC
imported>ChristianC
Ligne 211 : Ligne 211 :
  
 
Ces 2 environnements sont hébergés sur la plateforme de Cloud de IBM. (cloud.ibm.com). Ils sont constitués tous deux d'un cluster Kubernetes executant des versions containerisées (Docker) de Moodle et de MariaDB.
 
Ces 2 environnements sont hébergés sur la plateforme de Cloud de IBM. (cloud.ibm.com). Ils sont constitués tous deux d'un cluster Kubernetes executant des versions containerisées (Docker) de Moodle et de MariaDB.
 
===== Backup =====
 
Pour env test: https://appscode.com/products/stash/0.7.0/guides/backup/
 
Pour prod prendre version plus récente de stash
 
helm repo add appscode https://charts.appscode.com/stable/
 
"appscode" has been added to your repositories
 
 
helm repo update
 
Hang tight while we grab the latest from your chart repositories...
 
...Skip local chart repository
 
...Successfully got an update from the "appscode" chart repository
 
...Successfully got an update from the "stable" chart repository
 
...Successfully got an update from the "kubernetes" chart repository
 
Update Complete.
 
 
helm install appscode/stash --name stash-operator --version v0.7.0
 
NAME:  stash-operator
 
LAST DEPLOYED: Tue Aug 13 10:28:31 2019
 
NAMESPACE: default
 
STATUS: DEPLOYED
 
 
RESOURCES:
 
==> v1/ClusterRole
 
NAME            AGE
 
stash-operator  5s
 
 
==> v1/ClusterRoleBinding
 
NAME                                    AGE
 
stash-operator                          5s
 
stash-operator-apiserver-auth-delegator  5s
 
 
==> v1/Pod(related)
 
NAME                            READY  STATUS            RESTARTS  AGE
 
stash-operator-574b4c4955-zkprw  0/2    ContainerCreating  0        5s
 
 
==> v1/RoleBinding
 
NAME                                                            AGE
 
stash-operator-apiserver-extension-server-authentication-reader  5s
 
 
==> v1/Secret
 
NAME                          TYPE    DATA  AGE
 
stash-operator-apiserver-cert  Opaque  2    5s
 
 
==> v1/Service
 
NAME            TYPE      CLUSTER-IP      EXTERNAL-IP  PORT(S)                      AGE
 
stash-operator  ClusterIP  172.21.167.192  <none>      443/TCP,56789/TCP,56790/TCP  5s
 
 
==> v1/ServiceAccount
 
NAME            SECRETS  AGE
 
stash-operator  1        5s
 
 
==> v1beta1/Deployment
 
NAME            READY  UP-TO-DATE  AVAILABLE  AGE
 
stash-operator  0/1    1          0          5s
 
 
 
NOTES:
 
To verify that Stash has started, run:
 
 
kubectl --namespace=default get deployments -l "release=stash-operator, app=stash"
 
 
 
kubectl apply -f ibmcloud/dev/backups/stash-backup-busybox.yaml
 
deployment.apps/vol-backup created
 
 
kubectl get pods -l app=vol-backup
 
NAME                            READY  STATUS    RESTARTS  AGE
 
vol-backup-55bd5b9cf6-g84f2  1/1    Running  0          26s
 
 
kubectl create secret generic stash-backup --from-literal=RESTIC_PASSWORD=passStash
 
secret/stash-backup created
 
 
kubectl get secret stash-backup -o yaml
 
apiVersion: v1
 
data:
 
  RESTIC_PASSWORD: cGFzc1N0YXNo
 
kind: Secret
 
metadata:
 
  creationTimestamp: "2019-08-13T08:47:50Z"
 
  name: stash-backup
 
  namespace: default
 
  resourceVersion: "117674"
 
  selfLink: /api/v1/namespaces/default/secrets/stash-backup
 
  uid: 083d2ead-bda7-11e9-a8d3-8a44d1251ba5
 
type: Opaque
 
 
kubectl apply -f ibmcloud/dev/backups/restic.yaml
 
restic.stash.appscode.com/vol-backup created
 
 
kubectl get pods -l app=vol-backup
 
NAME                            READY  STATUS        RESTARTS  AGE
 
vol-backup-55bd5b9cf6-g84f2  1/1    Terminating  0          25m
 
vol-backup-c9b5575f4-2mw52    2/2    Running      0          26s
 
 
kubectl get deployment vol-backup -o yaml
 
apiVersion: extensions/v1beta1
 
kind: Deployment
 
metadata:
 
  annotations:
 
    deployment.kubernetes.io/revision: "2"
 
    kubectl.kubernetes.io/last-applied-configuration: |
 
      {"apiVersion":"apps/v1beta1","kind":"Deployment","metadata":{"annotations":{},"labels":{"app":"vol-backup"},"name":"vol-backup","namespace":"default"},"spec":{"replicas":1,"template":{"metadata":{"labels":{"app":"vol-backup"},"name":"busybox"},"spec":{"containers":[{"command":["sleep","3600"],"image":"busybox","imagePullPolicy":"IfNotPresent","name":"busybox","volumeMounts":[{"mountPath":"/bitnami","name":"source-data"}]}],"restartPolicy":"Always","volumes":[{"name":"source-data","persistentVolumeClaim":{"claimName":"data-moodle-for-shifters-mariadb-0"}}]}}}}
 
    restic.appscode.com/last-applied-configuration: |
 
      {"kind":"Restic","apiVersion":"stash.appscode.com/v1alpha1","metadata":{"name":"vol-backup","namespace":"default","selfLink":"/apis/stash.appscode.com/v1alpha1/namespaces/default/restics/vol-backup","uid":"66ea3532-bdaa-11e9-a8d3-8a44d1251ba5","resourceVersion":"117969","generation":1,"creationTimestamp":"2019-08-13T09:11:58Z","annotations":{"kubectl.kubernetes.io/last-applied-configuration":"{\"apiVersion\":\"stash.appscode.com/v1alpha1\",\"kind\":\"Restic\",\"metadata\":{\"annotations\":{},\"name\":\"vol-backup\",\"namespace\":\"default\"},\"spec\":{\"backend\":{\"local\":{\"hostPath\":{\"path\":\"/tmp/stash-backup/restic-repo\"},\"mountPath\":\"/safe/data\"},\"storageSecretName\":\"stash-backup\"},\"fileGroups\":[{\"path\":\"/bitnami\",\"retentionPolicyName\":\"keep-last-5\"}],\"retentionPolicies\":[{\"keepLast\":5,\"name\":\"keep-last-5\",\"prune\":true}],\"schedule\":\"@every 1m\",\"selector\":{\"matchLabels\":{\"app\":\"vol-backup\"}},\"volumeMounts\":[{\"mountPath\":\"/bitnami\",\"name\":\"source-data\"}]}}\n"}},"spec":{"selector":{"matchLabels":{"app":"vol-backup"}},"fileGroups":[{"path":"/bitnami","retentionPolicyName":"keep-last-5"}],"backend":{"storageSecretName":"stash-backup","local":{"hostPath":{"path":"/tmp/stash-backup/restic-repo"},"mountPath":"/safe/data"}},"schedule":"@every 1m","volumeMounts":[{"name":"source-data","mountPath":"/bitnami"}],"resources":{},"retentionPolicies":[{"name":"keep-last-5","keepLast":5,"prune":true}]}}
 
    restic.appscode.com/tag: 0.7.0
 
  creationTimestamp: "2019-08-13T08:46:40Z"
 
  generation: 2
 
  labels:
 
    app: vol-backup
 
  name: vol-backup
 
  namespace: default
 
  resourceVersion: "118004"
 
  selfLink: /apis/extensions/v1beta1/namespaces/default/deployments/vol-backup
 
  uid: de5d4959-bda6-11e9-a8d3-8a44d1251ba5
 
spec:
 
  progressDeadlineSeconds: 600
 
  replicas: 1
 
  revisionHistoryLimit: 2
 
  selector:
 
    matchLabels:
 
      app: vol-backup
 
  strategy:
 
    rollingUpdate:
 
      maxSurge: 25%
 
      maxUnavailable: 25%
 
    type: RollingUpdate
 
  template:
 
    metadata:
 
      annotations:
 
        restic.appscode.com/resource-hash: "6494818429900406018"
 
      creationTimestamp: null
 
      labels:
 
        app: vol-backup
 
      name: busybox
 
    spec:
 
      containers:
 
      - command:
 
        - sleep
 
        - "3600"
 
        image: busybox
 
        imagePullPolicy: IfNotPresent
 
        name: busybox
 
        resources: {}
 
        terminationMessagePath: /dev/termination-log
 
        terminationMessagePolicy: File
 
        volumeMounts:
 
        - mountPath: /bitnami
 
          name: source-data
 
      - args:
 
        - backup
 
        - --restic-name=vol-backup
 
        - --workload-kind=Deployment
 
        - --workload-name=vol-backup
 
        - --docker-registry=appscode
 
        - --image-tag=0.7.0
 
        - --run-via-cron=true
 
        - --pushgateway-url=http://stash-operator.default.svc:56789
 
        - --enable-analytics=true
 
        - --enable-rbac=true
 
        - --logtostderr=false
 
        - --alsologtostderr=false
 
        - --v=3
 
        - --stderrthreshold=0
 
        env:
 
        - name: NODE_NAME
 
          valueFrom:
 
            fieldRef:
 
              apiVersion: v1
 
              fieldPath: spec.nodeName
 
        - name: POD_NAME
 
          valueFrom:
 
            fieldRef:
 
              apiVersion: v1
 
              fieldPath: metadata.name
 
        - name: APPSCODE_ANALYTICS_CLIENT_ID
 
          value: d41d8cd98f00b204e9800998ecf8427e
 
        image: appscode/stash:0.7.0
 
        imagePullPolicy: IfNotPresent
 
        name: stash
 
        resources: {}
 
        terminationMessagePath: /dev/termination-log
 
        terminationMessagePolicy: File
 
        volumeMounts:
 
        - mountPath: /tmp
 
          name: stash-scratchdir
 
        - mountPath: /etc/stash
 
          name: stash-podinfo
 
        - mountPath: /bitnami
 
          name: source-data
 
          readOnly: true
 
        - mountPath: /safe/data
 
          name: stash-local
 
      dnsPolicy: ClusterFirst
 
      restartPolicy: Always
 
      schedulerName: default-scheduler
 
      securityContext: {}
 
      terminationGracePeriodSeconds: 30
 
      volumes:
 
      - name: source-data
 
        persistentVolumeClaim:
 
          claimName: data-moodle-for-shifters-mariadb-0
 
      - emptyDir: {}
 
        name: stash-scratchdir
 
      - downwardAPI:
 
          defaultMode: 420
 
          items:
 
          - fieldRef:
 
              apiVersion: v1
 
              fieldPath: metadata.labels
 
            path: labels
 
        name: stash-podinfo
 
      - hostPath:
 
          path: /tmp/stash-backup
 
          type: ""
 
        name: stash-local
 
status:
 
  availableReplicas: 1
 
  conditions:
 
  - lastTransitionTime: "2019-08-13T08:46:43Z"
 
    lastUpdateTime: "2019-08-13T08:46:43Z"
 
    message: Deployment has minimum availability.
 
    reason: MinimumReplicasAvailable
 
    status: "True"
 
    type: Available
 
  - lastTransitionTime: "2019-08-13T08:46:40Z"
 
    lastUpdateTime: "2019-08-13T09:12:00Z"
 
    message: ReplicaSet "vol-backup-c9b5575f4" has successfully progressed.
 
    reason: NewReplicaSetAvailable
 
    status: "True"
 
    type: Progressing
 
  observedGeneration: 2
 
  readyReplicas: 1
 
  replicas: 1
 
  updatedReplicas: 1
 
KristMac:moodle-for-shifters Christian$ kubectl get repository -l workload-name=vol-backup
 
NAME                      AGE
 
deployment.vol-backup  1m
 
 
 
kubectl get repository deployment.vol-backup -o yaml
 
 
 
Pause backups:
 
kubectl patch restic vol-backup --type="merge" --patch='{"spec": {"paused": true}}'
 
 
resume
 
kubectl patch restic vol-backup --type="merge" --patch='{"spec": {"paused": false}}'
 
 
 
 
 
Retrieve
 
apply -f ibmcloud/dev/backups/persistentVolumeClaim-moodle-backup-dev.yaml
 
persistentvolumeclaim/data-moodle-backup created
 
KristMac:moodle-for-shifters Christian$ kubectl apply -f ibmcloud/dev/backups/persistentVolume
 
persistentVolume-moodle-backup-dev.yaml      persistentVolumeClaim-moodle-backup-dev.yaml
 
KristMac:moodle-for-shifters Christian$ kubectl apply -f ibmcloud/dev/backups/persistentVolume-moodle-backup-dev.yaml
 
persistentvolume/moodle-backup created
 
KristMac:moodle-for-shifters Christian$ kubectl apply -f ibmcloud/dev/backups/stash-backup-access.yaml
 
deployment.apps/stash-backup-access created
 
 
kubectl cp  default/stash-backup-access-97c8667f7-fmrbf:safe/data ibmcloud/dev/backups/
 
 
 
Restore
 
(ne pas oublier de copier le backup dans Safe)
 
apply -f ibmcloud/dev/backups/restore.yaml
 
recovery.stash.appscode.com/vol-backup created
 
 
  kubectl get recovery vol-backup -o yaml
 
apiVersion: stash.appscode.com/v1alpha1
 
kind: Recovery
 
metadata:
 
  annotations:
 
    kubectl.kubernetes.io/last-applied-configuration: |
 
      {"apiVersion":"stash.appscode.com/v1alpha1","kind":"Recovery","metadata":{"annotations":{},"name":"vol-backup","namespace":"default"},"spec":{"paths":["/bitnami"],"recoveredVolumes":[{"hostPath":{"path":"/tmp/data"},"mountPath":"/bitnami"}],"repository":{"name":"deployment.vol-backup","namespace":"default"}}}
 
  creationTimestamp: "2019-08-13T12:28:34Z"
 
  generation: 3
 
  name: vol-backup
 
  namespace: default
 
  resourceVersion: "131715"
 
  selfLink: /apis/stash.appscode.com/v1alpha1/namespaces/default/recoveries/vol-backup
 
  uid: de2f636e-bdc5-11e9-a8d3-8a44d1251ba5
 
spec:
 
  paths:
 
  - /bitnami
 
  recoveredVolumes:
 
  - hostPath:
 
      path: /tmp/data
 
    mountPath: /bitnami
 
  repository:
 
    name: deployment.vol-backup
 
    namespace: default
 
status:
 
  phase: Succeeded
 
 
 
 
 
creation d’un cloud object storage dans le groupe shiftersResource-Dev
 
bucket moodle-data-backup
 
classe de stockage standard
 
creation d’un access key pour restic
 
{
 
  "apikey": "lU4Xy8L23yq3GXoXHjnpp7mFiySuQg1E_ZNVQJcbgvAO",
 
  "cos_hmac_keys": {
 
    "access_key_id": "73aac49ac6104e709352098648794c72",
 
    "secret_access_key": "7379b2d45ae9f37b4653da77b0b6e479b423c77de5fcff29"
 
  },
 
  "endpoints": "https://control.cloud-object-storage.cloud.ibm.com/v2/endpoints",
 
  "iam_apikey_description": "Auto-generated for key 73aac49a-c610-4e70-9352-098648794c72",
 
  "iam_apikey_name": "Restic-Service-credentials",
 
  "iam_role_crn": "crn:v1:bluemix:public:iam::::serviceRole:Writer",
 
  "iam_serviceid_crn": "crn:v1:bluemix:public:iam-identity::a/e57a5c5d7c8d46c0959d04a481877ee3::serviceid:ServiceId-bcf15027-97f8-4213-84ea-6162597e7e48",
 
  "resource_instance_id": "crn:v1:bluemix:public:cloud-object-storage:global:a/e57a5c5d7c8d46c0959d04a481877ee3:4c56b257-15b0-43ab-b2e5-58e4190223b1::"
 
}
 
 
 
echo -n 'passStash' > ibmcloud/dev/backups/RESTIC_PASSWORD
 
echo -n '73aac49ac6104e709352098648794c72'  > ibmcloud/dev/backups/AWS_ACCESS_KEY_ID
 
echo -n '7379b2d45ae9f37b4653da77b0b6e479b423c77de5fcff29' > ibmcloud/dev/backups/AWS_SECRET_ACCESS_KEY
 
kubectl create secret generic s3-secret \
 
    --from-file=ibmcloud/dev/backups/RESTIC_PASSWORD \
 
    --from-file=ibmcloud/dev/backups/AWS_ACCESS_KEY_ID \
 
    --from-file=ibmcloud/dev/backups/AWS_SECRET_ACCESS_KEY
 
secret/s3-secret created
 
 
 
apply -f ibmcloud/dev/backups/restic-s3.yaml
 
restic.stash.appscode.com/s3-restic created
 
  
 
===== Environnement de production =====
 
===== Environnement de production =====

Version du 10 septembre 2019 à 16:07


Mission
Dates
Créée Achevée
21/06/2019
Contacts
The Shift Project Shifters
Clémence V. Vincent Lefoulon
Contributeurs
27
Documents
Cahier des charges

Description de la mission

Structurer une communauté d’enseignants, via un espace de travail (Slack ou autre, à réfléchir) permettant à ces personnes d’échanger entre elles au sujet de l'enseignement des enjeux climatiques.

Les besoins sont décrits dans le cahier des charges.

A ce propos, « il s’agit là d’un projet très élaboré et ambitieux, qui nécessite de lourds moyens (évalués par un professionnel à 70000€ d’expertise), et dont nous souhaiterions voir le Ministère s’emparer. Ce que nous visons dans le cadre de cette mission est d’une ampleur moindre, et vise surtout à offrir une solution alternative aux enseignants et autres acteurs de la communauté pédagogique qui souhaite échanger avec leurs pairs de différentes disciplines, et partager des ressources pédagogiques. Et ce en attendant que la plateforme que nous avons pensée voit le jour (ce qui risque de prendre du temps, si cela a lieu) ».

Le mail de Clémence contient des informations supplémentaires :

Certains d’entre vous ont demandé certaines précisions avant de confirmer leur engagement, je vais donc tacher d’éclairer la démarche, afin que vous puissiez décider si vous souhaitez vraiment contribuer à cette mission :

  • Il s’agit à ce stade uniquement de constituer et structurer la plateforme, pas encore de la diffuser, ni encore de l’alimenter avec des ressources et témoignages. Cette phase viendra plus tard. Si c’est sur cet aspect que vous souhaitez contribuer, ne vous inquiétez pas, tout le réseau des Shifters seront tenus informés de la mise en route de la plateforme, et il sera temps d’apporter votre aide pour cette étape à ce stade.
  • En ce qui concerne l’organisation de cette mission, il est nécessaire qu’un pilote se désigne, pour coordonner le travail, et animer le suivi de la mission, et faire le lien plus directement avec moi au Shift. à certains d’entre vous se sentent-ils capables de tenir ce rôle ? En effet, je ne piloterais pas précisément cette mission, même si nous travaillerons en étroite collaboration pour être sûrs d’aller dans la bonne (et la même) direction. Si vous êtes intéressés, merci de me le signaler !
  • En ce qui concerne les outils de travail, le plus simple est que ceux d’entre vous qui sont toujours motivés pour discuter concrètement des outils et supports à disposition se retrouve sur une chaine dédiée sur le slack Shifters (#Mission Plateforme pédagogique) pour se reconnaitre et initier les échanges. Pour le support « papier », je vous laisse décider de l’outil qui vous convient le mieux (j’ai personnellement tendance à utiliser un googledoc et googlesheet pour travailler à plusieurs et mettre les idées en commun). Ne pas être à Paris ne devrait pas poser de problème, et la plupart des échanges pourront, je pense, se faire via les outils numériques.
  • En termes de quantité de travail demandée : ce sera selon le nombre de personnes impliquées. Mais a priori il s’agit plutôt de mener une discussion et partager vos expériences quant à ces outils-là, et ensuite réfléchir à la manière de structurer l’outil. Puis la diffusion se fera avec l’aide de tous les shifters qui le voudront, et ne devrait pas être trop prenante.

Quelques idées mentionnées par mail : l’utilité de regarder et comparer les outils de partage de contenu déjà existantes et utilisées par les enseignants (moodle, workplace, slack).

Équipe

Elle est constituée de :

  • 2 référents, coordinateurs de la mission : Vincent Lefoulon et Delphine Chadefaux
  • 26 contributeurs

Calendrier

  • Semaine du 1er juillet : outil(s) choisi(s)
  • Semaine du 8 juillet : outils structurés et configurés
  • Semaine du 22 juillet : outils déployés et utilisables
  • Semaines suivantes : communication autour de l'outil, diffusion dans le monde de l'enseignement

Contenu de la mission

Etude du cahier des charges

Le terme « outil » désigne l'outil temporaire mis en place par les Shifters et non pas l'outil final.

Questions/remarques

On liste ici les potentiels points peu clairs du cahier des charges, les questions non soulevées...

  • L'outil devra-t-il être sous licence libre ?
  • Par qui sera-t-il déployé et maintenu (d'un point de vue informatique) ?
  • Qui maintiendra le contenu de la plateforme (alimentation, modération...) ?
  • Présence de données personnelles dans un compte d'utilisateur et probablement un profil, le RGPD doit être "légalement" appliqué.
  • Des contenus vont être mis en ligne. Peut se poser la question de la propriété intellectuelle et de la licence
  • Attention aux suites et aux applications gratuites sur le cloud. La sécurité et la confidentialité des données (si c'est un prérequis) ne sont pas nécessairement "garanties". L'ANSSI (Agence Nationale de la Sécurité des Systèmes d'Information) fait des recommandations en ce sens. En outre, certaines plateforme autorisent un nombre limité de messages.
  • Peut-on avoir plusieurs outils, à l'instar des Shifters qui travaillent avec Slack pour les discussions et un wiki pour le contenu persistent ?
  • "Possibilité pour les utilisateurs d’uploader des ressources pédagogiques accessibles à tous" -> "tous" inclut-il les personnes non inscrites sur la plateforme ?

Rencensement d'outils

Ce document recense plusieurs outils selon divers critères :

https://lite.framacalc.org/shifters_plateforme_pedago

Moodle

Du fait des fonctionnalités qu'elle fournit et de son usage dans le monde de l'enseignement, nous avons choisi la plateforme Moodle : https://moodle.org/

Une plateforme de test est disponible ici : http://159.122.174.23:30000

Configuration

Cette section décrit comment la plateforme a été configurée depuis son interface d'administration pour la rendre plus ergonomique et la faire correspondre à nos besoins.

Un ancien travail : https://lite.framacalc.org/shifters_moodle

URL de la page de paramétrage Paramétrage Raison (si non évidente) Auteur Date
/admin/tool/langimport/index.php Installer le pack "Français (fr)" Vincent 13/08/19
/admin/settings.php?section=langsettings "Langue par défaut" = "Français (fr)" Vincent 13/08/19
/admin/settings.php?section=frontpagesettings "Nom complet du site" = "Les Shifters" Vincent 13/08/19
/admin/settings.php?section=frontpagesettings "Nom abrégé du site" = "Les Shifters" Vincent 13/08/19
/admin/settings.php?section=frontpagesettings "Page d'accueil" =
  • "Zone de recherche de cours"
  • "Liste des cours"
Vincent 13/08/19
/admin/settings.php?section=frontpagesettings "Éléments de la page d'accueil, une fois connecté" =
  • "Zone de recherche de cours"
  • "Cours de l'utilisateurs"
  • "Liste des cours"
Vincent 13/08/19
/admin/settings.php?section=frontpagesettings "Nombre d'annonces" = 0 A priori, on n'utilisera pas les annonces. Vincent 13/08/19
Personnaliser le tableau de bord par défaut
/admin/settings.php?section=manageauths Activer le plugin "Auto-enregistrement par courriel" S'inscrire à la plateforme sans demander l'autorisation Vincent 13/08/19
/admin/settings.php?section=manageauths "Auto-enregistrement" = "Auto-enregistrement par courriel" S'inscrire à la plateforme sans demander l'autorisation Vincent 13/08/19
/admin/settings.php?section=manageauths "Permettre la connexion au moyen de l'adresse de courriel" = "Oui" (case cochée) Vincent 13/08/19
/admin/settings.php?section=enrolsettingsself "Autoriser les méthodes d'auto-inscription existantes" = "Oui" Participer à un cours sans demander l'autorisation Vincent 13/08/19
/admin/settings.php?section=enrolsettingsguest "Permettre l'accès anonyme" = "Oui" Lire les cours sans devoir se connecter Vincent 13/08/19
/admin/settings.php?section=userpolicies "Connecter automatiquement les visiteurs anonymes" = "Oui" Lire les cours sans devoir se connecter Vincent 13/08/19
/admin/settings.php?section=userpolicies "Rôle par défaut des utilisateurs" = "Créateur de cours" Créer un cours sans demander l'autorisation Tom 13/08/19
/admin/settings.php?section=outgoingmailconfig Un exemple avec le serveur SMTP de GMail :
  • "SMTP hosts" = "smtp.gmail.com:587"
  • "SMTP security" = "TLS"
  • "SMTP Auth Type" = "LOGIN"
  • "SMTP username" = "xxx@gmail.com"
  • "SMTP password" = mot de passe d'application
  • "No-reply address" = "xxx@gmail.com"

Pour tester : /admin/testoutgoingmailconf.php

Pour débugger : /admin/settings.php?section=debugging

Permettre l'envoi de mails (type confirmation d'inscription) Vincent 19/08/19

Déploiement informatique

Cette section décrit comment la plateforme a été déployée informatiquement.

On distingue 2 environnements: - un environnement de développement/test qui est un bac à sable temporaire, réservé à certains membres des shifters, permettant de mettre au point la plateforme (ergonomie, modules, etc). Liens: https://159.122.174.23:31000/, http://159.122.174.23:30000/ - et un environnement de production utilisée par les utilisateurs finaux (enseignants, chercheurs, etc), utilisant le paramétrage mis au point sur la plateforme de test. Lien: https://shifterscluster-prod.par01.containers.appdomain.cloud/

Ces 2 environnements sont hébergés sur la plateforme de Cloud de IBM. (cloud.ibm.com). Ils sont constitués tous deux d'un cluster Kubernetes executant des versions containerisées (Docker) de Moodle et de MariaDB.

Environnement de production
Création du cluster

- Création d’un groupe de resource ShiftersResourceGroup-Prod

- Création d’un Cluster Kubernetes payant (1 machine héberge le contrôleur et 1 worker node) sur ibmcloud (cloud.ibm.com) sur le Cloud Public zone Europe / Datacenters de Paris dans le groupe de ressources , nommé ShiftersCluster-Prod

- Association du cluster ShiftersCluster-Prod au groupe de ressources ShiftersResourceGroup-Prod

- Création d’un groupe d’accès (IAM) ShiftersAccessGroup

- Ajout de Vincent Lefoulon et Tom Domenge dans le groupe utilisateurs en tant qu’Editors

- Installation sur le poste de travail de quelques outils d'interface CLI ainsi que le plug-in Kubernetes Service. Sur MacOS la commande était:

curl -sL https://ibm.biz/idt-installer | bash

- Connection au cluster

ibmcloud login -a cloud.ibm.com -r eu-de -g ShiftersResourceGroup-Prod

Noeud final de l'API : https://cloud.ibm.com

Email> christian@chateauvieux.net

Password> Authentification... OK

Compte ciblé Christian Chateauvieux's Account (e57a5c5d7c8d46c0959d04a481877ee3) <-> 1957782

Groupe de ressources ciblé ShiftersResourceGroup-Prod

Région ciblée eu-de


Noeud final d'API : https://cloud.ibm.com Région : eu-de Utilisateur : christian@chateauvieux.net Compte : Christian Chateauvieux's Account (e57a5c5d7c8d46c0959d04a481877ee3) <-> 1957782 Groupe de ressources : ShiftersResourceGroup-Prod Noeuds finaux d'API CF : Organisation : Espace :

Astuce : si vous gérez les services et les applications Cloud Foundry - Utilisez 'ibmcloud target --cf' pour cibler l'organisation/l'espace Cloud Foundry de manière interactive ou utilisez 'ibmcloud target --cf-api ENDPOINT -o ORG -s SPACE' pour cibler l'organisation/l'espace. - Utilisez 'ibmcloud cf' si vous souhaitez exécuter l'interface de ligne de commande Cloud Foundry avec le contexte IBM Cloud CLI en cours.

- Téléchargement sur le poste local de la configuration du cluster

ibmcloud ks cluster-config --cluster ShiftersCluster-Prod

OK La configuration de ShiftersCluster-Prod a été téléchargée correctement.


- Export des variables d'environnement pour commencer à utiliser Kubernetes.

export KUBECONFIG=/Users/Christian/.bluemix/plugins/container-service/clusters/ShiftersCluster-Prod/kube-config-par01-ShiftersCluster-Prod.yml

- Création du role binding d'administration

kubectl create clusterrolebinding add-on-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default


- Initialisation du Tiller Helm sur le cluster

helm init --upgrade


- Ajout du repository Kubernetes

helm repo add kubernetes https://kubernetes-charts.storage.googleapis.com

"kubernetes" has been added to your repositories


Installation de Moodle via Helm Charts

- On se place dans moodle-for-shifters/ibmcloud/prod

cd moodle-for-shifters/ibmcloud/prod

- PersistentVolumeClaim

kubectl apply -f persistentVolumeClaim-moodle-prod.yaml 

persistentvolumeclaim/data-moodle-for-shifters created

kubectl apply -f persistentVolumeClaim-mariadb-prod.yaml 

persistentvolumeclaim/data-moodle-for-shifters-mariadb-0 created

- Installation de Moodle

helm install --name moodle-for-shifters --values=values-prod.yaml kubernetes/moodle

NAME: moodle-for-shifters LAST DEPLOYED: Fri Aug 9 15:39:44 2019 NAMESPACE: default STATUS: DEPLOYED

RESOURCES: ==> v1/ConfigMap NAME DATA AGE moodle-for-shifters-mariadb 1 1s moodle-for-shifters-mariadb-tests 1 1s

==> v1/Pod(related) NAME READY STATUS RESTARTS AGE moodle-for-shifters-6d4f885986-kh7fp 0/1 ContainerCreating 0 1s moodle-for-shifters-mariadb-0 0/1 ContainerCreating 0 1s

==> v1/Secret NAME TYPE DATA AGE moodle-for-shifters Opaque 2 1s moodle-for-shifters-mariadb Opaque 2 1s

==> v1/Service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE moodle-for-shifters NodePort 172.21.99.116 <none> 80:30917/TCP,443:31037/TCP 1s moodle-for-shifters-mariadb ClusterIP 172.21.40.180 <none> 3306/TCP 1s

==> v1beta1/Deployment NAME READY UP-TO-DATE AVAILABLE AGE moodle-for-shifters 0/1 1 0 1s

==> v1beta1/StatefulSet NAME READY AGE moodle-for-shifters-mariadb 0/1 1s


NOTES:

    • Please be patient while the chart is being deployed **

1. Access you Moodle instance with:

 export NODE_PORT=$(kubectl get --namespace default -o jsonpath="{.spec.ports[0].nodePort}" services moodle-for-shifters)
 export NODE_IP=$(kubectl get nodes --namespace default -o jsonpath="{.items[0].status.addresses[0].address}")
 echo "Moodle URL: http://$NODE_IP:$NODE_PORT/"

2. Login with the following credentials

 echo Username: user
 echo Password: $(kubectl get secret --namespace default moodle-for-shifters -o jsonpath="{.data.moodle-password}" | base64 --decode)

- Le node port retourné ici est 80

- Obtention de l'addresse IP du worker node de test

ibmcloud cs workers ShiftersCluster-Prod 
-> 159.8.83.19

- Admin Moodle: user | Mot de passe: Apxseo4m5e

Installation via Docker (Non utilisée)
ibmcloud cr namespace-add shifters

Ajout de l'espace de nom 'shifters'...

Espace de nom ajouté avec succès 'shifters'

OK

docker pull stable/moodle
docker tag bitnami/moodle de.icr.io/shifters/repo:moodle
ibmcloud cr login

Connexion à 'registry.eu-de.bluemix.net'... Connecté à 'registry.eu-de.bluemix.net'.

IBM Cloud Container Registry is adopting new icr.io domain names to align with the rebranding of IBM Cloud for a better user experience. The existing bluemix.net domain names are deprecated, but you can continue to use them for the time being, as an unsupported date will be announced later. For more information about registry domain names, see https://cloud.ibm.com/docs/services/Registry?topic=registry-registry_overview#registry_regions_local

Connexion à 'de.icr.io'... Connecté à 'de.icr.io'.

IBM Cloud Container Registry is adopting new icr.io domain names to align with the rebranding of IBM Cloud for a better user experience. The existing bluemix.net domain names are deprecated, but you can continue to use them for the time being, as an unsupported date will be announced later. For more information about registry domain names, see https://cloud.ibm.com/docs/services/Registry?topic=registry-registry_overview#registry_regions_local

OK

docker push de.icr.io/shifters/repo:moodle