Update docker management

This commit is contained in:
DariusIII
2026-03-05 15:14:04 +01:00
parent 5707bdd015
commit 05f5f17b16
16 changed files with 527 additions and 519 deletions
+182
View File
@@ -0,0 +1,182 @@
# ──────────────────────────────────────────────────────────────
# NNTmux Docker / Sail convenience targets
# ──────────────────────────────────────────────────────────────
#
# Run `make` or `make help` to see all available targets.
# See DOCKER.md for full documentation.
# ──────────────────────────────────────────────────────────────
.DEFAULT_GOAL := help
# Source SEARCH_DRIVER from .env and export as COMPOSE_PROFILES
# so the correct search engine container starts automatically.
-include .env
export COMPOSE_PROFILES ?= $(SEARCH_DRIVER)
SAIL := ./sail
DOCKER_COMPOSE := docker compose
# Colors
CYAN := \033[36m
GREEN := \033[32m
YELLOW := \033[33m
RESET := \033[0m
# ── Lifecycle ────────────────────────────────────────────────
.PHONY: up
up: ## Start all services in the background
@$(SAIL) up -d
.PHONY: down
down: ## Stop all services
@$(SAIL) down
.PHONY: stop
stop: down ## Alias for 'down'
.PHONY: restart
restart: ## Restart all services
@$(SAIL) restart
.PHONY: build
build: ## Build the app image
@$(SAIL) build
.PHONY: rebuild
rebuild: ## Build the app image from scratch (no cache)
@$(SAIL) build --no-cache
.PHONY: pull
pull: ## Pull the latest versions of all base images
@$(DOCKER_COMPOSE) pull
.PHONY: update
update: pull rebuild ## Pull latest images, rebuild, and restart
@$(SAIL) up -d
.PHONY: fresh
fresh: ## Destroy ALL volumes, rebuild, and start clean (DATA LOSS!)
@echo "$(YELLOW)⚠ This will destroy all Docker volumes (database, redis, search index).$(RESET)"
@read -p "Are you sure? [y/N] " confirm && [ "$$confirm" = "y" ] || exit 1
@$(SAIL) down -v
@$(SAIL) build --no-cache
@$(SAIL) up -d
@echo "$(GREEN)✔ Fresh environment is up. Run 'make artisan cmd=nntmux:install' to initialise.$(RESET)"
# ── Shell Access ─────────────────────────────────────────────
.PHONY: shell
shell: ## Open a bash shell in the app container
@$(SAIL) shell
.PHONY: root-shell
root-shell: ## Open a root bash shell in the app container
@$(SAIL) root-shell
.PHONY: tinker
tinker: ## Open a Laravel Tinker session
@$(SAIL) tinker
# ── Artisan / PHP ────────────────────────────────────────────
.PHONY: artisan
artisan: ## Run an artisan command (usage: make artisan cmd="migrate")
@$(SAIL) artisan $(cmd)
.PHONY: tmux-start
tmux-start: ## Start the NNTmux tmux processing engine
@$(SAIL) artisan tmux:start
.PHONY: tmux-stop
tmux-stop: ## Stop the NNTmux tmux processing engine
@$(SAIL) artisan tmux:stop
.PHONY: tmux-attach
tmux-attach: ## Attach to the running tmux session
@$(SAIL) artisan tmux:attach
.PHONY: horizon
horizon: ## Show Horizon status
@$(SAIL) artisan horizon:status
# ── Testing & Quality ────────────────────────────────────────
.PHONY: test
test: ## Run the PHPUnit test suite (usage: make test filter=TestName)
@$(SAIL) test $(if $(filter),--filter=$(filter),)
.PHONY: pint
pint: ## Run Laravel Pint code formatter on dirty files
@$(SAIL) pint --dirty
.PHONY: pint-all
pint-all: ## Run Laravel Pint on all files
@$(SAIL) pint
# ── Frontend ─────────────────────────────────────────────────
.PHONY: npm-build
npm-build: ## Run npm install and build inside the container
@$(SAIL) npm install
@$(SAIL) npm run build
.PHONY: npm-dev
npm-dev: ## Start Vite dev server inside the container
@$(SAIL) npm run dev
# ── Dependencies ─────────────────────────────────────────────
.PHONY: composer-install
composer-install: ## Run composer install inside the container
@$(SAIL) composer install
.PHONY: composer-update
composer-update: ## Run composer update inside the container
@$(SAIL) composer update
# ── Database / Services ──────────────────────────────────────
.PHONY: db
db: ## Open a MariaDB CLI session
@$(SAIL) mariadb
.PHONY: redis-cli
redis-cli: ## Open a Redis CLI session
@$(SAIL) redis
# ── Logs & Status ────────────────────────────────────────────
.PHONY: logs
logs: ## Tail logs from all containers
@$(DOCKER_COMPOSE) logs -f --tail=100
.PHONY: status
status: ## Show running containers and their status
@$(DOCKER_COMPOSE) ps
# ── Cleanup ──────────────────────────────────────────────────
.PHONY: clean
clean: ## Remove stopped containers and dangling images
@docker system prune -f
@echo "$(GREEN)✔ Cleaned up dangling resources.$(RESET)"
.PHONY: nuke
nuke: ## Remove ALL project containers, images, and volumes (DATA LOSS!)
@echo "$(YELLOW)⚠ This will remove ALL project containers, images, and volumes.$(RESET)"
@read -p "Are you sure? [y/N] " confirm && [ "$$confirm" = "y" ] || exit 1
@$(SAIL) down -v --rmi all
@echo "$(GREEN)✔ All project Docker resources removed.$(RESET)"
# ── Help ─────────────────────────────────────────────────────
.PHONY: help
help: ## Show this help message
@echo ""
@echo "$(CYAN)NNTmux Docker / Sail Commands$(RESET)"
@echo "$(CYAN)─────────────────────────────$(RESET)"
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | \
awk 'BEGIN {FS = ":.*?## "}; {printf " $(GREEN)%-20s$(RESET) %s\n", $$1, $$2}'
@echo ""