.PHONY: help install build up down restart logs health backup deploy clean \ ummahid-logs wallet-logs ramz-logs mocknet-logs api-logs app-logs \ db-shell db-backup db-restore redis-shell redis-flush \ stats ps setup env-check test test-watch test-coverage # Falah OS v1.3 — Docker Compose management # Usage: make help help: ## Show available commands @echo "Falah OS v1.3" @echo "" @echo "Usage: make [command]" @echo "" @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-18s\033[0m %s\n", $$1, $$2}' # --------------------------------------------------------------------------- # Core lifecycle # --------------------------------------------------------------------------- install: ## Full install: generate secrets, write .env, start stack, health check @bash install.sh setup: ## First-time setup: copy .env.example → .env (manual secret entry) @if [ -f .env ]; then echo ".env already exists, skipping."; else cp .env.example .env && echo "Created .env — fill in secrets before running 'make up'"; fi env-check: ## Verify required env vars are set @missing=0; \ for var in JWT_SECRET ENCRYPTION_KEY ADMIN_SECRET POSTGRES_PASSWORD REDIS_PASSWORD; do \ if [ -z "$$(grep -E "^$$var=.+" .env 2>/dev/null | cut -d= -f2)" ]; then \ echo "MISSING: $$var"; missing=1; \ fi; \ done; \ [ $$missing -eq 0 ] && echo "All required env vars are set." || exit 1 test: ## Run all tests npm test test-watch: ## Run tests in watch mode npm run test:watch test-coverage: ## Run tests with coverage report npm run test:coverage build: ## Build all service images docker compose build up: env-check ## Start the full stack docker compose up -d @echo "Waiting for services..." @sleep 8 @$(MAKE) health down: ## Stop and remove containers (preserves volumes) docker compose down restart: ## Restart all containers docker compose restart logs: ## Tail logs from all services docker compose logs -f --tail=100 health: ## Run health checks against all services @./scripts/health-check.sh ps: ## Show container status docker compose ps stats: ## Live container resource usage docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}" # --------------------------------------------------------------------------- # Per-service logs # --------------------------------------------------------------------------- ummahid-logs: ## Tail Ummah ID logs docker compose logs -f ummahid wallet-logs: ## Tail Wallet logs docker compose logs -f wallet ramz-logs: ## Tail RAMZ logs docker compose logs -f ramz mocknet-logs: ## Tail Mock-Net logs docker compose logs -f mocknet falahd-logs: ## Tail falahd daemon logs docker compose logs -f falahd api-logs: ## Tail API Gateway logs docker compose logs -f api-gateway app-logs: ## Tail App logs docker compose logs -f app # --------------------------------------------------------------------------- # Database # --------------------------------------------------------------------------- db-shell: ## Open PostgreSQL shell docker compose exec postgres psql -U $${POSTGRES_USER:-postgres} db-backup: ## Dump all databases to backups/ @mkdir -p backups docker compose exec postgres pg_dumpall -U $${POSTGRES_USER:-postgres} \ | gzip > backups/postgres_$$(date +%Y%m%d_%H%M%S).sql.gz @echo "Backup saved to backups/" db-restore: ## Restore from backup: make db-restore FILE=backups/postgres_xxx.sql.gz @[ -n "$(FILE)" ] || (echo "Usage: make db-restore FILE=backups/postgres_xxx.sql.gz" && exit 1) gunzip -c $(FILE) | docker compose exec -T postgres psql -U $${POSTGRES_USER:-postgres} # --------------------------------------------------------------------------- # Redis # --------------------------------------------------------------------------- redis-shell: ## Open Redis CLI docker compose exec redis redis-cli -a $${REDIS_PASSWORD} redis-flush: ## Flush all Redis data (will prompt for confirmation) @echo "WARNING: this deletes all Redis data." @read -p "Type 'yes' to confirm: " c && [ "$$c" = "yes" ] || exit 1 docker compose exec redis redis-cli -a $${REDIS_PASSWORD} FLUSHALL # --------------------------------------------------------------------------- # Cleanup # --------------------------------------------------------------------------- clean: ## Remove containers AND volumes (destroys all data — prompts first) @echo "WARNING: this destroys all Falah OS containers and volumes." @read -p "Type 'yes' to confirm: " c && [ "$$c" = "yes" ] || exit 1 docker compose down -v @echo "Done. Run 'make up' to start fresh."