138 lines
3.5 KiB
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
|