diff --git a/README.md b/README.md
index ceaf76f..e851191 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,102 @@
# role_hugo
-Rôle d'installation de gohugo.io
\ No newline at end of file
+Rôle de déploiement de gohugo.io
+
+## Fonctionnement
+
+Ce rôle prends en charge le serveur intégré ou l'utilisation de nginx pour servir le site.
+Afin de ne pas utiliser le serveur intégré, mettre la variable `hugo_nginx_enabled` à `true`.
+
+## Variables
+
+### hugo_os
+
+Nécessaire pour télécharger le bon paquet depuis github.com.
+
+Valeur par défaut: `linux`
+
+
+### hugo_architecture
+
+Nécessaire pour télécharger le bon paquet depuis github.com.
+Les architectures disponbiles sont *amd64* et *arm64*.
+
+Valeur par défaut: `arm64`
+
+### hugo_latest_url
+
+URL pointant vers l'API de github.com fournissant le lien de téléchargement du paquet.
+
+Valeur par défaut: `https://api.github.com/repos/gohugoio/hugo/releases/latest`
+
+### hugo_version
+
+Version qui sera installée.
+
+Valeur par défaut: `latest`
+
+### hugo_installation_type
+
+Type d'installation souhaitée (`deb` ou `archive`).
+
+Valeur par défaut: `archive`
+
+### hugo_binary_path
+
+Emplacement où sera déployer le binaire.
+
+Valeur par défaut: `/opt/hugo`
+
+### hugo_install_command
+
+Ajouter la commande `hugo` dans le PATH.
+
+Valeur par défaut: `false`
+
+### hugo_data_path
+
+Emplacement où seront stockées les données.
+
+Valeur par défaut: `/srv/hugo`
+
+### hugo_timer_enabled
+
+Activer la génération automatique régulière des fichiers statiques.
+
+Valeur par défaut: `true`
+
+### hugo_base_url
+
+URL utilisée dans la génération des fichiers statiques.
+
+Valeur par défaut: aucune
+
+### hugo_server_listen
+
+Adresse IP d'écoute du serveur intégré.
+
+Valeur par défaut: `0.0.0.0`
+
+### hugo_server_port
+
+Port d'écoute du serveur intégré.
+
+Valeur par défaut: `8080`
+
+### hugo_timer_enabled
+
+Activer la génération automatique tous les jours (`daily`).
+
+Valeur par défaut: `true`
+
+### hugo_nginx_enabled
+
+Ne pas utiliser le serveur intégré pour servir les fichiers statiques.
+
+Valeur par défaut: `false`
+
+### hugo_nginx_docroot
+
+Emplacement où les fichiers statiques seront générés pour nginx.
+
+Valeur par défaut: `/var/www/hugo`
diff --git a/defaults/main.yml b/defaults/main.yml
new file mode 100644
index 0000000..30101f4
--- /dev/null
+++ b/defaults/main.yml
@@ -0,0 +1,20 @@
+---
+# defaults file for hugo
+
+hugo_os: linux
+hugo_architecture: arm64
+hugo_latest_url: https://api.github.com/repos/gohugoio/hugo/releases/latest
+hugo_version: latest
+
+hugo_binary_path: /opt/hugo
+hugo_install_command: false
+
+hugo_data_path: /srv/hugo
+hugo_base_url: ""
+
+hugo_server_listen: 0.0.0.0
+hugo_server_port: 8080
+hugo_timer_enabled: true
+
+hugo_nginx_enabled: false
+hugo_nginx_docroot: /var/www/hugo
diff --git a/handlers/main.yml b/handlers/main.yml
new file mode 100644
index 0000000..35181a3
--- /dev/null
+++ b/handlers/main.yml
@@ -0,0 +1,23 @@
+---
+# handlers file for hugo
+
+- name: Installer la commande
+ ansible.builtin.command:
+ cmd: install -t /usr/local/bin /opt/hugo/hugo
+ become: true
+
+- name: Redémarrer le service
+ ansible.builtin.systemd:
+ enabled: false
+ daemon_reload: true
+ state: restarted
+ name: hugo.service
+ become: true
+
+- name: Activer et exécuter la planification
+ ansible.builtin.systemd:
+ enabled: "{{ hugo_timer_enabled }}"
+ daemon_reload: true
+ state: started
+ name: hugo.timer
+ become: true
diff --git a/meta/main.yml b/meta/main.yml
new file mode 100644
index 0000000..79fdaff
--- /dev/null
+++ b/meta/main.yml
@@ -0,0 +1,19 @@
+galaxy_info:
+ author: pulsar89.5
+ description: Rôle de déploiement de gohugo.io
+
+ license: GPL-3.0-or-later
+
+ min_ansible_version: 2.1
+
+ platforms:
+ - name: Debian (LXD)
+ versions:
+ - 11
+
+ galaxy_tags:
+ - gohugo.io
+ - hugo
+ - web
+
+dependencies: []
diff --git a/tasks/configuration.yml b/tasks/configuration.yml
new file mode 100644
index 0000000..952263b
--- /dev/null
+++ b/tasks/configuration.yml
@@ -0,0 +1,48 @@
+---
+# tasks file for hugo
+
+- name: Récupérer les informations sur le dossier des données
+ ansible.builtin.stat:
+ path: "{{ hugo_data_path }}"
+ become: true
+ register: data_path_infos
+
+- name: Créer l'emplacement des données
+ ansible.builtin.file:
+ state: directory
+ path: "{{ hugo_data_path }}"
+ owner: root
+ group: root
+ mode: u=rw,g=r,o=
+ when: not data_path_infos.stat.exists
+ become: true
+
+- name: Déployer le service
+ ansible.builtin.template:
+ owner: root
+ group: root
+ mode: u=rw,g=r,o=r
+ src: hugo.service.j2
+ dest: /etc/systemd/system/hugo.service
+ become: true
+ notify: Redémarrer le service
+
+- name: Activer le service
+ ansible.builtin.systemd:
+ enabled: true
+ daemon_reload: true
+ state: restarted
+ name: hugo.service
+ when: hugo_timer_enabled
+ become: true
+
+- name: Déployer la planification
+ ansible.builtin.template:
+ owner: root
+ group: root
+ mode: u=rw,g=r,o=r
+ src: hugo.timer.j2
+ dest: /etc/systemd/system/hugo.timer
+ when: hugo_timer_enabled
+ become: true
+ notify: Activer et exécuter la planification
diff --git a/tasks/installation.yml b/tasks/installation.yml
new file mode 100644
index 0000000..7a4a4d2
--- /dev/null
+++ b/tasks/installation.yml
@@ -0,0 +1,49 @@
+---
+# tasks file for hugo
+
+- name: Créer l'emplacement de stockage du binaire
+ ansible.builtin.file:
+ state: directory
+ path: "{{ hugo_binary_path }}"
+ mode: u=rwX,g=rX,o=rX
+ become: true
+
+- name: Modifier l'URL pour pointer vers la version souhaitée
+ ansible.builtin.set_fact:
+ hugo_latest_url: "{{ hugo_latest_url | replace('latest', version) }}"
+ when: hugo_version != "latest"
+ vars:
+ version: "tags/v{{ hugo_version }}"
+
+- name: Récupérer le contenu du fichier de version
+ ansible.builtin.uri:
+ url: "{{ hugo_latest_url }}"
+ return_content: true
+ follow_redirects: all
+ register: releases
+
+- name: Extraire l'URL du paquet
+ ansible.builtin.set_fact:
+ browser_download_url: >
+ {{
+ releases.json.assets |
+ selectattr('browser_download_url', 'search', '.tar.gz') |
+ selectattr('browser_download_url', 'search', hugo_os) |
+ selectattr('browser_download_url', 'search', hugo_architecture) |
+ map(attribute='browser_download_url')
+ }}
+
+- name: Extraire l'archive
+ ansible.builtin.unarchive:
+ src: "{{ browser_download_url | first }}"
+ dest: "{{ hugo_binary_path }}"
+ remote_src: true
+ list_files: true
+ mode: u=rwX,g=rX,o=rX
+ become: true
+
+- name: Installer la commande
+ ansible.builtin.command:
+ cmd: install -t /usr/local/bin /opt/hugo/hugo
+ when: hugo_install_command
+ become: true
diff --git a/tasks/main.yml b/tasks/main.yml
new file mode 100644
index 0000000..eaa2f7b
--- /dev/null
+++ b/tasks/main.yml
@@ -0,0 +1,9 @@
+---
+# tasks file for hugo
+
+- name: Importer les tâches d'installation
+ ansible.builtin.import_tasks: installation.yml
+
+- name: Importer les tâches de configuration
+ ansible.builtin.import_tasks: configuration.yml
+ when: hugo_install_command
diff --git a/templates/hugo.service.j2 b/templates/hugo.service.j2
new file mode 100644
index 0000000..39e8946
--- /dev/null
+++ b/templates/hugo.service.j2
@@ -0,0 +1,24 @@
+# {{ ansible_managed }}
+
+[Unit]
+Description=HuGO project {{ hugo_base_url }}
+After=syslog.target
+After=network.target
+ConditionFileNotEmpty={{ hugo_data_path }}/config.yaml
+
+[Service]
+User=root
+WorkingDirectory={{ hugo_data_path }}
+{% if hugo_nginx_enabled %}
+Type=oneshot
+ExecStart=/usr/local/bin/hugo --cleanDestinationDir --baseURL {{ hugo_base_url }}
+ExecStartPost=/usr/bin/rsync --delete-after --recursive --partial {{ hugo_data_path }}/public/ {{ hugo_nginx_docroot }}/
+{% else %}
+Type=simple
+ExecStart=/usr/local/bin/hugo server --cleanDestinationDir --appendPort=false --bind={{ hugo_server_listen }} --port={{ hugo_server_port }} --baseURL={{ hugo_base_url }}
+Restart=always
+RestartSec=2s
+{% endif %}
+
+[Install]
+WantedBy=multi-user.target
diff --git a/templates/hugo.timer.j2 b/templates/hugo.timer.j2
new file mode 100644
index 0000000..6c1b128
--- /dev/null
+++ b/templates/hugo.timer.j2
@@ -0,0 +1,12 @@
+# {{ ansible_managed }}
+
+[Unit]
+Description=HuGO to reload {{ hugo_base_url }}
+ConditionFileNotEmpty={{ hugo_data_path }}/config.yaml
+
+[Timer]
+OnCalendar=daily
+Persistent=true
+
+[Install]
+WantedBy=timers.target