Solution de déploiement pour gérer des calendriers partagés entre plusieurs associations universitaires et diffuser les événements publiquement tout au même endroit.
-
Le problème qui était à résoudre : plusieurs associations universitaires publieent leurs événements sur des calendriers séparés (Google Calendar, iCal, etc.) et il est difficile pour les étudiants de les retrouver.
-
Notre solution : un stack Docker qui agrège ces calendriers dans une interface web unique et publique, avec une gestion simple des utilisateurs et des droits d'accès.
Nous avons réutilisé plusieurs projets open-source pour construire notre solution afin de maximiser la robustesse et minimiser le temps de développement :
- Nextcloud pour la création des évênements par les associations
- FullCalendar pour l'affichage du calendrier sur le site public
- plusieurs autres packages python pour la conversion des formats de calendrier (ICS vers JSON)
Docker (>=20.10) et Docker Compose installés
flowchart TD
U[Utilisateurs] -->|HTTP 8081| CAL[calendar nginx]
CAL --> EVENTS[(events.json)]
CAL --> IMGS[(images folder)]
FEEDS[(feeds.txt)] -. RO .-> CV[converter ICS->JSON + images]
CV -->|ecrit| EVENTS
CV -->|copie| IMGS
ADM[Admins/Associations] -->|HTTP 8080| NC[nextcloud 31]
NC <--> DB[(mariadb 10.11)]
NC --- NCD[(volume nextcloud_data)]
NCD -. RO vers converter .-> CV
IMGW[imgworker] -->|optimise| IMGS
WT[watchtower] -. met a jour .-> NC
WT -. met a jour .-> DB
- Cloner ce dépôt Git :
git clone https://github.com/hamoncode/dockerStackCalendrier.git
cd dockerStackCalendrier
- Créer et éditer le fichier
.enven vous basant sur.env.example:
cp .env.example .env
nano .env
# Éditez `.env` avec vos valeurs (ex. `NEXTCLOUD_HOST`, `DB_PASSWORD`, etc.)
# Il est important que vous preniez note du nom d'usager et du mot de
# passe administrateur NextCloud, car vous en aurez besoin à la prochaine étape
- Ajouter le nom d'usager et le mot de passe au fichier converter/motsDePasses.json
nano converter/motsDePasses.json
# Entrez par paires le nom d'utilisateur ADMIN et son mot de passe associé
# selon l'exemple suivant :
{
"nom-d'utilisateur":"mot-de-passe"
}- Créer réseaux docker web
docker network create web || true
- Partir le stack avec Docker Compose
docker compose up -d --build
-
Ouvrez l'interface NextCloud sur votre navigateur web en entrant l'adresse suivante :
http://localhost:8080/ -
Enregistrez-vous en tant qu'administrateur avec les identifiants de l'étape 2
-
Visitez le calendrier des élèves avec l'URL suivante :
http://localhost:8081/
- lancer script d'automatisation nc_add_calendar_user.sh
./nc_add_calendar_user.sh
- répondre aux questions posées dans le cli
- se connecter avec le compte et aller chercher le ics plublic de l'utilisateur dans nextcloud(voir screenshots comment aller chercher dans GUI)
- ajouter le lien ics dans le fichier feeds.txt
nano ./converter/feeds.txt- declarer le nom de votre asso = ajouter le lien ics copié dans nextcloud changer le domaine pour le volume partagé docker (nextcloud dans notre cas)
exemple:
rei=https://ubuntu:8080/remote.php/dav/calendars/asso/calendarname/calendar.ics
devient
rei=http://nextcloud/remote.php/dav/calendars/asso/calendarname/calendar.ics
- relancer le container converter pour prendre en compte le nouveau feed
docker-compose restart converter- demander a l'association de changer son mot de passe temporaire nextcloud pour un mot de passe robuste
-
L'association se connecte à Nextcloud avec son compte utilisateur
-
Aller dans l'application "Calendrier" (Calendar)
-
Créer un nouvel événement en cliquant sur le bouton "+" (Ajouter)
-
Remplir les détails de l'événement (titre, date, description, etc.)
-
pour ajouter une image :
- sauvegarder l'événement
-
Attendre que le script de conversion (converter) s'exécute (toutes les 1 minute)
-
Vérifier que l'événement apparaît sur le calendrier public (port 8081)






