-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
252 lines (225 loc) · 8.73 KB
/
Makefile
File metadata and controls
252 lines (225 loc) · 8.73 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
# Lucy Bot - Makefile para Deploy Simplificado
# Metodologia KISS: Comandos simples e diretos
.PHONY: help dev prod build clean
@echo "🧹 Limpeza completa do ambiente..."
docker-compose -f $(COMPOSE_DEV) down -v --remove-orphans 2>/dev/null || true
docker-compose -f $(COMPOSE_PROD) down -v --remove-orphans 2>/dev/null || true
docker system prune -f
docker volume prune -f
@echo "✅ Limpeza concluída!"
# Comando de emergência para resetar completamente
reset:
@echo "🆘 Reset de emergência - removendo TUDO..."
docker stop $$(docker ps -aq) 2>/dev/null || true
docker rm $$(docker ps -aq) 2>/dev/null || true
docker volume rm $$(docker volume ls -q | grep lucy) 2>/dev/null || true
docker network rm $$(docker network ls -q | grep lucy) 2>/dev/null || true
docker system prune -af
@echo "✅ Reset completo concluído!"
# === Aliases Convenientes ===atus logs restart stop clean backup
# Variáveis
COMPOSE_DEV = docker-compose.yml
COMPOSE_PROD = docker-compose.prod.yml
# Ajuda padrão
help:
@echo "🤖 Lucy Bot - Comandos de Deploy"
@echo ""
@echo "📦 Desenvolvimento:"
@echo " make dev - Iniciar ambiente de desenvolvimento"
@echo " make dev-logs - Ver logs de desenvolvimento"
@echo " make dev-stop - Parar ambiente de desenvolvimento"
@echo ""
@echo "🚀 Produção - Deploy Completo:"
@echo " make prod - Deploy completo (DB + Bot)"
@echo " make prod-logs - Ver logs de produção"
@echo " make prod-stop - Parar ambiente de produção"
@echo ""
@echo "🗄️ Produção - Deploy Separado (RECOMENDADO):"
@echo " make db-init - Inicializar apenas banco de dados"
@echo " make bot-deploy - Deploy apenas do bot"
@echo " make bot-redeploy - Redeploy do bot (remove container + rebuild)"
@echo " make db-stop - Parar apenas banco de dados"
@echo " make bot-stop - Parar apenas bot"
@echo " make db-restart - Reiniciar apenas banco de dados"
@echo " make bot-restart - Reiniciar apenas bot"
@echo ""
@echo "🛠️ Operações:"
@echo " make status - Status dos containers"
@echo " make restart - Reiniciar bot"
@echo " make backup - Backup do banco de dados"
@echo " make clean - Limpeza completa"
@echo ""
@echo "📖 FLUXO RECOMENDADO:"
@echo " 1️⃣ make db-init # Primeira vez"
@echo " 2️⃣ make bot-deploy # Deploy inicial"
@echo " 3️⃣ make bot-redeploy # Updates de código (recomendado)"
@echo " 4️⃣ make bot-restart # Restart simples"
# === Deploy Separado para Produção ===
db-init:
@echo "🗄️ Inicializando banco de dados..."
@if ! docker network ls | grep -q lucy-network; then \
echo " Criando rede Docker..."; \
docker network create lucy-network 2>/dev/null || true; \
fi
@echo " Subindo PostgreSQL..."
docker-compose -f $(COMPOSE_PROD) up -d postgres
@echo " Aguardando PostgreSQL ficar pronto..."
@timeout 60 bash -c 'until docker exec lucy-postgres-prod pg_isready -U lucy; do echo " Aguardando..."; sleep 2; done' || echo "⚠️ Timeout - verifique se o PostgreSQL subiu"
@echo " Executando migrações..."
docker-compose -f $(COMPOSE_PROD) exec postgres psql -U lucy -d lucydb -c "\dt" 2>/dev/null || echo " Primeira execução - criando schema..."
docker-compose -f $(COMPOSE_PROD) run --rm bot npx prisma migrate deploy
@echo "✅ Banco de dados inicializado!"
bot-deploy:
@echo "🤖 Fazendo deploy do bot..."
@if ! docker ps | grep -q lucy-postgres-prod; then \
echo "❌ PostgreSQL não está rodando. Execute 'make db-init' primeiro!"; \
exit 1; \
fi
@echo " Building imagem do bot..."
docker-compose -f $(COMPOSE_PROD) build bot
@echo " Subindo bot..."
docker-compose -f $(COMPOSE_PROD) up -d bot
@echo "✅ Bot deployado!"
db-stop:
@echo "🛑 Parando banco de dados..."
docker-compose -f $(COMPOSE_PROD) stop postgres
bot-stop:
@echo "🛑 Parando bot..."
docker-compose -f $(COMPOSE_PROD) stop bot
db-restart:
@echo "🔄 Reiniciando banco de dados..."
docker-compose -f $(COMPOSE_PROD) restart postgres
bot-restart:
@echo "🔄 Reiniciando bot..."
docker-compose -f $(COMPOSE_PROD) restart bot
bot-redeploy:
@echo "🚀 Redeploy do bot (apenas container)..."
@if ! docker ps | grep -q lucy-postgres-prod; then \
echo "❌ PostgreSQL não está rodando. Execute 'make db-init' primeiro!"; \
exit 1; \
fi
@echo " Parando container do bot..."
docker-compose -f $(COMPOSE_PROD) stop bot
@echo " Removendo container do bot..."
docker-compose -f $(COMPOSE_PROD) rm -f bot
@echo " Fazendo rebuild da imagem..."
docker-compose -f $(COMPOSE_PROD) build --no-cache bot
@echo " Subindo nova versão do bot..."
docker-compose -f $(COMPOSE_PROD) up -d bot
@echo "✅ Redeploy do bot concluído!"
@echo "💡 Banco de dados mantido intacto - execute migrações manualmente se necessário"
# === Deploy Completo (Legado) ===
dev:
@echo "🔧 Iniciando ambiente de desenvolvimento..."
@if [ ! -f .env ]; then \
echo "❌ Arquivo .env não encontrado!"; \
echo "💡 Copie .env.example para .env"; \
exit 1; \
fi
docker-compose -f $(COMPOSE_DEV) up -d
@echo "✅ Ambiente de desenvolvimento iniciado!"
@echo "🌐 Painel Admin: http://localhost:3050"
dev-build:
@echo "🏗️ Build de desenvolvimento..."
docker-compose -f $(COMPOSE_DEV) build
dev-logs:
docker-compose -f $(COMPOSE_DEV) logs -f bot
dev-stop:
@echo "🛑 Parando ambiente de desenvolvimento..."
docker-compose -f $(COMPOSE_DEV) down
# === Produção ===
prod:
@echo "🚀 Deploy em produção..."
@if [ ! -f .env ]; then \
echo "❌ Arquivo .env não encontrado!"; \
echo "💡 Use .env.production como base"; \
exit 1; \
fi
@echo "🏗️ Build de produção..."
docker-compose -f $(COMPOSE_PROD) build --no-cache bot
@echo "🛑 Parando containers existentes..."
docker-compose -f $(COMPOSE_PROD) down || true
@echo "🧹 Limpando redes órfãs..."
docker network prune -f || true
@echo "🗄️ Iniciando banco de dados..."
docker-compose -f $(COMPOSE_PROD) up -d postgres
@echo "⏳ Aguardando banco ficar pronto..."
@sleep 15
@echo "🔄 Executando migrações..."
docker-compose -f $(COMPOSE_PROD) run --rm bot npx prisma migrate deploy
@echo "🎯 Iniciando todos os serviços..."
docker-compose -f $(COMPOSE_PROD) up -d
@echo "✅ Deploy de produção concluído!"
@echo "🌐 Painel Admin: http://localhost:3050"
prod-build:
@echo "🏗️ Build de produção..."
docker-compose -f $(COMPOSE_PROD) build --no-cache
prod-logs:
docker-compose -f $(COMPOSE_PROD) logs -f bot
prod-stop:
@echo "🛑 Parando ambiente de produção..."
docker-compose -f $(COMPOSE_PROD) down
# === Operações Gerais ===
status:
@echo "📊 Status dos containers:"
@echo ""
@echo "🔧 Desenvolvimento:"
@docker-compose -f $(COMPOSE_DEV) ps 2>/dev/null || echo " Não está rodando"
@echo ""
@echo "🚀 Produção:"
@docker-compose -f $(COMPOSE_PROD) ps 2>/dev/null || echo " Não está rodando"
restart:
@echo "🔄 Reiniciando bot..."
@if docker-compose -f $(COMPOSE_PROD) ps postgres | grep -q "Up"; then \
echo " Reiniciando produção..."; \
docker-compose -f $(COMPOSE_PROD) restart bot; \
elif docker-compose -f $(COMPOSE_DEV) ps postgres | grep -q "Up"; then \
echo " Reiniciando desenvolvimento..."; \
docker-compose -f $(COMPOSE_DEV) restart bot; \
else \
echo "❌ Nenhum ambiente está rodando"; \
fi
backup:
@echo "💾 Fazendo backup do banco de dados..."
@BACKUP_FILE=backup-$$(date +%Y%m%d_%H%M%S).sql; \
if docker ps | grep -q lucy-postgres-prod; then \
echo " Backup de produção..."; \
docker exec lucy-postgres-prod pg_dump -U lucy lucydb > $$BACKUP_FILE; \
elif docker ps | grep -q lucy-postgres; then \
echo " Backup de desenvolvimento..."; \
docker exec lucy-postgres pg_dump -U lucy lucydb > $$BACKUP_FILE; \
else \
echo "❌ PostgreSQL não está rodando"; \
exit 1; \
fi; \
echo "✅ Backup salvo em: $$BACKUP_FILE"
clean:
@echo "🧹 Limpeza completa..."
docker-compose -f $(COMPOSE_DEV) down -v --remove-orphans 2>/dev/null || true
docker-compose -f $(COMPOSE_PROD) down -v --remove-orphans 2>/dev/null || true
docker system prune -f
docker volume prune -f
@echo "✅ Limpeza concluída!"
# === Aliases Convenientes ===
start: dev
deploy: prod
build: prod-build
init-db: db-init
deploy-bot: bot-deploy
logs: status
@echo ""
@echo "💡 Use 'make dev-logs' ou 'make prod-logs' para logs específicos"
# === Verificações de Saúde ===
health:
@echo "🏥 Verificando saúde do sistema..."
@if curl -f http://localhost:3050/api/health >/dev/null 2>&1; then \
echo "✅ API está saudável"; \
curl -s http://localhost:3050/api/health | grep -o '"status":"[^"]*"'; \
else \
echo "❌ API não está respondendo"; \
fi
# === Deploy com Verificações ===
deploy-safe: prod health
@echo "🔍 Verificando deploy..."
@sleep 5
@make health