arcadiasuite/plus/Makefile

138 lines
3.5 KiB
Makefile

# ---------------------------------------
# Controle do ambiente Docker - Laravel + Vite + MySQL
# ---------------------------------------
COMPOSE = docker compose
APP_SERVICE = app
DB_SERVICE = db
DB_WAIT_RETRIES ?= 30
DB_WAIT_SECONDS ?= 2
REQUIRED_ENV = \
APP_ENV \
APP_URL \
APP_KEY \
DB_CONNECTION \
DB_HOST \
DB_PORT \
DB_DATABASE \
DB_USERNAME \
DB_PASSWORD
.PHONY: setup up dev \
check-env wait-db \
perms docker-up docker-up-build docker-down docker-down-volumes \
composer-install npm-install assets-build \
key migrate-seed
# ---------------------------
# Setup completo (instalação inicial)
# ---------------------------
setup: check-env docker-up-build perms composer-install npm-install wait-db key migrate-seed assets-build docker-down
@echo "✅ Setup completo (containers parados)."
# ---------------------------
# Subir ambiente normal (sem Vite)
# ---------------------------
up: check-env docker-up
@echo "✅ Containers ativos:"
@echo " Backend: http://localhost:8000"
# ---------------------------
# Subir ambiente dev (com Vite)
# ---------------------------
dev: check-env docker-up
$(COMPOSE) exec -d $(APP_SERVICE) npm run dev -- --host 0.0.0.0 --port 5173
@echo "✅ Ambiente DEV iniciado:"
@echo " Backend: http://localhost:8000"
@echo " Vite: http://localhost:5173"
# ---------------------------
# Remove tudo relacionado ao projeto e reconstrói do zero
# ---------------------------
rebuild-force:
@echo "🧨 Removendo containers, volumes, redes e imagens relacionadas..."
$(COMPOSE) down -v --rmi all --remove-orphans
@echo "🧨 Removendo imagens órfãs..."
docker image prune -f
docker volume prune -f
@echo "🔨 Reconstruindo tudo do zero..."
$(MAKE) setup
# ---------------------------
# Helpers internos
# ---------------------------
check-env:
@echo "Verificando .env..."
@if [ ! -f .env ]; then \
echo "ERRO: .env não encontrado."; \
exit 1; \
fi; \
missing=""; \
for var in $(REQUIRED_ENV); do \
if ! grep -q "^$$var=" .env; then \
if [ "$$var" = "APP_KEY" ]; then \
echo "ERRO: APP_KEY deve existir no .env (pode estar vazia: APP_KEY=, ou conter uma chave válida)."; \
fi; \
missing="$$missing $$var"; \
fi; \
done; \
if [ -n "$$missing" ]; then \
echo "ERRO: variáveis faltando no .env:"; \
echo " $$missing"; \
exit 1; \
fi; \
echo ".env OK."
# Espera real pelo MySQL
wait-db:
@echo "Aguardando MySQL..."
@$(COMPOSE) exec -T $(DB_SERVICE) sh -c '\
c=0; \
while ! mysqladmin ping -h127.0.0.1 --silent 2>/dev/null; do \
c=$$((c+1)); \
if [ $$c -ge $(DB_WAIT_RETRIES) ]; then \
echo "ERRO: MySQL não respondeu."; \
exit 1; \
fi; \
echo " aguardando... (tentativa $$c)"; \
sleep $(DB_WAIT_SECONDS); \
done; \
echo "✅ MySQL está pronto."; \
'
perms:
$(COMPOSE) exec -T $(APP_SERVICE) sh -c "\
mkdir -p storage/logs bootstrap/cache && \
chown -R www-data:www-data storage bootstrap/cache && \
chmod -R 775 storage bootstrap/cache \
"
docker-up-build:
$(COMPOSE) up -d --build
docker-up:
$(COMPOSE) up -d
docker-down:
$(COMPOSE) down
docker-down-volumes:
$(COMPOSE) down -v
composer-install:
$(COMPOSE) exec -T $(APP_SERVICE) composer install --no-interaction --prefer-dist
npm-install:
$(COMPOSE) exec -T $(APP_SERVICE) npm install
assets-build:
$(COMPOSE) exec -T $(APP_SERVICE) npm run build
key:
$(COMPOSE) exec -T $(APP_SERVICE) php artisan key:generate || true
migrate-seed:
$(COMPOSE) exec -T $(APP_SERVICE) php artisan migrate --seed