smoonb 0.0.47 → 0.0.49
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +339 -87
- package/bin/smoonb.js +2 -2
- package/package.json +1 -1
- package/src/commands/backup/index.js +316 -0
- package/src/commands/backup/steps/00-docker-validation.js +24 -0
- package/src/commands/backup/steps/01-database.js +72 -0
- package/src/commands/backup/steps/02-database-separated.js +82 -0
- package/src/commands/backup/steps/03-database-settings.js +178 -0
- package/src/commands/backup/steps/04-auth-settings.js +43 -0
- package/src/commands/backup/steps/05-realtime-settings.js +26 -0
- package/src/commands/backup/steps/06-storage.js +90 -0
- package/src/commands/backup/steps/07-custom-roles.js +39 -0
- package/src/commands/backup/steps/08-edge-functions.js +153 -0
- package/src/commands/backup/steps/09-supabase-temp.js +42 -0
- package/src/commands/backup/steps/10-migrations.js +74 -0
- package/src/commands/backup/utils.js +69 -0
- package/src/commands/check.js +0 -1
- package/src/commands/config.js +0 -1
- package/src/commands/functions.js +1 -1
- package/src/commands/restore/index.js +206 -0
- package/src/commands/restore/steps/00-backup-selection.js +38 -0
- package/src/commands/restore/steps/01-components-selection.js +71 -0
- package/src/commands/restore/steps/02-confirmation.js +14 -0
- package/src/commands/restore/steps/03-database.js +81 -0
- package/src/commands/restore/steps/04-edge-functions.js +112 -0
- package/src/commands/restore/steps/05-auth-settings.js +51 -0
- package/src/commands/restore/steps/06-storage.js +58 -0
- package/src/commands/restore/steps/07-database-settings.js +65 -0
- package/src/commands/restore/steps/08-realtime-settings.js +50 -0
- package/src/commands/restore/utils.js +139 -0
- package/src/index.js +3 -3
- package/src/interactive/envMapper.js +38 -14
- package/src/utils/cli.js +1 -1
- package/src/utils/config.js +1 -3
- package/src/utils/docker.js +3 -3
- package/src/utils/env.js +2 -3
- package/src/utils/envMap.js +1 -1
- package/src/utils/fsExtra.js +98 -0
- package/src/utils/fsx.js +2 -2
- package/src/utils/prompt.js +34 -0
- package/src/utils/realtime-settings.js +2 -2
- package/src/utils/supabase.js +10 -10
- package/src/utils/supabaseLink.js +82 -0
- package/src/utils/validation.js +2 -2
- package/src/commands/backup.js +0 -939
- package/src/commands/restore.js +0 -786
package/README.md
CHANGED
|
@@ -16,12 +16,16 @@
|
|
|
16
16
|
|
|
17
17
|
O **smoonb** resolve o problema das ferramentas existentes que fazem backup apenas da database PostgreSQL, ignorando componentes críticos do Supabase:
|
|
18
18
|
|
|
19
|
-
- ✅ **Database PostgreSQL** (
|
|
20
|
-
- ✅ **
|
|
21
|
-
- ✅ **
|
|
22
|
-
- ✅ **
|
|
23
|
-
- ✅ **
|
|
24
|
-
- ✅ **
|
|
19
|
+
- ✅ **Database PostgreSQL** (backup completo via `pg_dumpall`, idêntico ao Dashboard)
|
|
20
|
+
- ✅ **Database SQL Separado** (schema, data, roles em arquivos separados para troubleshooting)
|
|
21
|
+
- ✅ **Database Extensions and Settings** (extensões PostgreSQL e configurações)
|
|
22
|
+
- ✅ **Edge Functions** (download automático do servidor)
|
|
23
|
+
- ✅ **Auth Settings** (configurações de autenticação via Management API)
|
|
24
|
+
- ✅ **Storage Buckets** (metadados e configurações via Management API)
|
|
25
|
+
- ✅ **Realtime Settings** (publicações e configurações capturadas interativamente)
|
|
26
|
+
- ✅ **Custom Roles** (roles personalizados do PostgreSQL)
|
|
27
|
+
- ✅ **Supabase .temp** (arquivos temporários do Supabase CLI)
|
|
28
|
+
- ✅ **Migrations** (todas as migrations do projeto via `supabase migration fetch`)
|
|
25
29
|
|
|
26
30
|
## 🚀 Instalação
|
|
27
31
|
|
|
@@ -46,7 +50,7 @@ npm install -g smoonb # ← Isso será bloqueado!
|
|
|
46
50
|
|
|
47
51
|
## 📋 Pré-requisitos
|
|
48
52
|
|
|
49
|
-
### 1. Docker Desktop
|
|
53
|
+
### 1. Docker Desktop (OBRIGATÓRIO)
|
|
50
54
|
```bash
|
|
51
55
|
# Instalar Docker Desktop
|
|
52
56
|
# Windows/macOS: https://docs.docker.com/desktop/install/
|
|
@@ -57,87 +61,175 @@ docker --version
|
|
|
57
61
|
docker ps
|
|
58
62
|
```
|
|
59
63
|
|
|
64
|
+
**⚠️ IMPORTANTE:** O Docker é necessário para:
|
|
65
|
+
- Backup da database via `pg_dumpall` (compatível com Dashboard do Supabase)
|
|
66
|
+
- Compressão de arquivos `.backup.gz`
|
|
67
|
+
- Restauração de backups `.backup` e `.backup.gz`
|
|
68
|
+
|
|
60
69
|
### 2. Supabase CLI
|
|
61
70
|
```bash
|
|
62
71
|
npm install -g supabase
|
|
63
72
|
```
|
|
64
73
|
|
|
74
|
+
### 3. Personal Access Token do Supabase
|
|
75
|
+
É necessário obter um token de acesso pessoal do Supabase para usar a Management API:
|
|
76
|
+
|
|
77
|
+
1. Acesse: https://supabase.com/dashboard/account/tokens
|
|
78
|
+
2. Clique em "Generate new token"
|
|
79
|
+
3. Copie o token (formato: `sbp_...`)
|
|
80
|
+
4. Adicione ao `.env.local` como `SUPABASE_ACCESS_TOKEN`
|
|
81
|
+
|
|
65
82
|
## ⚙️ Configuração
|
|
66
83
|
|
|
67
|
-
###
|
|
84
|
+
### Método Moderno: `.env.local` (RECOMENDADO)
|
|
85
|
+
|
|
86
|
+
O **smoonb** agora usa `.env.local` para configuração, seguindo o padrão da indústria. Isso torna o processo mais simples e integrado ao seu fluxo de trabalho.
|
|
87
|
+
|
|
88
|
+
#### 1. Criar ou editar `.env.local` na raiz do projeto
|
|
89
|
+
|
|
68
90
|
```bash
|
|
69
|
-
|
|
91
|
+
# Criar arquivo .env.local
|
|
92
|
+
touch .env.local
|
|
70
93
|
```
|
|
71
94
|
|
|
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
|
-
|
|
95
|
+
#### 2. Adicionar as variáveis de ambiente necessárias
|
|
96
|
+
|
|
97
|
+
```env
|
|
98
|
+
# URLs e Chaves do Supabase
|
|
99
|
+
NEXT_PUBLIC_SUPABASE_URL=https://seu-project-id.supabase.co
|
|
100
|
+
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
|
|
101
|
+
SUPABASE_SERVICE_ROLE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
|
|
102
|
+
|
|
103
|
+
# Database Connection
|
|
104
|
+
SUPABASE_DB_URL=postgresql://postgres:[senha]@db.seu-project-id.supabase.co:5432/postgres
|
|
105
|
+
|
|
106
|
+
# Identificação do Projeto
|
|
107
|
+
SUPABASE_PROJECT_ID=seu-project-id
|
|
108
|
+
|
|
109
|
+
# Personal Access Token (OBRIGATÓRIO para Management API)
|
|
110
|
+
SUPABASE_ACCESS_TOKEN=sbp_1234567890abcdef1234567890abcdef
|
|
111
|
+
|
|
112
|
+
# Diretório de Backups (opcional, padrão: ./backups)
|
|
113
|
+
SMOONB_OUTPUT_DIR=./backups
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
#### 3. Mapeamento Interativo
|
|
117
|
+
|
|
118
|
+
Ao executar `backup` ou `restore` pela primeira vez, o **smoonb** irá:
|
|
119
|
+
|
|
120
|
+
1. **Ler** seu `.env.local` atual
|
|
121
|
+
2. **Identificar** as chaves que você já tem
|
|
122
|
+
3. **Perguntar interativamente** quais chaves correspondem às esperadas (se os nomes forem diferentes)
|
|
123
|
+
4. **Adicionar** chaves faltantes se necessário
|
|
124
|
+
5. **Criar backup** automático do `.env.local` antes de qualquer alteração
|
|
125
|
+
6. **Salvar mapeamento** para futuras execuções
|
|
126
|
+
|
|
127
|
+
**Exemplo de mapeamento:**
|
|
128
|
+
```
|
|
129
|
+
🔧 Mapeando variável: NEXT_PUBLIC_SUPABASE_URL
|
|
130
|
+
Valor atual: https://abc123.supabase.co
|
|
131
|
+
Este é o valor correto do projeto alvo? (S/n): S
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### Método Legado: `.smoonbrc` (DEPRECADO)
|
|
135
|
+
|
|
136
|
+
⚠️ **Nota:** O arquivo `.smoonbrc` ainda é suportado para compatibilidade, mas é **recomendado migrar para `.env.local`**.
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
npx smoonb config --init
|
|
140
|
+
```
|
|
102
141
|
|
|
103
142
|
## 🎯 Uso
|
|
104
143
|
|
|
105
144
|
### Backup Completo
|
|
145
|
+
|
|
106
146
|
```bash
|
|
107
147
|
npx smoonb backup
|
|
108
148
|
```
|
|
109
149
|
|
|
150
|
+
**Fluxo interativo do backup:**
|
|
151
|
+
|
|
152
|
+
1. **Validação Docker** - Verifica se o Docker está rodando
|
|
153
|
+
2. **Consentimento** - Pede permissão para ler/escrever `.env.local`
|
|
154
|
+
3. **Mapeamento de Variáveis** - Mapeia suas variáveis de ambiente (primeira vez)
|
|
155
|
+
4. **Backup do .env.local** - Cria backup automático antes de alterações
|
|
156
|
+
5. **Seleção de Componentes** - Pergunta quais componentes incluir:
|
|
157
|
+
- ⚡ Edge Functions (explicação sobre reset de link e download)
|
|
158
|
+
- 📦 Storage (explicação sobre metadados)
|
|
159
|
+
- 🔐 Auth Settings (explicação sobre configurações)
|
|
160
|
+
- 🔄 Realtime Settings (explicação sobre captura interativa)
|
|
161
|
+
- 🗑️ Opções de limpeza (functions, .temp, migrations após backup)
|
|
162
|
+
6. **Resumo de Configurações** - Mostra tudo que será feito
|
|
163
|
+
7. **Confirmação Final** - Confirma antes de iniciar
|
|
164
|
+
8. **Execução das Etapas:**
|
|
165
|
+
- 📊 1/11 - Backup Database via `pg_dumpall` (Docker)
|
|
166
|
+
- 📊 2/11 - Backup Database SQL separado (schema, data, roles)
|
|
167
|
+
- 🔧 3/11 - Backup Database Extensions and Settings
|
|
168
|
+
- 🔐 4/11 - Backup Auth Settings (se selecionado)
|
|
169
|
+
- 🔄 5/11 - Backup Realtime Settings (se selecionado)
|
|
170
|
+
- 📦 6/11 - Backup Storage (se selecionado)
|
|
171
|
+
- 👥 7/11 - Backup Custom Roles
|
|
172
|
+
- ⚡ 8/11 - Backup Edge Functions (se selecionado)
|
|
173
|
+
- 📁 9/11 - Backup Supabase .temp
|
|
174
|
+
- 📋 10/11 - Backup Migrations
|
|
175
|
+
|
|
110
176
|
**Resultado:**
|
|
111
177
|
```
|
|
112
|
-
backups/backup-
|
|
113
|
-
├── backup-manifest.json
|
|
114
|
-
├──
|
|
115
|
-
├── schema.sql
|
|
116
|
-
├── data.sql
|
|
117
|
-
├──
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
└──
|
|
124
|
-
|
|
178
|
+
backups/backup-2025-10-31-09-37-54/
|
|
179
|
+
├── backup-manifest.json # Manifesto com metadados
|
|
180
|
+
├── db_cluster-31-10-2025@09-38-57.backup.gz # Backup completo (Dashboard compatible)
|
|
181
|
+
├── schema.sql # Schema do banco
|
|
182
|
+
├── data.sql # Dados
|
|
183
|
+
├── roles.sql # Roles do PostgreSQL
|
|
184
|
+
├── database-settings-*.json # Extensões e configurações
|
|
185
|
+
├── auth-settings.json # Configurações de Auth
|
|
186
|
+
├── realtime-settings.json # Configurações de Realtime
|
|
187
|
+
├── storage/ # Metadados de Storage
|
|
188
|
+
├── edge-functions/ # Edge Functions baixadas
|
|
189
|
+
│ └── [nome-da-function]/
|
|
190
|
+
├── supabase-temp/ # Arquivos .temp do Supabase CLI
|
|
191
|
+
├── migrations/ # Todas as migrations
|
|
192
|
+
└── env/
|
|
193
|
+
├── .env.local # Backup do .env.local
|
|
194
|
+
└── env-map.json # Mapeamento de variáveis
|
|
125
195
|
```
|
|
126
196
|
|
|
127
197
|
### Restauração Interativa
|
|
198
|
+
|
|
128
199
|
```bash
|
|
129
200
|
npx smoonb restore
|
|
130
201
|
```
|
|
131
202
|
|
|
132
|
-
**
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
203
|
+
**Fluxo interativo do restore:**
|
|
204
|
+
|
|
205
|
+
1. **Validação Docker** - Verifica se o Docker está rodando
|
|
206
|
+
2. **Consentimento** - Pede permissão para ler/escrever `.env.local`
|
|
207
|
+
3. **Mapeamento de Variáveis** - Mapeia variáveis para o projeto de destino
|
|
208
|
+
4. **Backup do .env.local** - Cria backup automático
|
|
209
|
+
5. **Seleção de Backup** - Lista e permite escolher qual backup restaurar
|
|
210
|
+
6. **Seleção de Componentes** - Pergunta quais componentes restaurar:
|
|
211
|
+
- 📊 Database (sempre disponível)
|
|
212
|
+
- ⚡ Edge Functions (se disponível no backup)
|
|
213
|
+
- 🔐 Auth Settings (se disponível no backup)
|
|
214
|
+
- 📦 Storage (se disponível no backup)
|
|
215
|
+
- 🔧 Database Extensions and Settings (se disponível no backup)
|
|
216
|
+
- 🔄 Realtime Settings (se disponível no backup)
|
|
217
|
+
7. **Resumo Detalhado** - Mostra backup selecionado, projeto destino e componentes
|
|
218
|
+
8. **Confirmação Final** - Confirma antes de iniciar
|
|
219
|
+
9. **Execução da Restauração:**
|
|
220
|
+
- 📊 Database - Restaura via `psql` (suporta `.backup.gz` e `.backup`)
|
|
221
|
+
- ⚡ Edge Functions - Copia e faz deploy no projeto destino
|
|
222
|
+
- 🔐 Auth Settings - Exibe configurações para aplicação manual
|
|
223
|
+
- 📦 Storage - Exibe informações para migração manual
|
|
224
|
+
- 🔧 Database Settings - Restaura extensões e configurações via SQL
|
|
225
|
+
- 🔄 Realtime Settings - Exibe configurações para aplicação manual
|
|
226
|
+
|
|
227
|
+
**Formato de arquivos suportados:**
|
|
228
|
+
- ✅ `.backup.gz` (compactado) - Descompacta automaticamente antes de restaurar
|
|
229
|
+
- ✅ `.backup` (descompactado) - Restaura diretamente
|
|
139
230
|
|
|
140
231
|
### Verificação Pós-Restore
|
|
232
|
+
|
|
141
233
|
```bash
|
|
142
234
|
npx smoonb check
|
|
143
235
|
```
|
|
@@ -151,6 +243,7 @@ npx smoonb check
|
|
|
151
243
|
- ✅ Buckets de Storage
|
|
152
244
|
|
|
153
245
|
### Edge Functions
|
|
246
|
+
|
|
154
247
|
```bash
|
|
155
248
|
# Listar functions
|
|
156
249
|
npx smoonb functions list
|
|
@@ -163,84 +256,243 @@ npx smoonb functions push
|
|
|
163
256
|
|
|
164
257
|
| Comando | Descrição |
|
|
165
258
|
|---------|-----------|
|
|
166
|
-
| `npx smoonb backup` | Backup completo usando
|
|
167
|
-
| `npx smoonb restore` | Restauração interativa usando psql |
|
|
168
|
-
| `npx smoonb check` | Verificação de integridade |
|
|
259
|
+
| `npx smoonb backup` | Backup completo interativo usando Docker |
|
|
260
|
+
| `npx smoonb restore` | Restauração interativa usando psql (Docker) |
|
|
261
|
+
| `npx smoonb check` | Verificação de integridade pós-restore |
|
|
169
262
|
| `npx smoonb functions` | Gerenciar Edge Functions |
|
|
170
|
-
| `npx smoonb config` | Configurar credenciais |
|
|
263
|
+
| `npx smoonb config` | Configurar credenciais (legado) |
|
|
171
264
|
|
|
172
265
|
## 🏗️ Arquitetura Técnica
|
|
173
266
|
|
|
267
|
+
### Estrutura Modular
|
|
268
|
+
|
|
269
|
+
O código foi refatorado para uma **arquitetura modular** com etapas independentes:
|
|
270
|
+
|
|
271
|
+
#### Backup (`src/commands/backup/`)
|
|
272
|
+
```
|
|
273
|
+
backup/
|
|
274
|
+
├── index.js # Orquestrador principal
|
|
275
|
+
├── utils.js # Utilitários específicos
|
|
276
|
+
└── steps/
|
|
277
|
+
├── 00-docker-validation.js # Validação Docker
|
|
278
|
+
├── 01-database.js # Backup via pg_dumpall
|
|
279
|
+
├── 02-database-separated.js # SQL separado
|
|
280
|
+
├── 03-database-settings.js # Extensões e settings
|
|
281
|
+
├── 04-auth-settings.js # Auth via API
|
|
282
|
+
├── 05-realtime-settings.js # Realtime interativo
|
|
283
|
+
├── 06-storage.js # Storage via API
|
|
284
|
+
├── 07-custom-roles.js # Custom roles
|
|
285
|
+
├── 08-edge-functions.js # Edge Functions
|
|
286
|
+
├── 09-supabase-temp.js # Supabase .temp
|
|
287
|
+
└── 10-migrations.js # Migrations
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
#### Restore (`src/commands/restore/`)
|
|
291
|
+
```
|
|
292
|
+
restore/
|
|
293
|
+
├── index.js # Orquestrador principal
|
|
294
|
+
├── utils.js # Utilitários específicos
|
|
295
|
+
└── steps/
|
|
296
|
+
├── 00-backup-selection.js # Seleção de backup
|
|
297
|
+
├── 01-components-selection.js # Seleção de componentes
|
|
298
|
+
├── 02-confirmation.js # Confirmação (legacy)
|
|
299
|
+
├── 03-database.js # Restauração database
|
|
300
|
+
├── 04-edge-functions.js # Deploy Edge Functions
|
|
301
|
+
├── 05-auth-settings.js # Exibe Auth settings
|
|
302
|
+
├── 06-storage.js # Exibe Storage info
|
|
303
|
+
├── 07-database-settings.js # Restaura settings
|
|
304
|
+
└── 08-realtime-settings.js # Exibe Realtime settings
|
|
305
|
+
```
|
|
306
|
+
|
|
174
307
|
### Backup Strategy
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
- **
|
|
308
|
+
|
|
309
|
+
#### Database
|
|
310
|
+
- **Backup Principal**: `pg_dumpall` via Docker (idêntico ao Dashboard)
|
|
311
|
+
- Arquivo: `db_cluster-XX-XX-XXXX@XX-XX-XX.backup.gz`
|
|
312
|
+
- Compatível com restauração via Dashboard do Supabase
|
|
313
|
+
- **Backup Separado**: SQL em arquivos distintos via Supabase CLI
|
|
314
|
+
- `schema.sql` - Estrutura das tabelas
|
|
315
|
+
- `data.sql` - Dados (COPY statements)
|
|
316
|
+
- `roles.sql` - Roles e permissões
|
|
317
|
+
|
|
318
|
+
#### Edge Functions
|
|
319
|
+
- **Download Automático**: Via Supabase CLI `supabase functions download`
|
|
320
|
+
- **Reset de Link**: Garante link limpo com o projeto antes do download
|
|
321
|
+
- **Backup Completo**: Código completo de cada function
|
|
322
|
+
|
|
323
|
+
#### Migrations
|
|
324
|
+
- **Download Automático**: Via `supabase migration fetch`
|
|
325
|
+
- **Reset de Link**: Garante link limpo com o projeto
|
|
326
|
+
- **Backup Completo**: Todas as migrations do servidor
|
|
327
|
+
|
|
328
|
+
#### Auth, Storage, Realtime
|
|
329
|
+
- **Management API**: Usa Personal Access Token
|
|
330
|
+
- **JSON Export**: Configurações exportadas como JSON
|
|
331
|
+
- **Manual para alguns**: Alguns settings precisam ser aplicados manualmente por segurança
|
|
178
332
|
|
|
179
333
|
### Restore Strategy
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
- **
|
|
334
|
+
|
|
335
|
+
#### Database
|
|
336
|
+
- **Suporte a Formatos**:
|
|
337
|
+
- `.backup.gz` - Descompacta automaticamente via Docker
|
|
338
|
+
- `.backup` - Restaura diretamente via `psql` (Docker)
|
|
339
|
+
- **Clean Restore**: Pode sobrescrever dados existentes (com confirmação)
|
|
340
|
+
|
|
341
|
+
#### Edge Functions
|
|
342
|
+
- **Clean Deploy**: Limpa `supabase/functions` antes do deploy
|
|
343
|
+
- **Reset de Link**: Garante link correto com projeto destino
|
|
344
|
+
- **Deploy Automático**: Usa `supabase functions deploy`
|
|
345
|
+
|
|
346
|
+
#### Outros Componentes
|
|
347
|
+
- **Database Settings**: Restaura via SQL
|
|
348
|
+
- **Auth/Storage/Realtime**: Exibe informações para configuração manual no Dashboard
|
|
183
349
|
|
|
184
350
|
### Multiplataforma
|
|
351
|
+
|
|
185
352
|
- **Windows/macOS/Linux**: Detecção automática de binários
|
|
186
|
-
- **Cross-platform**: Usa `fs.promises.cp`, `path.join`,
|
|
187
|
-
- **
|
|
353
|
+
- **Cross-platform**: Usa `fs.promises.cp`, `path.join`, Docker
|
|
354
|
+
- **Docker para Tudo**: Backup, restore e compressão via Docker (garante consistência)
|
|
188
355
|
|
|
189
356
|
## 📊 Fluxo Recomendado
|
|
190
357
|
|
|
191
358
|
```bash
|
|
192
|
-
# 1.
|
|
359
|
+
# 1. Configurar .env.local (primeira vez)
|
|
360
|
+
# Edite .env.local com suas credenciais do projeto origem
|
|
361
|
+
|
|
362
|
+
# 2. Backup do projeto origem
|
|
193
363
|
npx smoonb backup
|
|
364
|
+
# - Mapeia variáveis interativamente (primeira vez)
|
|
365
|
+
# - Seleciona componentes para backup
|
|
366
|
+
# - Executa backup completo
|
|
194
367
|
|
|
195
|
-
#
|
|
368
|
+
# 3. Criar novo projeto Supabase
|
|
196
369
|
# (via Dashboard ou Supabase CLI)
|
|
197
370
|
|
|
198
|
-
#
|
|
199
|
-
|
|
371
|
+
# 4. Editar .env.local com credenciais do novo projeto
|
|
372
|
+
# Atualize as variáveis para apontar ao projeto destino
|
|
200
373
|
|
|
201
|
-
#
|
|
374
|
+
# 5. Restaurar backup (modo interativo)
|
|
202
375
|
npx smoonb restore
|
|
376
|
+
# - Seleciona backup desejado
|
|
377
|
+
# - Seleciona componentes para restaurar
|
|
378
|
+
# - Executa restauração
|
|
203
379
|
|
|
204
|
-
#
|
|
380
|
+
# 6. Verificar integridade
|
|
205
381
|
npx smoonb check
|
|
206
382
|
|
|
207
|
-
#
|
|
208
|
-
|
|
383
|
+
# 7. Aplicar configurações manuais
|
|
384
|
+
# - Auth Settings: Dashboard → Authentication → Settings
|
|
385
|
+
# - Storage: Dashboard → Storage → Buckets
|
|
386
|
+
# - Realtime: Dashboard → Database → Replication
|
|
209
387
|
```
|
|
210
388
|
|
|
389
|
+
## 🎨 Experiência do Usuário
|
|
390
|
+
|
|
391
|
+
### Interface em Português
|
|
392
|
+
|
|
393
|
+
Todas as interações são em **Português do Brasil**:
|
|
394
|
+
- Perguntas claras e diretas
|
|
395
|
+
- Explicações antes de cada processo
|
|
396
|
+
- Resumos detalhados antes de confirmar
|
|
397
|
+
- Confirmações com `(S/n)` ou `(s/N)` em português
|
|
398
|
+
|
|
399
|
+
### Mapeamento Inteligente de Variáveis
|
|
400
|
+
|
|
401
|
+
- **Detecção Automática**: Se a chave já existe com o nome esperado, pula a seleção
|
|
402
|
+
- **Opção de Adicionar**: Permite adicionar novas chaves se não existirem
|
|
403
|
+
- **Validação de Valores**: Confirma valores antes de salvar
|
|
404
|
+
- **Backup Automático**: Sempre cria backup do `.env.local` antes de alterações
|
|
405
|
+
|
|
406
|
+
### Processo Guiado
|
|
407
|
+
|
|
408
|
+
- **Validação Prévia**: Verifica Docker antes de começar
|
|
409
|
+
- **Explicações Contextuais**: Explica cada processo antes de perguntar
|
|
410
|
+
- **Resumo Final**: Mostra tudo que será feito antes de executar
|
|
411
|
+
- **Feedback Visual**: Cores e ícones para melhor experiência
|
|
412
|
+
|
|
211
413
|
## 🐛 Troubleshooting
|
|
212
414
|
|
|
415
|
+
### Docker não encontrado ou não está rodando
|
|
416
|
+
```bash
|
|
417
|
+
# Verificar se Docker está instalado
|
|
418
|
+
docker --version
|
|
419
|
+
|
|
420
|
+
# Verificar se Docker Desktop está rodando
|
|
421
|
+
docker ps
|
|
422
|
+
|
|
423
|
+
# Se não estiver, iniciar Docker Desktop
|
|
424
|
+
# Windows/macOS: Abrir aplicativo Docker Desktop
|
|
425
|
+
# Linux: sudo systemctl start docker
|
|
426
|
+
```
|
|
427
|
+
|
|
213
428
|
### Supabase CLI não encontrado
|
|
214
429
|
```bash
|
|
215
430
|
npm install -g supabase
|
|
216
431
|
```
|
|
217
432
|
|
|
218
|
-
###
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
433
|
+
### Personal Access Token inválido ou ausente
|
|
434
|
+
|
|
435
|
+
1. Verificar se `SUPABASE_ACCESS_TOKEN` está no `.env.local`
|
|
436
|
+
2. Gerar novo token: https://supabase.com/dashboard/account/tokens
|
|
437
|
+
3. Atualizar `.env.local` com o novo token
|
|
222
438
|
|
|
223
439
|
### Database URL incorreta
|
|
224
440
|
- Verificar senha na URL de conexão
|
|
225
|
-
- Usar Connection string do Dashboard Supabase
|
|
441
|
+
- Usar Connection string do Dashboard Supabase (Settings → Database)
|
|
226
442
|
- Testar conexão: `psql "sua-database-url" -c "SELECT 1"`
|
|
227
443
|
|
|
444
|
+
### Arquivo .backup.gz não pode ser restaurado
|
|
445
|
+
|
|
446
|
+
O smoonb suporta automaticamente:
|
|
447
|
+
- ✅ `.backup.gz` - Descompacta via Docker antes de restaurar
|
|
448
|
+
- ✅ `.backup` - Restaura diretamente
|
|
449
|
+
|
|
450
|
+
Se houver problemas:
|
|
451
|
+
1. Verificar se Docker está rodando
|
|
452
|
+
2. Verificar permissões do arquivo
|
|
453
|
+
3. Verificar espaço em disco
|
|
454
|
+
|
|
455
|
+
### Erro ao baixar Edge Functions
|
|
456
|
+
|
|
457
|
+
1. Verificar se `SUPABASE_ACCESS_TOKEN` está configurado
|
|
458
|
+
2. Verificar se o projeto está linkado: `supabase link`
|
|
459
|
+
3. Verificar se as functions existem no servidor
|
|
460
|
+
|
|
461
|
+
### Erro ao baixar Migrations
|
|
462
|
+
|
|
463
|
+
1. Verificar se `SUPABASE_ACCESS_TOKEN` está configurado
|
|
464
|
+
2. Verificar se o projeto está linkado: `supabase link`
|
|
465
|
+
3. Verificar se há migrations no servidor
|
|
466
|
+
|
|
467
|
+
## 🔒 Segurança
|
|
468
|
+
|
|
469
|
+
- **Backup Automático**: Sempre cria backup do `.env.local` antes de alterações
|
|
470
|
+
- **Mapeamento Local**: Mapeamento de variáveis salvo apenas localmente
|
|
471
|
+
- **Sem Dados Sensíveis**: Nenhum dado sensível é enviado para fora do seu ambiente
|
|
472
|
+
- **Docker Isolado**: Operações de database via Docker (isolamento)
|
|
473
|
+
|
|
228
474
|
## 📝 Licença
|
|
229
475
|
|
|
230
|
-
**Versões 0.x.x**: Uso gratuito (experimental)
|
|
476
|
+
**Versões 0.x.x**: Uso gratuito (experimental)
|
|
231
477
|
**Versões 1.0.0+**: Licença comercial (anúncio com 90 dias de antecedência)
|
|
232
478
|
|
|
479
|
+
Veja [LICENSE.md](LICENSE.md) para mais detalhes.
|
|
480
|
+
|
|
233
481
|
## 🤝 Contribuição
|
|
234
482
|
|
|
235
483
|
Contribuições são bem-vindas! Este é um projeto experimental e precisamos de feedback da comunidade.
|
|
236
484
|
|
|
485
|
+
## 📚 Versão
|
|
486
|
+
|
|
487
|
+
**Versão Atual:** 0.0.48
|
|
488
|
+
|
|
237
489
|
## ☕ Apoie o Projeto
|
|
238
490
|
|
|
239
|
-
Se este projeto for útil para você, considere comprar um café:
|
|
491
|
+
Se este projeto for útil para você, considere comprar um café:
|
|
240
492
|
[Compre um café](https://pag.ae/7Yj8QjQjQ)
|
|
241
493
|
|
|
242
494
|
---
|
|
243
495
|
|
|
244
496
|
**Desenvolvido por:** Goalmoon Tecnologia LTDA
|
|
245
497
|
**Website:** https://goalmoon.com
|
|
246
|
-
**GitHub:** https://github.com/almmello/smoonb
|
|
498
|
+
**GitHub:** https://github.com/almmello/smoonb
|
package/bin/smoonb.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
1
|
+
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* smoonb - Complete Supabase backup and migration tool
|
|
@@ -112,7 +112,7 @@ process.on('uncaughtException', (error) => {
|
|
|
112
112
|
process.exit(1);
|
|
113
113
|
});
|
|
114
114
|
|
|
115
|
-
process.on('unhandledRejection', (reason,
|
|
115
|
+
process.on('unhandledRejection', (reason, _promise) => {
|
|
116
116
|
console.error(chalk.red.bold('❌ Promise rejeitada não tratada:'), reason);
|
|
117
117
|
process.exit(1);
|
|
118
118
|
});
|