First commit

This commit is contained in:
2026-07-20 11:05:07 +02:00
commit b592ab669f
159 changed files with 10294 additions and 0 deletions
+99
View File
@@ -0,0 +1,99 @@
# Makefile racine — Fail2banActionBanishment
# NB : les lignes de recette Make DOIVENT être indentées par une tabulation
# (contrainte de l'outil Make lui-même, seule exception à la règle "4 espaces"
# du projet, cf. ROADMAP.md Phase 0).
.PHONY: install uninstall status test lint docs docs-serve run worker mqtt master-client master-listen deploy join-token join dump-db install-master install-mariadb install-nginx install-supervisor uninstall-supervisor help
EMITTER_DIR := emitter
EMITTER_VENV := $(EMITTER_DIR)/.venv
EMITTER_PYTHON := $(EMITTER_VENV)/bin/python
# Crée le venv de l'émetteur et installe ses dépendances s'il n'existe pas
# encore (évite le "pas de virtual env" quand run/worker/test/mqtt sont
# lancés sans avoir suivi la procédure manuelle du README).
$(EMITTER_VENV)/bin/activate: $(EMITTER_DIR)/requirements.txt
python3 -m venv $(EMITTER_VENV)
$(EMITTER_PYTHON) -m pip install --quiet --upgrade pip
$(EMITTER_PYTHON) -m pip install --quiet -r $(EMITTER_DIR)/requirements.txt
touch $(EMITTER_VENV)/bin/activate
help: ## Affiche cette aide
@grep -E '^[a-zA-Z_-]+:.*## ' $(MAKEFILE_LIST) | sed 's/:.*## /\t/'
install: ## Déploie le noeud (paquets, configuration, services) — nécessite root
sudo ./install.sh install
uninstall: ## Arrête et désactive les services installés (ne supprime pas les fichiers déployés)
sudo systemctl disable --now fail2ban.service firewall.service mosquitto.service
status: ## Vérifie l'état des services (firewall, fail2ban, mosquitto)
sudo ./install.sh status
test: $(EMITTER_VENV)/bin/activate ## Vérifie les filtres fail2ban custom + tests Django (émetteur)
./scripts/test-fail2ban-filters.sh
$(EMITTER_PYTHON) $(EMITTER_DIR)/manage.py test
lint: $(EMITTER_VENV)/bin/activate ## Vérifie le typage Python (pyright) et la syntaxe des scripts shell (shellcheck) — nécessite pyright/shellcheck sur le PATH (voir README)
$(EMITTER_PYTHON) -m pip install --quiet -r $(EMITTER_DIR)/requirements-dev.txt
pyright
shellcheck install.sh scripts/*.sh generic/firewall/firewall-launcher.sh
docs: $(EMITTER_VENV)/bin/activate ## Génère le site de documentation mkdocs dans site/ (fr/en) — prévisualiser avec 'make docs-serve'
$(EMITTER_PYTHON) -m pip install --quiet -r requirements-docs.txt
$(EMITTER_PYTHON) -m mkdocs build
docs-serve: $(EMITTER_VENV)/bin/activate ## Sert la documentation en local avec rechargement à chaud (http://127.0.0.1:8001/)
$(EMITTER_PYTHON) -m pip install --quiet -r requirements-docs.txt
$(EMITTER_PYTHON) -m mkdocs serve -a 127.0.0.1:8001
run: $(EMITTER_VENV)/bin/activate ## Lance l'émetteur Django en mode développement (dev server ; MQTT/Celery à lancer à part, voir make mqtt/worker)
$(EMITTER_PYTHON) $(EMITTER_DIR)/manage.py migrate
$(EMITTER_PYTHON) $(EMITTER_DIR)/manage.py runserver
mqtt: $(EMITTER_VENV)/bin/activate ## Lance l'ingestion MQTT de l'émetteur (manage.py mqtt_listen)
$(EMITTER_PYTHON) $(EMITTER_DIR)/manage.py mqtt_listen
worker: $(EMITTER_VENV)/bin/activate ## Lance le worker Celery (géolocalisation asynchrone des IP bannies)
cd $(EMITTER_DIR) && .venv/bin/celery -A config worker -l info
master-client: $(EMITTER_VENV)/bin/activate ## Lance le relais vers le broker master (Phase 2.b, mTLS — voir MQTT_MASTER_* dans .env)
$(EMITTER_PYTHON) $(EMITTER_DIR)/manage.py master_client
master-listen: $(EMITTER_VENV)/bin/activate ## Lance l'ingestion côté master (Phase 3, tous les noeuds — cert master-internal)
$(EMITTER_PYTHON) $(EMITTER_DIR)/manage.py master_listen
deploy: install ## Alias de production pour install, sur le VPS cible
join-token: $(EMITTER_VENV)/bin/activate ## Émet un jeton d'auto-inscription pour un nouveau noeud (MASTER uniquement) — usage: make join-token NODE=<nom> [TTL=<minutes>]
@if [ -z "$(NODE)" ]; then echo "Usage: make join-token NODE=<nom> [TTL=<minutes>]" >&2; exit 1; fi
$(EMITTER_PYTHON) $(EMITTER_DIR)/manage.py create_join_token $(NODE) $(if $(TTL),--ttl-minutes $(TTL))
join: ## Auto-inscrit CE noeud auprès du master, avec le jeton reçu via 'make join-token' côté master — usage: make join MASTER=<url> NODE=<nom> TOKEN=<jeton> — nécessite root
@if [ -z "$(MASTER)" ] || [ -z "$(NODE)" ] || [ -z "$(TOKEN)" ]; then \
echo "Usage: make join MASTER=<url> NODE=<nom> TOKEN=<jeton>" >&2; exit 1; \
fi
sudo ./install.sh join --master $(MASTER) --node $(NODE) --token $(TOKEN)
dump-db: $(EMITTER_VENV)/bin/activate ## Dump JSON portable de la base (Django dumpdata) en vue d'un portage vers mariadb/postgresql — recharger ensuite avec manage.py loaddata après bascule DB_ENGINE
$(EMITTER_PYTHON) $(EMITTER_DIR)/manage.py dumpdata --natural-foreign --natural-primary \
-e contenttypes -e auth.permission -e sessions \
-o $(EMITTER_DIR)/db-dump-$$(date +%Y%m%d-%H%M%S).json
@echo "Dump créé dans $(EMITTER_DIR)/. Après bascule DB_ENGINE (make install-mariadb, ou"
@echo "DB_ENGINE=postgresql dans .env + migrate), recharger avec :"
@echo " $(EMITTER_PYTHON) $(EMITTER_DIR)/manage.py loaddata <fichier>.json"
install-master: ## Déploie le broker master (CA privée, ACL, ingestion multi-noeuds) — opt-in, nécessite root
sudo ./install.sh install-master
install-mariadb: ## Bascule la base de données de SQLite vers MariaDB (base/utilisateur créés) — opt-in, nécessite root, relancer 'make install' ensuite
sudo ./install.sh install-mariadb
install-nginx: ## Déploie nginx + certificat Let's Encrypt devant le tableau de bord (voir DASHBOARD_DOMAIN dans .env) — nécessite root
sudo ./install.sh install-nginx
install-supervisor: ## Bascule les services de l'émetteur de systemd vers supervisor (option, VPS)
sudo ./install.sh install-supervisor
uninstall-supervisor: ## Revient à systemd (arrête supervisor, réactive les services systemd)
sudo ./install.sh uninstall-supervisor