8
0
Fork 0
mirror of https://gitlab2.federez.net/re2o/re2o synced 2024-12-27 17:33:45 +00:00
re2o/README.md

223 lines
8.1 KiB
Markdown
Raw Normal View History

2016-07-07 10:32:16 +00:00
# Re2o
2016-07-07 10:28:20 +00:00
2016-07-31 10:20:28 +00:00
Gnu public license v2.0
2016-07-07 10:32:16 +00:00
## Avant propos
2016-07-07 10:28:20 +00:00
2017-10-02 22:47:56 +00:00
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en
quelques clics.
Il utilise le framework django avec python3. Il permet de gérer les adhérents,
les machines, les factures, les droits d'accès, les switchs et la topologie du
réseau.
De cette manière, il est possible de pluguer très facilement des services
dessus, qui accèdent à la base de donnée en passant par django (ex : dhcp), en
chargeant la liste de toutes les mac-ip, ou la liste des mac-ip autorisées sur
le réseau (adhérent à jour de cotisation).
2016-07-07 10:28:20 +00:00
# Installation
2016-12-27 22:51:30 +00:00
2016-12-27 18:47:42 +00:00
## Installation des dépendances
2016-07-07 10:28:20 +00:00
2017-10-02 22:47:56 +00:00
L'installation comporte 3 partie : le serveur web où se trouve le depot re2o
ainsi que toutes ses dépendances, le serveur bdd (mysql ou pgsql) et le
serveur ldap. Ces 3 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 et le serveur ldap
serveur C.
2016-10-13 00:42:23 +00:00
2016-12-27 18:47:42 +00:00
### Prérequis sur le serveur A
2016-07-07 10:28:20 +00:00
2016-12-27 18:47:42 +00:00
Voici la liste des dépendances à installer sur le serveur principal (A).
### Avec apt :
#### Sous debian 9
Paquets obligatoires:
* python3-django (1.10, stretch)
* python3-dateutil (stretch)
* texlive-latex-base (stretch)
* texlive-fonts-recommended (strech)
* python3-djangorestframework (stretch)
* python3-django-reversion (stretch)
* python3-pip (stretch)
Paquet recommandés:
* python3-django-extensions (stretch)
2016-07-31 02:09:14 +00:00
2016-12-27 18:47:42 +00:00
### Autres dépendances :
2017-01-15 16:38:37 +00:00
Paquets préalables à installer avec apt :
* libsasl2-dev (stable)
* libldap2-dev (stable)
* libssl-dev (stable)
2016-12-27 18:47:42 +00:00
Avec pip3 (pip3 install):
* django-bootstrap3
2016-07-31 02:09:14 +00:00
* django-ldapdb
2017-06-19 01:39:20 +00:00
* django-macaddress
2016-07-07 10:28:20 +00:00
Moteur de db conseillé (mysql), postgresql fonctionne également.
2016-12-27 18:47:42 +00:00
Pour mysql, il faut installer :
2017-06-19 01:39:20 +00:00
* python3-mysqldb
2016-12-27 18:47:42 +00:00
* mysql-client
### Prérequis sur le serveur B
2017-06-19 01:39:20 +00:00
Sur le serveur B, installer mysql ou postgresql, dans la version stretch.
* mysql-server (stretch) ou postgresql (stretch)
2016-12-27 18:47:42 +00:00
### Prérequis sur le serveur C
Sur le serveur C (ldap), avec apt :
2017-06-19 01:39:20 +00:00
* slapd (stretch)
2016-12-27 18:47:42 +00:00
2016-12-27 22:51:30 +00:00
### Installation sur le serveur principal A
2016-12-27 18:47:42 +00:00
Cloner le dépot re2o à partir du gitlab, par exemple dans /var/www/re2o.
2017-10-02 22:47:56 +00:00
Ensuite, il faut créer le fichier settings_local.py dans le sous dossier re2o,
un settings_local.example.py est présent. Les options sont commentées, et des
options par défaut existent.
2016-12-27 18:47:42 +00:00
2017-10-02 22:47:56 +00:00
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
2016-12-27 18:47:42 +00:00
2016-12-27 22:51:30 +00:00
### Installation du serveur mysql/postgresql sur B
2016-12-27 18:47:42 +00:00
2017-10-02 22:47:56 +00:00
Sur le serveur mysql ou postgresl, il est nécessaire de créer une base de
donnée re2o, ainsi qu'un user re2o 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.
2016-12-27 18:47:42 +00:00
2017-10-02 22:51:26 +00:00
#### Mysql
2016-12-27 18:47:42 +00:00
Voici les étapes à éxecuter pour mysql :
2017-08-30 13:28:04 +00:00
* CREATE DATABASE re2o collate='utf8_general_ci';
2016-12-27 18:47:42 +00:00
* CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
* GRANT ALL PRIVILEGES ON re2o.* TO 'newuser'@'localhost';
* FLUSH PRIVILEGES;
2016-07-07 10:32:16 +00:00
2017-10-02 22:51:26 +00:00
#### Postgresql
* CREATE DATABASE re2o ENCODING 'UTF8' LC_COLLATE='fr_FR.UTF-8'
LC_CTYPE='fr_FR.UTF-8';
* CREATE USER newuser with password 'password';
* ALTER DATABASE re2o owner to newuser;
2017-10-02 22:47:56 +00:00
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
2016-10-02 21:22:52 +00:00
2016-12-27 22:51:30 +00:00
### Installation du serveur ldap sur le serveur C
2016-10-13 00:42:23 +00:00
2016-12-27 18:47:42 +00:00
Ceci se fait en plusieurs étapes :
* générer un login/mdp administrateur (par example mkpasswd sous debian)
2017-10-02 22:47:56 +00:00
* Copier depuis re2o/install_utils (dans le dépot re2o) les fichiers db.ldiff
et schema.ldiff (normalement sur le serveur A) sur le serveur C
(par ex dans /tmp)
* Hasher le mot de passe généré en utilisant la commande slappasswd
(installée par slapd)
* Remplacer toutes les sections FILL_IN par le hash dans schema.ldiff et
db.ldiff
* Remplacer dans schema.ldiff et db.ldiff 'dc=example,dc=org' par le
suffixe de l'organisation
2016-12-27 22:51:30 +00:00
* Arréter slapd
2017-10-02 22:47:56 +00:00
* Supprimer les données existantes : '''rm -rf /etc/ldap/slapd.d/*''' et
'''rm -rf /var/lib/ldap/*'''
* Injecter le nouveau schéma :
'''slapadd -n 0 -l schema.ldiff -F /etc/ldap/slapd.d/''' et
'''slapadd -n 1 -l db.ldiff'''
* Réparer les permissions (chown -R openldap:openldap /etc/ldap/slapd.d et
chown -R openldap:openldap /var/lib/ldap) puis relancer slapd
Pour visualiser et éditer le ldap, l'utilisation de shelldap est fortement
2017-10-03 00:04:44 +00:00
recommandée, en utilisant en binddn et basedn tous deux égaux à 'cn=config' et
2017-10-02 22:47:56 +00:00
binddpw le mot de passe admin.
2016-10-13 00:42:23 +00:00
2017-10-03 00:04:44 +00:00
Rajouter (exemple de chemin de fichier avec un certif LE):
`olcTLSCertificateKeyFile: /etc/letsencrypt/live/HOSTNAME/privkey.pem
olcTLSCACertificateFile: /etc/letsencrypt/live/HOSTNAME/chain.pem
olcTLSCertificateFile: /etc/letsencrypt/live/HOSTNAME/cert.pem `
Mettre à jour la partie ldap du `settings_local.py` (mettre 'TLS' à True
si besoin, user cn=config,dc=example,dc=org et mot de passe
ldap choisi précédemment).
2016-12-27 22:51:30 +00:00
## Configuration initiale
2016-10-13 00:42:23 +00:00
2016-12-27 22:51:30 +00:00
Normalement à cette étape, le ldap et la bdd sql sont configurées correctement.
2016-10-13 00:42:23 +00:00
2017-10-02 22:47:56 +00:00
Il faut alors lancer dans le dépot re2o '''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.
2016-10-13 00:42:23 +00:00
2016-12-27 22:51:30 +00:00
## Démarer le site web
2016-10-13 00:42:23 +00:00
2017-10-02 22:47:56 +00:00
Il faut utiliser un moteur pour servir le site web. Nginx ou apache2 sont
recommandés.
2016-12-27 22:51:30 +00:00
Pour apache2 :
* apt install apache2
* apt install libapache2-mod-wsgi-py3 (pour le module wsgi)
2016-10-13 00:42:23 +00:00
2016-12-27 22:51:30 +00:00
Un example de site apache2 se trouve dans install_utils ( re2o.conf)
re2o/wsgi.py permet de fonctionner avec apache2 en production
2016-07-07 10:28:20 +00:00
2016-12-27 22:51:30 +00:00
## Configuration avancée
2016-07-07 10:28:20 +00:00
2016-12-27 22:51:30 +00:00
Une fois démaré, le site web devrait être accessible.
2017-10-02 22:47:56 +00:00
Pour créer un premier user, faire '''python3 manage.py createsuperuser'''
qui va alors créer un user admin.
2018-01-21 17:17:41 +00:00
Il est conseillé de créer un user portant le nom de
l'association/organisation, qui possedera l'ensemble des machines, à indiquer
dans le menu reglages sur l'interface.
2016-07-07 10:28:20 +00:00
2016-12-27 23:43:30 +00:00
## Installations Optionnelles
### Générer le schéma des dépendances
Pour cela :
* apt install python3-django-extensions
* python3 manage.py graph_models -a -g -o re2o.png
2016-12-27 22:51:30 +00:00
# Fonctionnement interne
2016-07-07 11:19:03 +00:00
2016-12-27 23:43:30 +00:00
## Fonctionnement général
2017-10-02 22:47:56 +00:00
Re2o est séparé entre les models, qui sont visible sur le schéma des
dépendances. Il s'agit en réalité des tables sql, et les fields etant les
colonnes.
Ceci dit il n'est jamais nécessaire de toucher directement au sql, django
procédant automatiquement à tout cela.
On crée donc différents models (user, right pour les droits des users,
interfaces, IpList pour l'ensemble des adresses ip, etc)
2016-12-27 23:43:30 +00:00
2017-10-02 22:47:56 +00:00
Du coté des forms, il s'agit des formulaire d'édition des models. Il
s'agit de ModelForms django, qui héritent des models très simplement, voir la
documentation django models forms.
2016-12-27 23:43:30 +00:00
Enfin les views, générent les pages web à partir des forms et des templates.
2016-07-07 11:19:03 +00:00
## Fonctionnement avec les services
2016-12-27 23:43:30 +00:00
Les services dhcp.py, dns.py etc accèdent aux données via des vues rest.
2017-10-02 22:47:56 +00:00
Celles-ci se trouvent dans machines/views.py. Elles sont générées via
machines/serializers.py qui génère les vues. IL s'agit de vues en json utilisées
par re2o-tools pour récupérer les données.
Il est nécessaire de créer un user dans re2o avec le droit serveur qui permet
d'accéder à ces vues, utilisé par re2o-tools.
2016-12-27 23:43:30 +00:00
# Requète en base de donnée
Pour avoir un shell, il suffit de lancer '''python3 manage.py shell'''
2017-10-02 22:47:56 +00:00
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.