.DEFAULT_GOAL := help ENV_FILE := .env PLACEHOLDER := crea_una_chiave_esadecimale_di_64_caratteri_per_la_cifratura # --------------------------------------------------------------------------- # Rileva OS per generazione chiave # --------------------------------------------------------------------------- ifeq ($(OS),Windows_NT) KEYGEN = powershell -NoProfile -Command \ "$$b = New-Object byte[] 32; \ [System.Security.Cryptography.RandomNumberGenerator]::Create().GetBytes($$b); \ ($$b | ForEach-Object { $$_.ToString('x2') }) -join ''" else KEYGEN = openssl rand -hex 32 endif # --------------------------------------------------------------------------- # Legge ENCRYPTION_KEY dal .env per validazione # --------------------------------------------------------------------------- -include $(ENV_FILE) export # --------------------------------------------------------------------------- # Targets # --------------------------------------------------------------------------- .PHONY: help help: ## Mostra questo messaggio di aiuto @echo "" @echo " Nexterm - guida al deploy" @echo "" @echo " 1. make genkey — genera e scrive ENCRYPTION_KEY nel .env" @echo " 2. make check — verifica prerequisiti e configurazione" @echo " 3. make up — avvia i container" @echo "" @echo " Altri comandi:" @grep -hE '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) \ | awk 'BEGIN {FS = ":.*?## "}; {printf " %-14s %s\n", $$1, $$2}' @echo "" .PHONY: genkey genkey: ## Genera ENCRYPTION_KEY casuale e la scrive nel .env $(eval NEW_KEY := $(shell $(KEYGEN))) @if [ -z "$(NEW_KEY)" ]; then \ echo "ERRORE: generazione chiave fallita. Assicurati che openssl sia installato."; \ exit 1; \ fi ifeq ($(OS),Windows_NT) @powershell -NoProfile -Command \ "(Get-Content $(ENV_FILE)) -replace '$(PLACEHOLDER)|^ENCRYPTION_KEY=.*', \ { if ($$_ -match '^ENCRYPTION_KEY=') { 'ENCRYPTION_KEY=$(NEW_KEY)' } else { $$_ } } \ | Set-Content $(ENV_FILE)" else @sed -i "s|^ENCRYPTION_KEY=.*|ENCRYPTION_KEY=$(NEW_KEY)|" $(ENV_FILE) endif @echo "ENCRYPTION_KEY aggiornata nel file $(ENV_FILE)." .PHONY: check check: ## Verifica prerequisiti e configurazione prima del deploy @echo "==> Controllo Docker..." @docker info > /dev/null 2>&1 || (echo "ERRORE: Docker non raggiungibile." && exit 1) @echo " OK" @echo "==> Controllo docker compose..." @docker compose version > /dev/null 2>&1 || (echo "ERRORE: docker compose v2 non trovato." && exit 1) @echo " OK" @echo "==> Controllo file $(ENV_FILE)..." @test -f $(ENV_FILE) || (echo "ERRORE: file $(ENV_FILE) non trovato." && exit 1) @echo " OK" @echo "==> Controllo ENCRYPTION_KEY..." @if echo "$(ENCRYPTION_KEY)" | grep -qE '^[0-9a-fA-F]{64}$$'; then \ echo " OK"; \ else \ echo "ERRORE: ENCRYPTION_KEY non valida (deve essere hex di 64 caratteri)."; \ echo " Esegui: make genkey"; \ exit 1; \ fi @echo "" @echo "Tutto OK. Puoi eseguire: make up" .PHONY: up up: ## Avvia i container in background docker compose --env-file $(ENV_FILE) up -d .PHONY: down down: ## Ferma e rimuove i container docker compose --env-file $(ENV_FILE) down .PHONY: restart restart: ## Riavvia i container docker compose --env-file $(ENV_FILE) restart .PHONY: logs logs: ## Segue i log di nexterm in tempo reale docker compose --env-file $(ENV_FILE) logs -f nexterm .PHONY: ps ps: ## Mostra lo stato dei container docker compose --env-file $(ENV_FILE) ps .PHONY: pull pull: ## Scarica le immagini aggiornate senza riavviare docker compose --env-file $(ENV_FILE) pull .PHONY: update update: pull ## Aggiorna le immagini e ricrea i container docker compose --env-file $(ENV_FILE) up -d --remove-orphans