Skip to content

Le site du ResEl refait en 2016 accessible à https://resel.fr/

License

Notifications You must be signed in to change notification settings

ResEl-TB/myresel

Repository files navigation

Le site resel.fr

build status coverage report

Ceci est le code pour le site ResEl resel.fr il est développé en Python avec le framework Django. Ce document a pour objectif de vous présenter rapidement le projet et son fonctionnement. Il sert également de guide pour les nouveaux développeurs qui veulent contribuer au projet et de guide pour les administrateurs systèmes qui voudraient installer (ou réparer) le service.

Dans la suite du document nous supposons que le lecteur est famillier avec Python et avec le framework Django (et toutes les technologies associées HTTP, MYSQL, HTML, CSS, Javascript).

Démarrage en 2 minutes

Cette démarche vous permettra d'avoir un serveur de développement prêt à être utilisé en créant et en populant les bases de données (MYSQL, LDAP) automatiquement. Nous utilisons Vagrant qui permet de faire tout cela automagiquement.

Installer Vagrant

sudo apt install vagrant  # On a Debian-based distribution

Installer l'environement de développement :

git clone https://git.resel.fr/resel/myresel
cd myresel/
vagrant up  # It might take a while the first time

Démarrer le serveur :

vagrant ssh
cd /myresel
python3 manage.py rqworker default &
python3 manage.py rqscheduler default &
python3 manage.py runserver 0.0.0.0:8000

Sur votre navigateur web rendez-vous sur :

  • http://10.0.3.94:8000 Simule le VLAN 994 (extérieur)
  • http://10.0.3.95:8000 Simule le VLAN 995 (réseau d'inscription)
  • http://10.0.3.99:8000 Simule le VLAN 999 (machine inscrite)
  • http://10.0.3.199:8000 Simule le VLAN 999 (machine non inscrite)

Votre adresse MAC sera par défaut : "0a:00:27:00:00:10", Vous pouvez la changer dans le fichier myresel/settings_local.py.

Documentation

-> Voir /doc

j'ai mis en gros, c'est pas pour rien ;-).


Faire un hotfix/modification sur les serveurs de prod

⚠️ Contrairement à 99% des autres services ResEl vous ne devez quasiment en aucun cas toucher aux serveurs de production. Voici la procédure :

Clonez le repo sur votre ordinateur :

git clone https://git.resel.fr/resel/myresel

Faites les modifications nécessaires dans le repo. Si les modifications que vous souhaitez executer ne sont pas triviales je vous recommande de faire une branche :

git checkout -b branch_name

Vous pouvez ensuite effectuer vos modifications puis pusher la branche sur Gitlab

git push --set-upstream branch_name

Ou alors plus simplement si vous n'avez pas créé de branche : git push

Si vous avez créé une branche n'oubliez pas de créer une merge request depuis votre branche vers master. Et demandez à faire un code review ! Puis mergez la branche.

Il faut ensuite pusher le code en production, pour ceci il suffit de créer une merge request de master vers deploy à la suite de quoi, si les tests passent, le code sera automatiquement pushé sur les serveurs de production.

Zone d'inscription

Du fait de l'architecture très spécialisée du ResEl, toute les fonctionnalités touchants à l'inscription et la gestion des machines sont sensibles. En effet, pour détecter la bonne addresse MAC et pour proposer un site différent dépendant de l'origine de l'utilisateur, il est nécéssaire de mettre la machine sur plusieurs réseaux.

Dépendant du VLAN d'origine, le serveur NGINX taggera les requêtes HTTP différement. Puis, en fonction du tag les middlewares NetworkConfiguration et InscriptionNetworkHandler ajouterons des métadonnées aux requetes (comme par exemple l'adresse mac de l'utilisateur) puis vont rerouter les requêtes vers les bonnes vues.

Dans l'environnement de développement, comme il est extrêmement compliqué de totalement simuler l'architecture du ResEl, le choix a été fait de créer un nouveau middleware SimulateProductionNetwork qui empoisonera les requetes avec de fausses ip.

Astuces

Mettre le site en mode maintenance

Lorsque vous avez de grosses migrations à faire, il est parfois nécéssaire de mettre le site en mode maintenance pour éviter que les utilisateurs écrivent dans la base de données en même temps que vos migrations. Pour cela il suffit de renommer le fichier maintenance_off.html en maintenance_on.html. Si la configuration de nginx est correcte, le site devrait retourner une erreur 503 le temps de faire la migration.

# Activer la maintenance
mv maintenance_off.html maintenance_on.html

# Désactiver la maintenance
mv mv maintenance_on.html maintenance_off.html

Passer superutilisateur sur l'environement de dev

Pour pouvoir administrer le site il faut avoir un compte avec les droits admins. Malheureusement en local (comme la population de la base de données n'est pas encore terminée) il n'est pas facile de se créer un compte admin. Voici un petit hack que je vous propose :

  1. Modifier le ficher myresel/middleware.py, à la ligne 30 remplacer :

    if res:
        user = User.objects.get(username=request.user.username)

    par :

    if True:
        user = User.objects.get(username=request.user.username)
  2. Démarrer le serveur

    python3 manage.py runserver 0.0.0.0:8000
  3. Créer un compte avec le site en se rendant sur l'adresse suivante : http://10.0.3.99:8000/personnes/inscription

Vous pouvez vous connecter à l'administration en cliquant sur les engrenages dans la barre de navigation.

Notes

Deux modules : la génération automatique de facture et l'affichage des documents de l'association, reposent sur un service LaPuTeX. Pour mettre le mettre en place, suivez les détails du README puis configurer le settings_local.py ou bien utilisez l'installateur automatique :

LAPUTEX_HOST = "http://10.0.3.253:8000/"
LAPUTEX_DOC_URL = LAPUTEX_HOST+"beta/documents/"
LAPUTEX_TOKEN = "test"

Ceci peut être fait automatiquement en lancant la deuxième VM :

vagrant up laputex
vagrant ssh laputex

celery worker -A laputex.celery --loglevel=debug &
python3 -m laputex

Bugs connu :

  • La facture générée automatiquement ne peut pas gérer des prix supérieurs à 1 million 70 mille €.

Crédits

Pour ce magnifique site, on peut remercier :

Code sous license GPL

Allez lire la documentation !