Différences entre les versions de « Espace numérique associatif »

De Wiki BDE-UTC

(Création de la page)
m
 
(19 versions intermédiaires par 3 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
 
[[Category:Services informatiques]]
 
[[Category:Services informatiques]]
  
= Utilisation de l'espace numérique associatif =
+
== Mail asso en @assos.utc.fr ==
  
== Vue d'ensemble de l'architecture ==
+
Une adresses mail en [login_asso]@assos.utc.fr est attribué à chaque association de la fédération lors de la [[Création d'un espace numérique associatif|création de l'espace numérique]].
L'infrastructure proposée par le SIMDE est composée de plusieurs machines interconnectées qui permettent à chaque asso de profiter d'un espace informatique, notamment utilisé pour héberger des sites web, web app, serveurs (containerisés ou non).
+
 
 +
Accès à la webmail des assos juste [https://assos.utc.fr/webmail ici].
 +
 
 +
== Portail des assos ==
 +
 
 +
Le portail des assos est le point d'accueil pour la vie associative. Il permet de consulter l'ensemble des associations présentes au sein de la fédération et de les rejoindre.
 +
 
 +
A la [[Création d'un espace numérique associatif|création de votre espace numérique]], le SiMDE ajoute votre association au catalogue avec les informations fournies. Si celles-ci viennent à évoluer au fil du temps, alors l'association peut [mailto:simde@assos.utc.fr contacter le SiMDE] pour mettre à jour ces infos.
 +
 
 +
Accès au portail des assos juste [https://assos.utc.fr ici].
 +
 
 +
== Cloud des assos ==
 +
 
 +
Chaque association dispose d'un espace de 20Go pour stocker des fichiers sur le serveur Nextcloud du SiMDE.
 +
 
 +
L'accès se fait avec le login/mdp principal juste [https://cloud.assos.utc.fr ici].
 +
 
 +
== Serveur web ==
 +
 
 +
=== Vue d'ensemble de l'architecture ===
 +
L'infrastructure proposée par le SiMDE est composée de plusieurs machines interconnectées qui permettent à chaque asso de profiter d'un espace informatique, notamment utilisé pour héberger des sites web, web app, serveurs (containerisés ou non).
  
 
''Cette ressource a pris pour parti de se concentrer essentiellement sur les serveurs Laravel. Loin de supposer que Laravel est mieux que Rust, Node, Symfony... Mais c'est avant toute chose car''
 
''Cette ressource a pris pour parti de se concentrer essentiellement sur les serveurs Laravel. Loin de supposer que Laravel est mieux que Rust, Node, Symfony... Mais c'est avant toute chose car''
  
* ''Laravel est un serveur PHP et convient donc parfaitement pour être servi par le serveur Apache du SIMDE''
+
* ''Laravel est un serveur PHP et convient donc parfaitement pour être servi par le serveur Apache du SiMDE''
 
* ''Laravel c'est facile à comprendre, ça permet une formation rapide pour reprendre en main les services proposés''
 
* ''Laravel c'est facile à comprendre, ça permet une formation rapide pour reprendre en main les services proposés''
* ''Laravel est utilisé dans la majorité des web app / serveurs des assos utcéennes (Integ, Pic, SIMDE, Skiut...), une personne qui se forme sur Laravel à l'UTC pourra donc s'y retrouver sur à peu près tous les projets info.''
+
* ''Laravel est utilisé dans la majorité des web app / serveurs des assos utcéennes (Intégration, Pic'Asso, SiMDE, Ski'UTC...), une personne qui se forme sur Laravel à l'UTC pourra donc s'y retrouver sur à peu près tous les projets informatiques.''
  
 
=== Ce qu'il faut savoir sur l'architecture ===
 
=== Ce qu'il faut savoir sur l'architecture ===
Le SIMDE propose à chaque association un espace informatique sur la machine '''files.mde.etc'''. Pour modifier les fichiers sur son espace, chaque association possède un accès SFTP et SSH à la machine (accès bien évidemment restreint aux dossiers de l'association). Les fichiers sont ensuite récupérés par un Apache qui sert les fichiers statiques et les applications web. ⚠️ '''Attention''' : Apache est très adapté pour servir du HTML/CSS/JS/PHP mais n'est pas adapté au Node.js et python. Si vous prévoyez d'utiliser un de ces deux langages, nous vous conseillons vivement de containeriser votre projet (cas particulier pour le node statique qui peut être exporté).
+
Le SiMDE propose à chaque association un espace informatique sur la machine '''files.mde.etc'''. Pour modifier les fichiers sur son espace, chaque association possède un accès SFTP et SSH à la machine (accès bien évidemment restreint aux dossiers de l'association). Les fichiers sont ensuite récupérés par un Apache qui sert les fichiers statiques et les applications web.  
 +
 
 +
⚠️ '''Attention''' : Apache est très adapté pour servir du HTML/CSS/JS/PHP mais n'est pas adapté au Node.js et Python. Si vous prévoyez d'utiliser un de ces deux langages, nous vous conseillons vivement de conteneuriser votre projet (cas particulier pour le node statique qui peut être exporté).
  
Si besoin, le SIMDE peut également héberger des applications containerisées via Docker, mais cela nécessite une demande spécifique. ⚠️ '''Attention''' : La configuration du container ne revient pas au SIMDE, mais bien à l'association qui en fait la demande.
+
⚠️ '''Attention''' : Au cas par cas, le SiMDE peut également héberger des applications conteneurisées via Docker, mais cela nécessite une demande spécifique et la configuration du container ne revient pas au SIMDE, mais bien à l'association qui en fait la demande.  
  
== Accès à l'infrastructure ==
+
=== Accès à l'infrastructure ===
 
⚠️ '''Attention''' : Pour se connecter en SFTP, SSH ou même à la base de données fournie à l'association, il faut utiliser le VPN fourni par l'UTC (ou directement être connecté à utcetu).
 
⚠️ '''Attention''' : Pour se connecter en SFTP, SSH ou même à la base de données fournie à l'association, il faut utiliser le VPN fourni par l'UTC (ou directement être connecté à utcetu).
  
Ligne 31 : Ligne 53 :
 
* '''Hôte''' : files.mde.etc
 
* '''Hôte''' : files.mde.etc
 
* '''Type d'authentification''' : Normale
 
* '''Type d'authentification''' : Normale
* '''Identifiants''' : Fournis par le SIMDE
+
* '''Identifiants''' : Fournis par le SiMDE
 +
[[Fichier:Filezilla-1.png|gauche|vignette|540x540px|Bouton nouvelle connexion]]
 +
[[Fichier:Filezilla-2.png|centré|vignette|511x511px|Champs à configurer]]
  
 
==== Procédure de connexion SFTP ====
 
==== Procédure de connexion SFTP ====
  
 
# Ouvrir Filezilla
 
# Ouvrir Filezilla
# Saisir les identifiants fournis par le SIMDE
+
# Saisir les identifiants fournis par le SiMDE
# Se connecter au serveur files.mde.etc
+
# Se connecter au serveur '''files.mde.etc'''
 
# Naviguer vers le dossier de votre association
 
# Naviguer vers le dossier de votre association
 
# Téléverser vos fichiers dans le dossier <code>public_html</code>
 
# Téléverser vos fichiers dans le dossier <code>public_html</code>
  
 
=== Accès SSH ===
 
=== Accès SSH ===
L'accès SSH à la machine files.mde.utc est disponible mais avec des limitations importantes garantissant la sécurité et la confidentialité des assos malgré un hébergement mutualisé sur la même VM
+
L'accès SSH à la machine '''files.mde.utc''' est disponible mais avec des limitations importantes garantissant la sécurité et la confidentialité des assos malgré un hébergement mutualisé sur la même VM
  
'''Connexion SSH :'''
+
'''Connexion SSH :''' <code>ssh [votre-asso]@files.mde.etc</code>
  
 
==== Limitations SSH ====
 
==== Limitations SSH ====
Ligne 54 : Ligne 78 :
 
'''Conséquences pour Laravel :'''
 
'''Conséquences pour Laravel :'''
  
* Le dossier <code>vendor</code> doit être téléversé via SFTP
+
* Le dossier <code>/vendor</code> doit être téléversé via SFTP
 
** Les dépendances doivent être installées localement avant le déploiement ou via [[Espace numérique associatif#probl%C3%A9matique-des-d%C3%A9pendances|d'autres méthodes]]
 
** Les dépendances doivent être installées localement avant le déploiement ou via [[Espace numérique associatif#probl%C3%A9matique-des-d%C3%A9pendances|d'autres méthodes]]
 
* La base de données doit être migrée à la main, ou alors avec des méthodes [[Espace numérique associatif#ex%C3%A9cution-de-code-php-sur-le-serveur|un peu moins conventionnelles]]...
 
* La base de données doit être migrée à la main, ou alors avec des méthodes [[Espace numérique associatif#ex%C3%A9cution-de-code-php-sur-le-serveur|un peu moins conventionnelles]]...
  
== Structure des URLs et déploiement ==
+
=== Structure des URLs et déploiement ===
  
=== Format des URLs ===
+
==== Format des URLs ====
Les applications sont servies selon le format suivant :
+
Les applications sont servies selon un des deux formats suivants :
  
'''Exemples :'''
+
*<code><nowiki>https://assos.utc.fr/</nowiki><loginasso></code>
 +
*<code>https://<loginasso>.assos.utc.fr</code>
  
* Ski'ut : <code><nowiki>https://assos.utc.fr/skiutc</nowiki></code>
+
Si vous souhaitez posséder l'une des deux en particulier, n'hésitez pas à [mailto:simde@assos.utc.fr contacter le SiMDE].
* Pic'Asso : <code><nowiki>https://assos.utc.fr/picasso</nowiki></code>
 
** Bon en vrai le pic c'est un peu une exception car ils ont reconfiguré pour servir sur <code><nowiki>https://pic.assos.utc.fr</nowiki></code>
 
  
Si vous développez un serveur, pensez donc bien à configurer son .env pour servir cette URL. Dans le cas contraire, vous risquez d'avoir quelques soucis de redirection...
+
Si vous développez un serveur, pensez donc bien à configurer son .env pour servir la bonne URL. Dans le cas contraire, vous risquez d'avoir quelques soucis de redirection...
  
== Stratégies de déploiement ==
+
=== Stratégies de déploiement ===
  
=== Sites web ===
+
==== Sites web ====
 
Pour les sites web, c'est assez facile
 
Pour les sites web, c'est assez facile
  
Ligne 79 : Ligne 102 :
 
# Envoyez tout le dossier dans public_html (en faisant en sorte que le fichier index soit accessible)
 
# Envoyez tout le dossier dans public_html (en faisant en sorte que le fichier index soit accessible)
  
==== Tout de même ====
+
==== Pour aller plus loin (CI/CD) ====
Si vous êtes motivé.e.s, vous pouvez mettre votre repo en public et créer un petit script shell pour cloner le repo et le déployer automatiquement (ça évite de se reconnecter en SFTP à chaque fois). Pour cela il suffit de
+
Si vous êtes motivé.e.s, vous pouvez mettre votre repo Git en public et créer un petit script shell pour cloner le repo et le déployer automatiquement (ça évite de se reconnecter en SFTP à chaque fois). Pour cela il suffit de
  
 
# Créer un script en SSH ou en local et l'envoyer en SFTP
 
# Créer un script en SSH ou en local et l'envoyer en SFTP
 
# Lui donner les droits d'exécution : <code>chmod 755 ./monScript.sh</code>
 
# Lui donner les droits d'exécution : <code>chmod 755 ./monScript.sh</code>
  
''Exemple de Script :''
+
==== Serveurs ====
 
 
=== Serveurs ===
 
 
Pour les serveurs, c'est un peu plus compliqué
 
Pour les serveurs, c'est un peu plus compliqué
  
Ligne 93 : Ligne 114 :
 
# Envoyez tout votre serveur dans le dossier public_html
 
# Envoyez tout votre serveur dans le dossier public_html
 
#* Cette étape peut être longue à cause du dossier de dépendances vendor/, on en reparle juste après
 
#* Cette étape peut être longue à cause du dossier de dépendances vendor/, on en reparle juste après
#* Pensez à bien modifier votre .env pour passer en mode APP_ENV=prod, APP_DEBUG=false et surtout APP_URL=<code><nowiki>https://assos.utc.fr/tonAsso</nowiki></code>
+
#* Pensez à bien modifier votre .env pour passer en mode APP_ENV=prod, APP_DEBUG=false et surtout APP_URL=<code><url_de_ton_asso></code>
 
# En théorie, ça devrait déjà tourner (pas besoin de faire php artisan serve, Apache tourne déjà pleine balle)
 
# En théorie, ça devrait déjà tourner (pas besoin de faire php artisan serve, Apache tourne déjà pleine balle)
  
Ligne 101 : Ligne 122 :
  
 
* Votre URL théorique ne trouve pas le fichier index
 
* Votre URL théorique ne trouve pas le fichier index
* Le index est trouvé mais le serveur Cela peut être dû à de mauvaises config de .htaccess ou de mauvaise version d'interpréteur sur les machines. Dans ces deux cas (et probablement dans d'autres), vous ne pourrez pas faire grand-chose et vous allez devoir [[Mailto:simde@assos.utc.fr|contacter le SIMDE]].
+
* Le index est trouvé mais n'est pas servi. Cela peut être dû à de mauvaises config de .htaccess ou de mauvaise version d'interpréteur sur les machines. Dans ces deux cas (et probablement dans d'autres), vous ne pourrez pas faire grand-chose et vous allez devoir [mailto:simde@assos.utc.fr contacter le SiMDE].
  
 
=== Problématique des dépendances ===
 
=== Problématique des dépendances ===
Ligne 126 : Ligne 147 :
 
** Un fichier deploy.sh qui gère le déploiement (nécessite la [[/github.com/settings/personal-access-tokens|création d'un PAT Github]])
 
** Un fichier deploy.sh qui gère le déploiement (nécessite la [[/github.com/settings/personal-access-tokens|création d'un PAT Github]])
 
** Un dossier tmp pour extraire l'artifact avant de synchroniser les changements avec la prod
 
** Un dossier tmp pour extraire l'artifact avant de synchroniser les changements avec la prod
 
Exemple de GitHub Action :
 
 
Exemple de script de déploiement (deploy.sh) :
 
  
 
==== Déploiement manuel ====
 
==== Déploiement manuel ====
 
Si vous ne pouvez pas utiliser GitHub Actions :
 
Si vous ne pouvez pas utiliser GitHub Actions :
  
# '''Localement :'''
+
# '''Localement :''' <code>composer install --no-dev --optimize-autoloader</code>
 
# '''Téléversement SFTP :'''
 
# '''Téléversement SFTP :'''
#* Téléverser tous les fichiers incluant le dossier <code>vendor</code>
+
#* Téléverser tous les fichiers incluant le dossier <code>/vendor</code>
  
 
=== Exécution de code PHP sur le serveur ===
 
=== Exécution de code PHP sur le serveur ===
Ligne 144 : Ligne 161 :
  
 
'''Exemple Laravel :'''
 
'''Exemple Laravel :'''
 +
[[Fichier:Commande par URL.png|gauche|vignette|373x373px]]
 +
 +
 +
  
 
==== Méthode 2 : Scripts à la racine ====
 
==== Méthode 2 : Scripts à la racine ====
  
 
# Placer un fichier <code>.php</code> ou <code>.sh</code> à la racine de votre application
 
# Placer un fichier <code>.php</code> ou <code>.sh</code> à la racine de votre application
# L'exécuter via URL : <code><nowiki>https://asso.etc.fr/</nowiki>[association]/script.php</code>
+
# L'exécuter via URL : <code>https://<url_de_ton_asso>/script.php</code>
  
 
⚠️ '''Sécurité''' : Supprimer ces scripts directement après utilisation !
 
⚠️ '''Sécurité''' : Supprimer ces scripts directement après utilisation !
  
== Configuration serveur et support ==
+
=== Configuration serveur et support ===
 
 
=== Modifications de configuration ===
 
Pour des besoins spécifiques (modification du <code>php.ini</code>, mise à jour de PHP, etc.), [[Mailto:simde@assos.utc.fr|contactez le SIMDE]].
 
 
 
== Base de données ==
 
Le SIMDE fournit une base de données MySQL à chaque asso.
 
 
 
'''Accès phpMyAdmin :'''
 
 
 
* URL : [[/phpmyadmin.assos.utc.fr|ici]]
 
* Identifiants : Fournis par le SIMDE
 
 
 
== OAuth 2.0 ==
 
Le SIMDE propose un service d'authentification sur le modèle OAuth 2.0. Ce service permet la connexion des utilisateur.ice.s par CAS ou par la création d'un compte (par email). L'option de connexion par mail est désactivable si votre service est exclusif aux UTCéen.ne.s
 
  
=== Interface admin ===
+
==== Modifications de configuration ====
La première étape pour utiliser l'OAuth du SIMDE, est de déclarer votre application sur [[/auth.assos.utc.fr/admin|l'interface admin]]. Sur cette page, vous allez devoir
+
Pour des besoins spécifiques (modification du <code>php.ini</code>, mise à jour de PHP, etc.), [mailto:simde@assos.utc.fr contacter le SiMDE].
  
* Saisir l'URL (ou les URLs) de redirection autorisées par l'OAuth.
+
=== Site WordPress ===
* La liste des informations (scopes) que vous voulez récupérer sur l'utilisateur.ice
+
[https://fr.wordpress.org/ WordPress] est un système de gestion de contenu (CMS) gratuit, libre, souvent utilisé pour mettre en place un site web rapidement et simplement sans avoir à implémenter beaucoup de code (low-code/no-code). WP est ecrit en PHP, votre site utilisant ce CMS peut donc être hébergé sur notre infrastructure.  
** L'OAuth se chargera d'informer l'utilisateur.ice des données que vous souhaitez récupérer
 
** ⚠️ '''Attention''' : Les scopes déclarés côtés admin et serveur doivent être strictement les mêmes (sinon ça plante)
 
  
''De manière optionnelle, il est possible de configurer la couleur et l'image qui seront affichées lors de la demande d'autorisation d'accès aux informations.''
+
Il faudra simplement faire attention à quelques petits points :
  
=== Retours de l'OAuth ===
+
* en raison de la configuration réseau du serveur, il n'est pas possible de télécharger des thèmes et plugins depuis l'application déployée. Il faut donc les télécharger en local puis les déposer avec le site dans le dossier public_html de l'asso. Penser à bien vérifier les droits sur les dossiers du public_html en cas d'erreur.
Ci-dessous, voici la liste de ce que permet de récupérer chaque scope
+
* Ajouter le snippet suivant au début du fichier ''wp-config.php'' :
 +
<syntaxhighlight lang="php" line="1">
 +
define('FORCE_SSL_ADMIN', true);                                                                                                                                       
 +
define('FORCE_SSL_LOGIN', true);                                                                                                                                       
 +
// in some setups HTTP_X_FORWARDED_PROTO might contain                                                                                                                 
 +
// a comma-separated list e.g. http,https                                                                                                                               
 +
// so check for https existence                                                                                                                                         
 +
if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false)                                                                                                     
 +
        $_SERVER['HTTPS']='on';
 +
</syntaxhighlight>
  
==== Retour de users-infos ====
+
* Uploader les images dans la médiathèque via le lien https://[urldusite]/wp-admin/media-new.php (qui correspond au sous menu "ajouter un fichier média" dans l'onglet Médias), car il y a un autre espace de dépôt d'images dans wordpress qui fait une erreur quand on l'utilise
  
* uuid
+
=== Exemples et références ===
* email
 
* firstName
 
* lastName
 
* type
 
** Connexion CAS : "utc-etu"
 
** Connexion mail : "exte"
 
* status
 
** Connexion CAS : "students"/......
 
** Connexion mail : "exte"
 
* active
 
* created_at
 
* updated_at
 
* deleted_at
 
* picture
 
* provider
 
** Connexion CAS : "cas"
 
** Connexion mail : "email"
 
  
==== Retour de read-assos ====
+
==== Associations de référence ====
Ajoute un champ "read-assos", clé d'un array contenant toutes les associations auxquelles l'utilisateur.ice est accepté.e pour ce semestre.
+
'''SiMDE :'''
  
''Exemple :''
+
Plein de projets sont disponibles avec différentes technologies et différentes implémentations, directement disponibles sur [https://gitlab.utc.fr/simde notre Gitlab].
  
==== Retour de read-assos-history ====
+
Implémentation de l'OAuth dans app/Http/Controllers/AuthController.php pour du Laravel :
'''Ce scope ne fonctionne pas pour l'instant'''
 
  
==== Retour de read-memberships ====
+
* Pour du Laravel + Blade : [https://gitlab.utc.fr/simde/shwet Shwet]
Ajoute un champ "read-memberships", clé d'un booléen informant si l'utilisateur.ice est cotisant.e
+
* Pour du Laravel + React : [https://gitlab.utc.fr/simde/portail-des-assos Portail des assos]
  
''Exemple :''
+
'''Ski'UTC :'''
 
+
* [https://github.com/ski-utc Organisation]
=== Implémentation ===
+
* [https://github.com/ski-utc/server-SkiUt-P25 Serveur backend]
Pour l'implémentation, je vous renvoie vers la [[/auth.assos.utc.fr/admin/implement|superbe documentation en ligne]]. Vous y retrouvez :
 
 
 
* Flow des requêtes
 
* Endpoints
 
* Implémentation PHP - Laravel
 
 
 
⚠️ '''Attention''' : Encore une fois, les scopes déclarés côtés admin et serveur doivent être strictement les mêmes (sinon ça plante)
 
 
 
== Exemples et références ==
 
 
 
=== Associations de référence ===
 
'''Ski'ut :'''
 
 
 
* [[/github.com/ski-utc|Organisation]]
 
* [[/github.com/ski-utc/server-SkiUt-P25|Serveur backend]]
 
* Utilisé comme référence pour la configuration Laravel
 
** Documentation
 
** Implémentation de l'OAuth dans app/Http/Controllers/AuthController.php
 
  
 
'''Pic'Asso :'''
 
'''Pic'Asso :'''
  
* [[/github.com/picasso-utc|Organisation]]
+
* [https://github.com/picasso-utc Organisation]
* [[/github.com/picasso-utc/ocktopus|BackOffice Laravel]]
+
* [https://github.com/picasso-utc/ocktopus BackOffice Laravel]
 
* Exemple d'implémentation GitHub Actions
 
* Exemple d'implémentation GitHub Actions
  
== Bonnes pratiques ==
+
=== Bonnes pratiques ===
  
 
# '''Utiliser des .env''' pour la configuration
 
# '''Utiliser des .env''' pour la configuration
Ligne 248 : Ligne 226 :
 
# '''Documenter les spécificités''' de votre déploiement
 
# '''Documenter les spécificités''' de votre déploiement
 
# '''Pensez à la passation'''
 
# '''Pensez à la passation'''
 
== Contact SIMDE ==
 
Pour toute demande de modification de configuration : [[Mailto:simde@assos.utc.fr|contacter le SIMDE]]
 
----''Documentation mise à jour le : 24/05/2025''
 
 
''Rédigé avec le <3 par Mathis Delmaere pour le SIMDE''
 

Dernière version du 2 juin 2025 à 19:36


Mail asso en @assos.utc.fr

Une adresses mail en [login_asso]@assos.utc.fr est attribué à chaque association de la fédération lors de la création de l'espace numérique.

Accès à la webmail des assos juste ici.

Portail des assos

Le portail des assos est le point d'accueil pour la vie associative. Il permet de consulter l'ensemble des associations présentes au sein de la fédération et de les rejoindre.

A la création de votre espace numérique, le SiMDE ajoute votre association au catalogue avec les informations fournies. Si celles-ci viennent à évoluer au fil du temps, alors l'association peut contacter le SiMDE pour mettre à jour ces infos.

Accès au portail des assos juste ici.

Cloud des assos

Chaque association dispose d'un espace de 20Go pour stocker des fichiers sur le serveur Nextcloud du SiMDE.

L'accès se fait avec le login/mdp principal juste ici.

Serveur web

Vue d'ensemble de l'architecture

L'infrastructure proposée par le SiMDE est composée de plusieurs machines interconnectées qui permettent à chaque asso de profiter d'un espace informatique, notamment utilisé pour héberger des sites web, web app, serveurs (containerisés ou non).

Cette ressource a pris pour parti de se concentrer essentiellement sur les serveurs Laravel. Loin de supposer que Laravel est mieux que Rust, Node, Symfony... Mais c'est avant toute chose car

  • Laravel est un serveur PHP et convient donc parfaitement pour être servi par le serveur Apache du SiMDE
  • Laravel c'est facile à comprendre, ça permet une formation rapide pour reprendre en main les services proposés
  • Laravel est utilisé dans la majorité des web app / serveurs des assos utcéennes (Intégration, Pic'Asso, SiMDE, Ski'UTC...), une personne qui se forme sur Laravel à l'UTC pourra donc s'y retrouver sur à peu près tous les projets informatiques.

Ce qu'il faut savoir sur l'architecture

Le SiMDE propose à chaque association un espace informatique sur la machine files.mde.etc. Pour modifier les fichiers sur son espace, chaque association possède un accès SFTP et SSH à la machine (accès bien évidemment restreint aux dossiers de l'association). Les fichiers sont ensuite récupérés par un Apache qui sert les fichiers statiques et les applications web.

⚠️ Attention : Apache est très adapté pour servir du HTML/CSS/JS/PHP mais n'est pas adapté au Node.js et Python. Si vous prévoyez d'utiliser un de ces deux langages, nous vous conseillons vivement de conteneuriser votre projet (cas particulier pour le node statique qui peut être exporté).

⚠️ Attention : Au cas par cas, le SiMDE peut également héberger des applications conteneurisées via Docker, mais cela nécessite une demande spécifique et la configuration du container ne revient pas au SIMDE, mais bien à l'association qui en fait la demande.

Accès à l'infrastructure

⚠️ Attention : Pour se connecter en SFTP, SSH ou même à la base de données fournie à l'association, il faut utiliser le VPN fourni par l'UTC (ou directement être connecté à utcetu).

Machine accessible aux associations

Seule la machine files.mde.etc est accessible aux associations pour déposer leurs fichiers et applications.

Accès SFTP avec Filezilla

Les associations peuvent accéder à leurs fichiers via SFTP (en utilisant Filezilla par exemple).

Configuration Filezilla :

  • Protocole : SFTP
  • Hôte : files.mde.etc
  • Type d'authentification : Normale
  • Identifiants : Fournis par le SiMDE
Bouton nouvelle connexion
Champs à configurer

Procédure de connexion SFTP

  1. Ouvrir Filezilla
  2. Saisir les identifiants fournis par le SiMDE
  3. Se connecter au serveur files.mde.etc
  4. Naviguer vers le dossier de votre association
  5. Téléverser vos fichiers dans le dossier public_html

Accès SSH

L'accès SSH à la machine files.mde.utc est disponible mais avec des limitations importantes garantissant la sécurité et la confidentialité des assos malgré un hébergement mutualisé sur la même VM

Connexion SSH : ssh [votre-asso]@files.mde.etc

Limitations SSH

⚠️ Attention : Certaines commandes ne sont pas disponibles via SSH, notamment pour Laravel :

  • composer install et autres commandes composer
  • php artisan migrate et autres commandes php

Conséquences pour Laravel :

  • Le dossier /vendor doit être téléversé via SFTP
    • Les dépendances doivent être installées localement avant le déploiement ou via d'autres méthodes
  • La base de données doit être migrée à la main, ou alors avec des méthodes un peu moins conventionnelles...

Structure des URLs et déploiement

Format des URLs

Les applications sont servies selon un des deux formats suivants :

  • https://assos.utc.fr/<loginasso>
  • https://<loginasso>.assos.utc.fr

Si vous souhaitez posséder l'une des deux en particulier, n'hésitez pas à contacter le SiMDE.

Si vous développez un serveur, pensez donc bien à configurer son .env pour servir la bonne URL. Dans le cas contraire, vous risquez d'avoir quelques soucis de redirection...

Stratégies de déploiement

Sites web

Pour les sites web, c'est assez facile

  1. Connectez-vous en SFTP
  2. Envoyez tout le dossier dans public_html (en faisant en sorte que le fichier index soit accessible)

Pour aller plus loin (CI/CD)

Si vous êtes motivé.e.s, vous pouvez mettre votre repo Git en public et créer un petit script shell pour cloner le repo et le déployer automatiquement (ça évite de se reconnecter en SFTP à chaque fois). Pour cela il suffit de

  1. Créer un script en SSH ou en local et l'envoyer en SFTP
  2. Lui donner les droits d'exécution : chmod 755 ./monScript.sh

Serveurs

Pour les serveurs, c'est un peu plus compliqué

  1. Connectez-vous en SFTP
  2. Envoyez tout votre serveur dans le dossier public_html
    • Cette étape peut être longue à cause du dossier de dépendances vendor/, on en reparle juste après
    • Pensez à bien modifier votre .env pour passer en mode APP_ENV=prod, APP_DEBUG=false et surtout APP_URL=<url_de_ton_asso>
  3. En théorie, ça devrait déjà tourner (pas besoin de faire php artisan serve, Apache tourne déjà pleine balle)

Si vous êtes sur Laravel, pas besoin d'avoir index.php à la racine : il est dans le dossier public/ qui est accessible

Il peut arriver que certains problèmes surviennent lors du déploiement de votre serveur

  • Votre URL théorique ne trouve pas le fichier index
  • Le index est trouvé mais n'est pas servi. Cela peut être dû à de mauvaises config de .htaccess ou de mauvaise version d'interpréteur sur les machines. Dans ces deux cas (et probablement dans d'autres), vous ne pourrez pas faire grand-chose et vous allez devoir contacter le SiMDE.

Problématique des dépendances

Étant donné l'impossibilité d'utiliser composer directement sur le serveur, plusieurs stratégies sont recommandées :

Solution recommandée : GitHub Actions

La meilleure pratique consiste à automatiser le build et le déploiement via des Actions Git. Nous allons prendre ici GitHub comme exemple, mais le GitLab de l'UTC fait également une très bonne alternative.

Avantages :

  • Installation automatique des dépendances
  • Build de l'application
  • Les PR sont refusées en cas d'erreur
  • Création d'un artifact (zip du projet) prêt au déploiement
  • Déploiement automatisé

Exemple d'implémentation : Consultez le repo Ocktopus de Pic'Asso

Cette implémentation se base sur 2 composantes :

  • Une GitHub Action définie dans .github/actions/deploy.yml
    • Cette action observe chaque push ou merge sur une branche, récupérer le code, installer les deps, (build l'app) puis créer un artifact zip/tar.gz du projet.
  • Une structure particulière dans /storage/app/deploy
    • Un fichier deploy.sh qui gère le déploiement (nécessite la création d'un PAT Github)
    • Un dossier tmp pour extraire l'artifact avant de synchroniser les changements avec la prod

Déploiement manuel

Si vous ne pouvez pas utiliser GitHub Actions :

  1. Localement : composer install --no-dev --optimize-autoloader
  2. Téléversement SFTP :
    • Téléverser tous les fichiers incluant le dossier /vendor

Exécution de code PHP sur le serveur

Méthode 1 : Routes d'administration

Créer des routes spécifiques dans votre application pour exécuter du code :

Exemple Laravel :

Commande par URL.png



Méthode 2 : Scripts à la racine

  1. Placer un fichier .php ou .sh à la racine de votre application
  2. L'exécuter via URL : https://<url_de_ton_asso>/script.php

⚠️ Sécurité : Supprimer ces scripts directement après utilisation !

Configuration serveur et support

Modifications de configuration

Pour des besoins spécifiques (modification du php.ini, mise à jour de PHP, etc.), contacter le SiMDE.

Site WordPress

WordPress est un système de gestion de contenu (CMS) gratuit, libre, souvent utilisé pour mettre en place un site web rapidement et simplement sans avoir à implémenter beaucoup de code (low-code/no-code). WP est ecrit en PHP, votre site utilisant ce CMS peut donc être hébergé sur notre infrastructure.

Il faudra simplement faire attention à quelques petits points :

  • en raison de la configuration réseau du serveur, il n'est pas possible de télécharger des thèmes et plugins depuis l'application déployée. Il faut donc les télécharger en local puis les déposer avec le site dans le dossier public_html de l'asso. Penser à bien vérifier les droits sur les dossiers du public_html en cas d'erreur.
  • Ajouter le snippet suivant au début du fichier wp-config.php :
1define('FORCE_SSL_ADMIN', true);                                                                                                                                         
2define('FORCE_SSL_LOGIN', true);                                                                                                                                         
3// in some setups HTTP_X_FORWARDED_PROTO might contain                                                                                                                   
4// a comma-separated list e.g. http,https                                                                                                                                
5// so check for https existence                                                                                                                                          
6if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false)                                                                                                       
7        $_SERVER['HTTPS']='on';
  • Uploader les images dans la médiathèque via le lien https://[urldusite]/wp-admin/media-new.php (qui correspond au sous menu "ajouter un fichier média" dans l'onglet Médias), car il y a un autre espace de dépôt d'images dans wordpress qui fait une erreur quand on l'utilise

Exemples et références

Associations de référence

SiMDE :

Plein de projets sont disponibles avec différentes technologies et différentes implémentations, directement disponibles sur notre Gitlab.

Implémentation de l'OAuth dans app/Http/Controllers/AuthController.php pour du Laravel :

Ski'UTC :

Pic'Asso :

Bonnes pratiques

  1. Utiliser des .env pour la configuration
  2. Toujours tester localement avant le déploiement
  3. Versionner votre code avec Git
  4. Documenter les spécificités de votre déploiement
  5. Pensez à la passation