Featured image of post Installation phpIPAM avec Ansible

Installation phpIPAM avec Ansible

Installation du gestionnaire d'adresse IP phpIPAM dans un containeur LXD avec Ansible

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 :

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 :

L’architecture des fichiers ansible

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’.
Remarque : Je suis partie sur une installation avec une base de donnés **MariaDB** distantes.

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).


Remarque : Il faudra rajouter l'installation 'mysql-server' dans la premiere tache du fichier pour ceux qui souhaitent utiliser uen base de données locales.

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"

Remarque : J'utilise le fichier de configuration 'hosts' qui se trouve à la racine du répertoire '.ansible'. Pour la syntaxe de ce fichier, je vous renvoi à la [documentation de Ansible](https://docs.ansible.com/ansible/latest/inventory_guide/intro_inventory.html).

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 :

ansible-playbook --ask-become-pass -i hosts repertoire_playbook/deploy_phpipam.yml

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’.

Remarque : J'utilise le fichier de configuration 'hosts' qui se trouve à la racine du répertoire '.ansible'. L'option '--ask-become-pass' indique qu'il faut demander le mot de passe 'sudo' nécessaire à l'éxecution des tâches sur le serveur.

Si tout se passe bien, vous devriez avoir comme résultat :

Résultat de l’installation des sources

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 :

mysqladmin -u root password 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 :

phpipam installation wizard

Cliquez sur ‘New phpipam installation’. Vous devriez arriver sur un second écran :

phpipam installation wizard

Cliquez sur ‘Automatic database installation’. Vous devriez arriver sur un troisième écran :

Automatic database installation

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 :

Postinstall installation

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 :

Tableau de bord

La 1ère étape est de créer votre premier ‘subnet’ :

création 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 :

Mon tableau de bord

Puis le sous réseau du LAN :

Subnet du LAN

Généré avec Hugo
Thème Stack conçu par Jimmy