mirror of
https://github.com/deunix-educ/Fail2banMqttActionBanishment.git
synced 2026-08-24 03:11:58 +02:00
First commit
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user