PoC BunkerWeb 1.6.17 : docker-compose sur Proxmox, déployé par Ansible

Stack BunkerWeb (scheduler, UI, MariaDB, Redis), sites de test (nginx,
Juice Shop, go-httpbin), filtrage DOCKER-USER, script de tests, README
et schéma d'architecture.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
claude BotandClaude Opus 5.5 committed 2026-10-27 11:11:07 +01:00
commit 099584c95c
42 files changed
+4260

No files matched your search

+9
View File
@@ -0,0 +1,9 @@
---
# Crée le modèle Debian 13 cloud-init puis clone les VM du PoC.
# A sauter si vous fournissez vos propres VM (Debian 12/13 avec accès SSH).
- name: Provisionner les VM sur Proxmox
hosts: proxmox
gather_facts: false
roles:
- proxmox_template
- proxmox_vm
+6
View File
@@ -0,0 +1,6 @@
---
- name: Socle des VM (paquets, résolution locale, Docker)
hosts: poc_vms
roles:
- common
- docker
+5
View File
@@ -0,0 +1,5 @@
---
- name: Déployer les sites de test
hosts: apps
roles:
- apps
+5
View File
@@ -0,0 +1,5 @@
---
- name: Déployer BunkerWeb
hosts: bunkerweb
roles:
- bunkerweb
+5
View File
@@ -0,0 +1,5 @@
---
- name: Préparer le client de test
hosts: client
roles:
- client
+15
View File
@@ -0,0 +1,15 @@
---
# Lance la batterie de tests depuis le client et affiche le résultat.
- name: Tests fonctionnels BunkerWeb
hosts: client
gather_facts: false
tasks:
- name: Exécuter bwpoc-tests
ansible.builtin.command: "{{ poc_base_dir }}/tests/bwpoc-tests.sh"
register: tests
changed_when: false
failed_when: false
- name: Résultat
ansible.builtin.debug:
msg: "{{ tests.stdout_lines }}"
+33
View File
@@ -0,0 +1,33 @@
---
# Supprime les VM du PoC (le modèle est conservé, sauf -e destroy_template=true).
- name: Détruire les VM du PoC
hosts: proxmox
gather_facts: false
vars_prompt:
- name: confirm
prompt: "Taper 'detruire' pour supprimer les VM {{ groups['poc_vms'] | unique | join(', ') }}"
private: false
tasks:
- name: Abandon sans confirmation
ansible.builtin.meta: end_play
when: confirm != 'detruire'
- name: Arrêter et supprimer les VM
ansible.builtin.shell: |
if qm status {{ hostvars[item].vm_id }} >/dev/null 2>&1; then
qm stop {{ hostvars[item].vm_id }} --skiplock 1 || true
qm destroy {{ hostvars[item].vm_id }} --purge 1 --destroy-unreferenced-disks 1
echo destroyed
fi
register: destroy
changed_when: "'destroyed' in destroy.stdout"
loop: "{{ groups['poc_vms'] | unique }}"
- name: Supprimer le modèle
ansible.builtin.shell: |
if qm status {{ pve_template_vmid }} >/dev/null 2>&1; then
qm destroy {{ pve_template_vmid }} --purge 1 && echo destroyed
fi
register: tpl_destroy
changed_when: "'destroyed' in tpl_destroy.stdout"
when: destroy_template | default(false) | bool
+36
View File
@@ -0,0 +1,36 @@
---
# Génère les fichiers compose dans build/<mode>/ sans rien déployer,
# pour les relire ou les utiliser à la main : ansible-playbook playbooks/render.yml
- name: Rendu local des fichiers compose
hosts: bunkerweb:apps
connection: local
gather_facts: false
vars:
ansible_become: false
render_dir: "{{ playbook_dir }}/../build/{{ poc_mode }}"
ansible_default_ipv4: { interface: ens18 }
tasks:
- name: Répertoires de sortie
ansible.builtin.file:
path: "{{ render_dir }}/{{ item }}"
state: directory
mode: "0755"
loop: [bunkerweb, apps]
run_once: true
- name: Compose BunkerWeb
ansible.builtin.template:
src: ../roles/bunkerweb/templates/compose.yml.j2
dest: "{{ render_dir }}/bunkerweb/compose.yml"
mode: "0600"
when: inventory_hostname in groups['bunkerweb']
- name: Compose applis et filtrage
ansible.builtin.template:
src: "../roles/apps/templates/{{ item.src }}"
dest: "{{ render_dir }}/apps/{{ item.dest }}"
mode: "0644"
loop:
- { src: compose.yml.j2, dest: compose.yml }
- { src: bwpoc-firewall.sh.j2, dest: bwpoc-firewall.sh }
when: inventory_hostname in groups['apps']
+12
View File
@@ -0,0 +1,12 @@
---
# Déploiement complet du PoC : ansible-playbook playbooks/site.yml
- name: Proxmox
ansible.builtin.import_playbook: 00-proxmox.yml
- name: Socle
ansible.builtin.import_playbook: 10-base.yml
- name: Applis
ansible.builtin.import_playbook: 20-apps.yml
- name: BunkerWeb
ansible.builtin.import_playbook: 30-bunkerweb.yml
- name: Client
ansible.builtin.import_playbook: 40-client.yml