Introduction
phpIPAM est un gestionnaire d’adresse IP (IPAM) libre. Il est assez complet et permet de gérer et de surveiller votre réseau local et ses sous-réseaux.
Il y a 2 types d’installations possibles :
-
Docker : L’utilisation d’un container docker : voir Installation avec Docker,
-
Pas à pas : L’installation sur diverses distributions linux : voir Installation pas à pas,
Je vais effectuer l’installation ‘pas à pas’ dans un container Incus.
Hypothèse de travail
J’ai créé au préalable un container Incus (LXD) basé sur une distribution Debian 12.
Je pars du principe que le serveur SSH est configuré coté serveur pour pouvoir exécuter les scripts ‘ansible’ et que python est installé.
Ansible est installé sur votre poste client qui effectuera le déploiement du service ‘phpIPAM’. Mon répertoire de travail ‘.ansible’ se trouve à la racine du répertoire utilisateur.
Mes fichiers de déploiements ansible seront dans le répertoire : /home/user/.ansible/roles
L’architecture de mes fichiers de configuration ‘ansible’
J’utilise les ‘roles’ pour une structure modulaire et une simplication d’écriture de mes ‘Playbooks’.
Voici un aperçu des fichiers et répertoires nécessaires :
La configuration des sources
Configuration des variables globales
Nous allons utilisez un fichier de configuration contenant des variables globales qui seront utilisées dans nos tâches.
Ce fichier est situé dans : config/commun/defaults/main.yml
---
phpipam_bd_host: "192.168.x.x"
phpipam_bd_user: "phpipam"
phpipam_bd_password: "passwd"
phpipam_bd_name: "phpipam"
phpipam_bd_port: 3306
phpipam_base: "/"
phpipam_www: "/var/www"
phpipam_src: "https://github.com/phpipam/phpipam/releases/download/v1.6.0/phpipam-v1.6.0.tgz"
phpipam_file: "phpipam-v1.6.0.tgz"
phpipam_dst: "{{ phpipam_www }}/{{ phpipam_file }}"
phpipam_local_apache_config: "/home/user/.ansible/roles/config/phpipam/phpipam_apache.conf"
phpipam_server_apache_config: "/etc/apache2/sites-available/phpipam.conf"
La dernière version en cours, est la ‘1.6.0’ du 13/12/2023.
Il faudra remplacer dans ce fichier :
- l’adresse IP de la base de données ; elle peut être locale ou alors distante,
- le mot de passe de la base de données,
- user l’utilisateur locale contenant le répertoire ‘.ansible’.
Configuration de la tache
Nous allons utilisés un seul fichier de type ‘tasks’ pour décrire les installations à effectuer. Ce fichier est situé dans config/phpipam/tasks/main.yml
Voici son contenu :
---
- name: "Installation des pre-requis : curl apache2 mysql-server php php-gmp php-pear php-mysql php-ldap php-curl php-gd php-mbstring"
apt:
name: "curl,apache2,php,php-gmp,php-pear,php-mysql,php-ldap,php-curl,php-gd,php-mbstring"
state: "present"
- name: "Verifie si la source a deja ete recuperee"
stat:
path: "{{ phpipam_dst }}"
register: source
- name: "Recuperation des sources"
command:
curl -L "{{ phpipam_src }}" -o "{{ phpipam_dst }}"
when: not source.stat.exists
- name: "Verifie si le repertoire phpipam existe deja"
stat:
path: "{{ phpipam_www }}/phpipam"
register: rep_dst
- name: Decompression des sources
shell: |
cd {{ phpipam_www }}
tar -zxvf {{ phpipam_file }}
when: not rep_dst.stat.exists
- name: Verifie si le fichier de config de phpipam existe
stat:
path: "{{ phpipam_www }}/phpipam/config.php"
register: config_phpipam_created
- name: Copie le fichier de configuration de phpipam
command:
cp "{{ phpipam_www }}/phpipam/config.dist.php" "{{ phpipam_www }}/phpipam/config.php"
when: not config_phpipam_created.stat.exists
- name: Change proprietaire repertoire
command:
sudo chown -R www-data:www-data "{{ phpipam_www }}/phpipam"
- name: Modifie la configuration de PHPIpam
shell: |
sed -ri "s/(\s*.*'host'\] =* *').*('.*)/\1{{ phpipam_bd_host }}\2/" "{{ phpipam_www }}/phpipam/config.php"
sed -ri "s/(\s*.*'user'\] =* *').*('.*)/\1{{ phpipam_bd_user }}\2/" "{{ phpipam_www }}/phpipam/config.php"
sed -ri "s/(\s*.*'pass'\] =* *').*('.*)/\1{{ phpipam_bd_password }}\2/" "{{ phpipam_www }}/phpipam/config.php"
sed -ri "s/(\s*.*'name'\] =* *').*('.*)/\1{{ phpipam_bd_name }}\2/" "{{ phpipam_www }}/phpipam/config.php"
sed -ri "s/(\s*.*'port'\] =* *').*('.*)/\1{{ phpipam_bd_port }}\2/" "{{ phpipam_www }}/phpipam/config.php"
- name: Verifie si le fichier de config apache existe
stat:
path: "{{ phpipam_server_apache_config }}"
register: config_apache_created
- name: Copie le fichier de configuration apache
ansible.builtin.copy:
src: "{{ phpipam_local_apache_config }}"
dest: "{{ phpipam_server_apache_config }}"
owner: root
group: root
mode: '0644'
when: not config_apache_created.stat.exists
- name: Activation et lancement apache
shell: |
sudo systemctl start apache2
sudo a2ensite phpipam.conf
sudo systemctl enable apache2
sudo systemctl restart apache2
Le fichier est assez volumineux ; il aurait pu être découpé en plusieurs tâches. Le fonctionnement du fichier est tout le temps le même : On vérifie l’existence d’un fichier ou répertoire et on exécute une commande si celui-ci n’existe pas. Cela permet de relancer plusieurs fois le ‘Playbook’ et de continuer à l’endroit où il s’était arrêté (suite à une erreur ou à un abandon).
Configuration du Playbook
L’utilisation des rôles simplifie grandement les fichiers ‘Playbooks’. Je ne fais qu’ici, indiqué le nom du rôle répertoire contenant la tâche à lancer. J’utilise ici ‘become’ et ‘become_method’ pour exécuter mes tâches avec les privilèges ‘sudo’. Ce fichier peut-être situer où vous voulez.
---
- name: Install phpIPAM
hosts: phpipam
become: yes
become_method: sudo
roles:
- role: "config/phpipam"
Configuration des métadonnées pour le role ‘phpipam’
Le fichier de configuration des ‘meta’ permet de faire le lien avec le fichier contenant les variables globales. Il se trouve dans : config/phpipam/meta/main.yml
Voici son contenu :
dependencies:
- role: "config/commun"
Lancement des ‘playbooks’
La commande à exécuter pour lancer le ‘Playbook’ est celle ci :
Vous devez indiquez le chemin ou se trouve votre fichier ‘Playbook’en remplacant ‘repertoire_playbook’. Ce fichier peut-être n’importe ou, mais vous pouvez le mettre à la racine de votre dossier ‘.ansible’.
Si tout se passe bien, vous devriez avoir comme résultat :
Configuration MariaDB
Base de données locale
Il faudra définir le mot de passe root de votre bases de données en tapant la commande et en remplacant le champ NEWPASSWORD :
Base de données distante
Si votre utilisateur root n’a pas les droits sur tous les hotes (en géneral que sur ‘localhost’); il faudra créer la base de données et l’utilisateur localement sur le serveur.
Vous pouvez soit le faire en ligne de commande ; soit avec une interface web comme phpmyadmin ou adminer.
Premier lancement
Le serveur est consultable via l’adresse : ip_du_serveur:8000
Vous devriez avoir ce premier écran aprés le 1er lancement :
Cliquez sur ‘New phpipam installation’. Vous devriez arriver sur un second écran :
Cliquez sur ‘Automatic database installation’. Vous devriez arriver sur un troisième écran :
Les champs ‘database location’ et ‘database name’ devraient être pré-rempli. Le ‘username’et ‘password’ sont à remplir (normalament les memes que dans votre fichier config.php)
Remarque : Si la base est distante ; il faut cliquez sur show advanced options et décocher ‘create database’ et ‘set permissions to tables’.
Vous devriez arriver sur un dernier écran :
Vous devez entrer un mot de passe pour le compte admin et l’URL du serveur. Aprés ce dernier écran vous arriver à la page d’identification, puis au tableau de bord général :
La 1ère étape est de créer votre premier ‘subnet’ :
Le logiciel à beaucoup d’options et de fonctionnalitées ; je vous engage à lire un peu la documentation du site pour le maitriser.
Voici mon tableau de bord avec plusieurs sous réseaux :
Puis le sous réseau du LAN :