med/README.md

4.6 KiB

Portail captif

Gnu public license v2.0

Avant propos

Ce projet est forké à partir de re2o (https://gitlab.rezometz.org/rezo/re2o). Ce portail minimaliste permet aux utilisateurs de s'identifier. Leurs mac sont capturées, et injectée dans une ipset qui leur donne accès à internet.

#Installation

Installation des dépendances

L'installation comporte 2 parties : le serveur web où se trouve le depot portail_captif ainsi que toutes ses dépendances, et le serveur bdd (mysql ou pgsql). Ces 2 serveurs peuvent en réalité être la même machine, ou séparés (recommandé en production). Le serveur web sera nommé serveur A, le serveur bdd serveur B .

Prérequis sur le serveur A

Voici la liste des dépendances à installer sur le serveur principal (A).

Avec apt :

Sous debian 8

Paquets obligatoires:

  • python3-django (1.8, jessie-backports)
  • python3-dateutil (jessie-backports)
  • python3-django-reversion (stretch)
  • python3-pip (jessie)

Avec pip3 :

  • django-bootstrap3
  • django-macaddress

Paquet recommandés:

  • python3-django-extensions (jessie)

Moteur de db conseillé (mysql), postgresql fonctionne également. Pour mysql, il faut installer :

  • python3-mysqldb (jessie-backports)
  • mysql-client

Postgresql :

  • psycopg2

Prérequis sur le serveur B

Sur le serveur B, installer mysql ou postgresql, dans la version jessie ou stretch.

  • mysql-server (jessie/stretch) ou postgresql (jessie-stretch)

Installation sur le serveur principal A

Cloner le dépot portail_captif à partir du gitlab, par exemple dans /var/www/portail_captif. Ensuite, il faut créer le fichier settings_local.py dans le sous dossier portail_captif, un settings_local.example.py est présent. Les options sont commentées, et des options par défaut existent.

En particulier, il est nécessaire de générer un login/mdp admin pour le ldap et un login/mdp pour l'utilisateur sql (cf ci-dessous), à mettre dans settings_local.py

Installation du serveur mysql/postgresql sur B

Sur le serveur mysql ou postgresl, il est nécessaire de créer une base de donnée portail_captif, ainsi qu'un user portail_captif et un mot de passe associé. Ne pas oublier de faire écouter le serveur mysql ou postgresql avec les acl nécessaire pour que A puisse l'utiliser.

Voici les étapes à éxecuter pour mysql :

  • CREATE DATABASE portail_captif;
  • CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
  • GRANT ALL PRIVILEGES ON portail_captif.* TO 'newuser'@'localhost';
  • FLUSH PRIVILEGES;

Si les serveurs A et B ne sont pas la même machine, il est nécessaire de remplacer localhost par l'ip avec laquelle A contacte B dans les commandes du dessus. Une fois ces commandes effectuées, ne pas oublier de vérifier que newuser et password sont présents dans settings_local.py

Configuration initiale

Normalement à cette étape, le ldap et la bdd sql sont configurées correctement.

Il faut alors lancer dans le dépot portail_captif '''python3 manage.py migrate''' qui va structurer initialement la base de données. Les migrations sont normalement comitées au fur et à mesure, néanmoins cette étape peut crasher, merci de reporter les bugs.

Démarer le site web

Il faut utiliser un moteur pour servir le site web. Nginx ou apache2 sont recommandés. Pour apache2 :

  • apt install apache2
  • apt install libapache2-mod-wsgi-py3 (pour le module wsgi)

portail_captif/wsgi.py permet de fonctionner avec apache2 en production

Pour nginx :

  • apt install nginx
  • apt install gunicorn3

Utilisez alors un site nginx qui proxifie vers une socket gunicorn. Ensuite, utilisez les fichier portail_captif.service et portail_captif.socket avec systemd pour lancer le sous process gunicorn, présents dans portail_captif/ .

Configuration avancée

Une fois démaré, le site web devrait être accessible. Pour créer un premier user, faire '''python3 manage.py createsuperuser''' qui va alors créer un user admin. Il est conseillé de créer alors les droits cableur, bureau, trésorier et infra, qui n'existent pas par défaut dans le menu adhérents. Il est également conseillé de créer un user portant le nom de l'association/organisation, qui possedera l'ensemble des machines.

Requète en base de donnée

Pour avoir un shell, il suffit de lancer '''python3 manage.py shell''' Pour charger des objets, example avec User, faire : ''' from users.models import User''' Pour charger les objets django, il suffit de faire User.objects.all() pour tous les users par exemple. Il est ensuite aisé de faire des requètes, par exemple User.objects.filter(pseudo='test') Des exemples et la documentation complète sur les requètes django sont disponible sur le site officiel.