-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdeploy.ps1
More file actions
210 lines (188 loc) · 7.65 KB
/
deploy.ps1
File metadata and controls
210 lines (188 loc) · 7.65 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
# Lucy Bot Deploy Script - Windows PowerShell
# Equivalente ao Makefile para uso no Windows
param(
[Parameter(Mandatory=$true)]
[string]$Command
)
$COMPOSE_DEV = "docker-compose.yml"
$COMPOSE_PROD = "docker-compose.prod.yml"
function Show-Help {
Write-Host "🤖 Lucy Bot - Comandos de Deploy (Windows)" -ForegroundColor Green
Write-Host ""
Write-Host "📦 Desenvolvimento:" -ForegroundColor Blue
Write-Host " .\deploy.ps1 dev - Iniciar ambiente de desenvolvimento"
Write-Host " .\deploy.ps1 dev-logs - Ver logs de desenvolvimento"
Write-Host " .\deploy.ps1 dev-stop - Parar ambiente de desenvolvimento"
Write-Host ""
Write-Host "🚀 Produção - Deploy Completo:" -ForegroundColor Yellow
Write-Host " .\deploy.ps1 prod - Deploy completo (DB e Bot)"
Write-Host " .\deploy.ps1 prod-logs - Ver logs de produção"
Write-Host " .\deploy.ps1 prod-stop - Parar ambiente de produção"
Write-Host ""
Write-Host "🗄️ Produção - Deploy Separado (RECOMENDADO):" -ForegroundColor Magenta
Write-Host " .\deploy.ps1 db-init - Inicializar apenas banco de dados"
Write-Host " .\deploy.ps1 bot-deploy - Deploy apenas do bot"
Write-Host " .\deploy.ps1 db-stop - Parar apenas banco de dados"
Write-Host " .\deploy.ps1 bot-stop - Parar apenas bot"
Write-Host " .\deploy.ps1 db-restart - Reiniciar apenas banco de dados"
Write-Host " .\deploy.ps1 bot-restart - Reiniciar apenas bot"
Write-Host ""
Write-Host "🛠️ Operações:" -ForegroundColor Cyan
Write-Host " .\deploy.ps1 status - Status dos containers"
Write-Host " .\deploy.ps1 backup - Backup do banco de dados"
Write-Host " .\deploy.ps1 clean - Limpeza completa"
Write-Host ""
Write-Host "📖 FLUXO RECOMENDADO:" -ForegroundColor Green
Write-Host " 1. .\deploy.ps1 db-init # Primeira vez"
Write-Host " 2. .\deploy.ps1 bot-deploy # Deploy inicial"
Write-Host " 3. .\deploy.ps1 bot-restart # Updates de código"
}
function Test-DockerRunning {
try {
docker ps | Out-Null
return $true
} catch {
Write-Host "❌ Docker não está rodando. Inicie o Docker Desktop primeiro!" -ForegroundColor Red
return $false
}
}
function Wait-ForPostgres {
param([string]$ContainerName)
Write-Host " Aguardando PostgreSQL ficar pronto..."
$timeout = 60
$elapsed = 0
while ($elapsed -lt $timeout) {
try {
$result = docker exec $ContainerName pg_isready -U lucy 2>$null
if ($LASTEXITCODE -eq 0) {
Write-Host "✅ PostgreSQL está pronto!" -ForegroundColor Green
return $true
}
} catch {}
Start-Sleep -Seconds 2
$elapsed += 2
Write-Host " Aguardando... ($elapsed/$timeout s)"
}
Write-Host "⚠️ Timeout - verifique se o PostgreSQL subiu" -ForegroundColor Yellow
return $false
}
# Verificar se Docker está rodando
if (-not (Test-DockerRunning)) {
exit 1
}
switch ($Command.ToLower()) {
"help" { Show-Help }
# Desenvolvimento
"dev" {
Write-Host "🔧 Iniciando ambiente de desenvolvimento..." -ForegroundColor Blue
docker-compose -f $COMPOSE_DEV up -d
}
"dev-logs" {
docker-compose -f $COMPOSE_DEV logs -f
}
"dev-stop" {
Write-Host "🛑 Parando ambiente de desenvolvimento..." -ForegroundColor Yellow
docker-compose -f $COMPOSE_DEV down
}
# Produção - Deploy completo
"prod" {
Write-Host "🚀 Deploy completo de produção..." -ForegroundColor Yellow
docker-compose -f $COMPOSE_PROD up -d --build
}
"prod-logs" {
docker-compose -f $COMPOSE_PROD logs -f bot
}
"prod-stop" {
Write-Host "🛑 Parando ambiente de produção..." -ForegroundColor Yellow
docker-compose -f $COMPOSE_PROD down
}
# Deploy separado
"db-init" {
Write-Host "🗄️ Inicializando banco de dados..." -ForegroundColor Magenta
Write-Host " Subindo PostgreSQL..."
docker-compose -f $COMPOSE_PROD up -d postgres
if (Wait-ForPostgres "lucy-postgres-prod") {
Write-Host " Executando migrações..."
docker-compose -f $COMPOSE_PROD run --rm bot npx prisma migrate deploy
Write-Host "✅ Banco de dados inicializado!" -ForegroundColor Green
}
}
"bot-deploy" {
Write-Host "🤖 Fazendo deploy do bot..." -ForegroundColor Magenta
# Verificar se PostgreSQL está rodando
$pgRunning = docker ps --format "table {{.Names}}" | Select-String "lucy-postgres-prod"
if (-not $pgRunning) {
Write-Host "❌ PostgreSQL não está rodando. Execute '.\deploy.ps1 db-init' primeiro!" -ForegroundColor Red
exit 1
}
Write-Host " Building imagem do bot..."
docker-compose -f $COMPOSE_PROD build bot
Write-Host " Subindo bot..."
docker-compose -f $COMPOSE_PROD up -d bot
Write-Host "✅ Bot deployado!" -ForegroundColor Green
}
"db-stop" {
Write-Host "🛑 Parando banco de dados..." -ForegroundColor Yellow
docker-compose -f $COMPOSE_PROD stop postgres
}
"bot-stop" {
Write-Host "🛑 Parando bot..." -ForegroundColor Yellow
docker-compose -f $COMPOSE_PROD stop bot
}
"db-restart" {
Write-Host "🔄 Reiniciando banco de dados..." -ForegroundColor Cyan
docker-compose -f $COMPOSE_PROD restart postgres
}
"bot-restart" {
Write-Host "🔄 Reiniciando bot..." -ForegroundColor Cyan
docker-compose -f $COMPOSE_PROD restart bot
}
# Utilitários
"status" {
Write-Host "📊 Status dos containers:" -ForegroundColor Cyan
Write-Host ""
Write-Host "🔧 Desenvolvimento:" -ForegroundColor Blue
try {
docker-compose -f $COMPOSE_DEV ps
} catch {
Write-Host " Não está rodando"
}
Write-Host ""
Write-Host "🚀 Produção:" -ForegroundColor Yellow
try {
docker-compose -f $COMPOSE_PROD ps
} catch {
Write-Host " Não está rodando"
}
}
"backup" {
Write-Host "💾 Fazendo backup do banco de dados..." -ForegroundColor Cyan
$backupFile = "backup-$(Get-Date -Format 'yyyyMMdd_HHmmss').sql"
$pgProd = docker ps --format "table {{.Names}}" | Select-String "lucy-postgres-prod"
$pgDev = docker ps --format "table {{.Names}}" | Select-String "lucy-postgres"
if ($pgProd) {
Write-Host " Backup de produção..."
docker exec lucy-postgres-prod pg_dump -U lucy lucydb > $backupFile
} elseif ($pgDev) {
Write-Host " Backup de desenvolvimento..."
docker exec lucy-postgres pg_dump -U lucy lucydb > $backupFile
} else {
Write-Host "❌ PostgreSQL não está rodando" -ForegroundColor Red
exit 1
}
Write-Host "✅ Backup salvo em: $backupFile" -ForegroundColor Green
}
"clean" {
Write-Host "🧹 Limpeza completa..." -ForegroundColor Red
docker-compose -f $COMPOSE_DEV down -v --remove-orphans 2>$null
docker-compose -f $COMPOSE_PROD down -v --remove-orphans 2>$null
docker system prune -f
docker volume prune -f
Write-Host "✅ Limpeza concluída!" -ForegroundColor Green
}
default {
Write-Host "❌ Comando não reconhecido: $Command" -ForegroundColor Red
Write-Host "Use '.\deploy.ps1 help' para ver comandos disponíveis"
exit 1
}
}