smoonb 1.0.6 → 1.0.8
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/CHANGELOG.md +44 -0
- package/README.md +679 -644
- package/README.pt-BR.md +679 -644
- package/package.json +68 -66
- package/src/commands/backup/index.js +8 -2
- package/src/commands/backup/steps/03-database-separated.js +161 -114
- package/src/commands/backup/steps/06-realtime-settings.js +19 -33
- package/src/commands/backup/steps/07-storage.js +7 -12
- package/src/commands/backup/steps/09-edge-functions.js +76 -202
- package/src/commands/restore/auth-fields.json +237 -0
- package/src/commands/restore/dump.js +284 -0
- package/src/commands/restore/index.js +4 -126
- package/src/commands/restore/management.js +74 -0
- package/src/commands/restore/pg.js +83 -0
- package/src/commands/restore/runner.js +117 -0
- package/src/commands/restore/steps/03-database.js +18 -84
- package/src/commands/restore/steps/04-edge-functions.js +95 -122
- package/src/commands/restore/steps/05-auth-settings.js +26 -54
- package/src/commands/restore/steps/06-storage.js +203 -584
- package/src/commands/restore/steps/07-database-settings.js +87 -69
- package/src/commands/restore/steps/08-realtime-settings.js +61 -53
- package/src/i18n/locales/en.json +800 -796
- package/src/i18n/locales/pt-BR.json +799 -795
- package/src/utils/pg-dump-diagnostics.js +64 -0
- package/src/utils/supabaseCli.js +32 -0
package/README.pt-BR.md
CHANGED
|
@@ -1,644 +1,679 @@
|
|
|
1
|
-
# Supa Moonbase (smoonb)
|
|
2
|
-
|
|
3
|
-
**Ferramenta completa de backup e migração do Supabase**
|
|
4
|
-
|
|
5
|
-
Backup e restauração: completo e simples, como deveria ser
|
|
6
|
-
|
|
7
|
-
> **Produto comercial.** É necessário ter **licença ativa** e **assinatura válida** (ou estar em período de trial) para usar o smoonb. [www.smoonb.com/#price](https://www.smoonb.com/#price). O uso é regido pelos [Termos de Serviço](https://www.smoonb.com/terms) e pela [Política de Privacidade](https://www.smoonb.com/privacy). Não assumimos responsabilidade por danos causados pelo smoonb; os avisos legais abaixo permanecem válidos.
|
|
8
|
-
|
|
9
|
-
**Leia em outro idioma:** [English](README.md)
|
|
10
|
-
|
|
11
|
-
**Desenvolvido por:** Goalmoon Tecnologia LTDA
|
|
12
|
-
**Website:** https://www.smoonb.com
|
|
13
|
-
**GitHub:** https://github.com/almmello/smoonb
|
|
14
|
-
|
|
15
|
-
## 🎯 Objetivo
|
|
16
|
-
|
|
17
|
-
O **smoonb** resolve o problema das ferramentas existentes que fazem backup apenas da database PostgreSQL, ignorando componentes críticos do Supabase.
|
|
18
|
-
|
|
19
|
-
## 📦 Componentes de Backup
|
|
20
|
-
|
|
21
|
-
O smoonb faz backup completo de todos os componentes do seu projeto Supabase:
|
|
22
|
-
|
|
23
|
-
- ✅ **Database PostgreSQL** (backup completo via `pg_dumpall` + SQL separados, idêntico ao Dashboard)
|
|
24
|
-
- ✅ **Database Extensions and Settings** (extensões PostgreSQL e configurações)
|
|
25
|
-
- ✅ **Custom Roles** (roles personalizados do PostgreSQL)
|
|
26
|
-
- ✅ **Edge Functions** (download automático do servidor)
|
|
27
|
-
- ✅ **Auth Settings** (configurações de autenticação via Management API)
|
|
28
|
-
- ✅ **Storage Buckets** (backup completo: metadados, configurações e todos os arquivos via Management API + Supabase Client, cria ZIP no padrão do Dashboard)
|
|
29
|
-
- ✅ **Realtime Settings** (7 parâmetros capturados interativamente)
|
|
30
|
-
- ✅ **Supabase .temp** (arquivos temporários do Supabase CLI)
|
|
31
|
-
- ✅ **Migrations** (todas as migrations do projeto via `supabase migration fetch`)
|
|
32
|
-
|
|
33
|
-
## ⚠️ Universal Disclaimer / Aviso Legal Universal
|
|
34
|
-
|
|
35
|
-
Ao continuar, você reconhece e concorda que o Supa Moonbase (smoonb) é fornecido "NO ESTADO EM QUE SE ENCONTRA" ("AS IS") e "CONFORME DISPONIBILIDADE" ("AS AVAILABLE"), sem garantias de qualquer natureza—expressas, implícitas ou legais—incluindo, sem limitação, garantias de comercialização, adequação a um fim específico e não violação, na máxima extensão permitida pela lei aplicável. Operações de backup e restauração envolvem riscos inerentes, os ambientes variam amplamente e não podemos prever ou validar todas as configurações dos usuários. Você é o único responsável por validar seu próprio ambiente, manter cópias independentes e verificar os resultados antes de utilizá-los em produção. Construímos o Supa Moonbase (smoonb) com repositórios públicos, auditáveis e de código aberto para ajudar pessoas a simplificar seus fluxos de trabalho, mas isso não cria qualquer garantia, promessa de suporte ou compromisso de nível de serviço.
|
|
36
|
-
|
|
37
|
-
**Limitação de responsabilidade** — Na máxima extensão permitida por lei, a Goalmoon Tecnologia LTDA, seus contribuidores e licenciadores não serão responsáveis por quaisquer danos indiretos, incidentais, especiais, consequentes, exemplares ou punitivos (incluindo perda de dados, interrupção de negócios ou lucros cessantes) decorrentes ou relacionados ao uso, incapacidade de uso, operações de backup/restauração realizadas por, ou resultados produzidos pelo Supa Moonbase (smoonb).
|
|
38
|
-
|
|
39
|
-
## 🚀 Instalação
|
|
40
|
-
|
|
41
|
-
**⚠️ IMPORTANTE: Instale APENAS localmente no projeto!**
|
|
42
|
-
|
|
43
|
-
**Instalar localmente no projeto:**
|
|
44
|
-
```bash
|
|
45
|
-
npm install smoonb
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
**Usar com npx:**
|
|
49
|
-
```bash
|
|
50
|
-
npx smoonb --help
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
**Não instalar globalmente** (será bloqueado):
|
|
54
|
-
```bash
|
|
55
|
-
npm install -g smoonb
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
### 🔄 Atualizar para a Última Versão
|
|
59
|
-
|
|
60
|
-
Para atualizar o smoonb para a versão mais recente disponível, execute no projeto atual:
|
|
61
|
-
|
|
62
|
-
```bash
|
|
63
|
-
npm install smoonb@latest
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
**⚠️ IMPORTANTE:** O smoonb deve ser instalado localmente no projeto. Não é permitido usar sem instalar (ex.: `npx smoonb@latest`).
|
|
67
|
-
|
|
68
|
-
**💡 Por que apenas local?**
|
|
69
|
-
- **🔒 Segurança**: Evita conflitos de versão
|
|
70
|
-
- **📦 Isolamento**: Cada projeto usa sua versão
|
|
71
|
-
- **🔄 Atualizações**: Controle granular por projeto
|
|
72
|
-
- **🛡️ Estabilidade**: Evita quebras em outros projetos
|
|
73
|
-
|
|
74
|
-
## 📋 Pré-requisitos
|
|
75
|
-
|
|
76
|
-
### 1. Docker Desktop (OBRIGATÓRIO)
|
|
77
|
-
|
|
78
|
-
Instale pelo [Docker Desktop](https://docs.docker.com/desktop/install/) (Windows/macOS) ou [Docker Engine](https://docs.docker.com/engine/install/) (Linux). Depois verifique se está rodando:
|
|
79
|
-
|
|
80
|
-
```bash
|
|
81
|
-
docker --version
|
|
82
|
-
docker ps
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
**⚠️ IMPORTANTE:** O Docker é necessário para:
|
|
86
|
-
- Backup da database via `pg_dumpall` (compatível com Dashboard do Supabase)
|
|
87
|
-
- Compressão de arquivos `.backup.gz`
|
|
88
|
-
- Restauração de backups `.backup` e `.backup.gz`
|
|
89
|
-
|
|
90
|
-
### 2. Supabase CLI
|
|
91
|
-
```bash
|
|
92
|
-
npm install -g supabase
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
**Política de versão:** o smoonb aceita qualquer versão do Supabase CLI que esteja **no máximo 1 minor atrás da latest** (mesma major). Recomendamos sempre usar a versão mais recente. Versões muito antigas são bloqueadas com mensagem de erro.
|
|
96
|
-
|
|
97
|
-
Se o seu gerenciador de pacotes (ex.: **Scoop** no Windows) instala com atraso e você quer avançar mesmo assim, use a flag `--skip-supabase-version-check` (veja a seção de uso abaixo).
|
|
98
|
-
|
|
99
|
-
Para atualizar o Supabase CLI: [Atualizando o Supabase CLI](https://supabase.com/docs/guides/cli/getting-started#updating-the-supabase-cli).
|
|
100
|
-
|
|
101
|
-
### 3. Personal Access Token do Supabase
|
|
102
|
-
É necessário obter um token de acesso pessoal do Supabase para usar a Management API:
|
|
103
|
-
|
|
104
|
-
1. Acesse: https://supabase.com/dashboard/account/tokens
|
|
105
|
-
2. Clique em "Generate new token"
|
|
106
|
-
3. Copie o token (formato: `sbp_...`)
|
|
107
|
-
4. Adicione ao `.env.local` como `SUPABASE_ACCESS_TOKEN`
|
|
108
|
-
|
|
109
|
-
### 4. Chave de licença (OBRIGATÓRIA para backup e restore)
|
|
110
|
-
O **smoonb** exige uma licença válida para executar backup e restore:
|
|
111
|
-
|
|
112
|
-
1. Obtenha sua licença no app desktop em https://www.smoonb.com
|
|
113
|
-
2. Defina no ambiente ou no `.env.local`: `SMOONB_LICENSE_KEY=[sua-chave-de-licença]`
|
|
114
|
-
3. A licença é validada no início de cada execução (step 00); não há cache. Se a validação falhar (rede/servidor), o CLI aborta. A licença **não** aparece no wizard de mapeamento de variáveis (já foi validada antes).
|
|
115
|
-
|
|
116
|
-
## ⚙️ Configuração
|
|
117
|
-
|
|
118
|
-
### Método Moderno: `.env.local` (RECOMENDADO)
|
|
119
|
-
|
|
120
|
-
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.
|
|
121
|
-
|
|
122
|
-
#### 1. Criar ou editar `.env.local` na raiz do projeto
|
|
123
|
-
|
|
124
|
-
```bash
|
|
125
|
-
touch .env.local
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
#### 2. Adicionar as variáveis de ambiente necessárias
|
|
129
|
-
|
|
130
|
-
```env
|
|
131
|
-
SMOONB_LICENSE_KEY=[sua-chave-de-licença]
|
|
132
|
-
NEXT_PUBLIC_SUPABASE_URL=[sua-supabase-url]
|
|
133
|
-
NEXT_PUBLIC_SUPABASE_ANON_KEY=[sua-anon-key]
|
|
134
|
-
SUPABASE_SERVICE_ROLE_KEY=[sua-service-role]
|
|
135
|
-
SUPABASE_DB_URL=postgresql://postgres:[sua-database-password]@db.[seu-project-id].supabase.co:5432/postgres
|
|
136
|
-
SUPABASE_PROJECT_ID=[seu-project-id]
|
|
137
|
-
SUPABASE_ACCESS_TOKEN=[seu-access-token]
|
|
138
|
-
SUPABASE_POSTGRES_MAJOR=17
|
|
139
|
-
SMOONB_TELEMETRY_ENABLED=true
|
|
140
|
-
SMOONB_OUTPUT_DIR=./backups
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
Obrigatórias: `SMOONB_LICENSE_KEY` (app desktop em [smoonb.com](https://www.smoonb.com)), `SUPABASE_POSTGRES_MAJOR` (ex.: 17; veja no Dashboard → Project Settings → Infrastructure → Service Versions). Opcionais: `SMOONB_TELEMETRY_ENABLED`, `SMOONB_OUTPUT_DIR` (padrão `./backups`).
|
|
144
|
-
|
|
145
|
-
#### 3. Mapeamento Interativo
|
|
146
|
-
|
|
147
|
-
Ao executar `backup` ou `restore` pela primeira vez, o **smoonb** irá:
|
|
148
|
-
|
|
149
|
-
1. **Ler** seu `.env.local` atual
|
|
150
|
-
2. **Identificar** as chaves que você já tem
|
|
151
|
-
3. **Perguntar interativamente** quais chaves correspondem às esperadas (se os nomes forem diferentes)
|
|
152
|
-
4. **Adicionar** chaves faltantes se necessário
|
|
153
|
-
5. **Criar backup** automático do `.env.local` antes de qualquer alteração
|
|
154
|
-
6. **Salvar mapeamento** para futuras execuções
|
|
155
|
-
|
|
156
|
-
**Exemplo de mapeamento:**
|
|
157
|
-
```
|
|
158
|
-
🔧 Mapeando variável: NEXT_PUBLIC_SUPABASE_URL
|
|
159
|
-
Valor atual: https://abc123.supabase.co
|
|
160
|
-
Este é o valor correto do projeto alvo? (S/n): S
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
## 🌐 Internacionalização (i18n)
|
|
164
|
-
|
|
165
|
-
O **smoonb** suporta múltiplos idiomas automaticamente. Atualmente, os idiomas suportados são:
|
|
166
|
-
|
|
167
|
-
- **Inglês (en)** - Idioma padrão
|
|
168
|
-
- **Português do Brasil (pt-BR)** - Suporte completo
|
|
169
|
-
|
|
170
|
-
### Detecção Automática de Idioma
|
|
171
|
-
|
|
172
|
-
O idioma é detectado automaticamente na seguinte ordem de precedência:
|
|
173
|
-
|
|
174
|
-
1. **Variável de ambiente `SMOONB_LANG`** (no `.env.local` ou no ambiente)
|
|
175
|
-
2. **Locale do sistema** (LANG, LC_ALL, LC_MESSAGES). Exemplo: `LANG=pt_BR.UTF-8` → pt-BR
|
|
176
|
-
3. **Fallback para inglês (en)** se nenhum dos anteriores for detectado
|
|
177
|
-
|
|
178
|
-
### Idiomas Suportados e Aliases
|
|
179
|
-
|
|
180
|
-
- `en` ou `en-US` → Inglês
|
|
181
|
-
- `pt-BR`, `pt_BR` ou `pt` → Português do Brasil
|
|
182
|
-
|
|
183
|
-
### Notas Importantes
|
|
184
|
-
|
|
185
|
-
- **Saídas "máquina"** (ex.: `--json` se implementado) **não** são traduzidas; campos e chaves permanecem em inglês
|
|
186
|
-
- Se uma chave de tradução estiver ausente em um idioma, o sistema faz **fallback automático para inglês**
|
|
187
|
-
- O idioma é detectado uma vez no início da execução e aplicado a todas as mensagens do CLI
|
|
188
|
-
|
|
189
|
-
## 🎯 Uso
|
|
190
|
-
|
|
191
|
-
### Backup Completo
|
|
192
|
-
|
|
193
|
-
```bash
|
|
194
|
-
npx smoonb backup
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
**Opções disponíveis:**
|
|
198
|
-
|
|
199
|
-
| Flag | Descrição |
|
|
200
|
-
|------|-----------|
|
|
201
|
-
| `--skip-supabase-version-check` | Pula a checagem de versão do Supabase CLI. Use quando seu gerenciador de pacotes (ex.: Scoop) instala com atraso. Um aviso é exibido e o usuário assume o risco. |
|
|
202
|
-
|
|
203
|
-
**Exemplo com a flag:**
|
|
204
|
-
```bash
|
|
205
|
-
npx smoonb backup --skip-supabase-version-check
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
**Fluxo interativo do backup:**
|
|
209
|
-
|
|
210
|
-
1. **Termo de uso** - Exibe e solicita aceitação dos termos
|
|
211
|
-
2. **Validação de licença** - Valida `SMOONB_LICENSE_KEY` (env ou prompt); sem cache; aborta se a validação falhar
|
|
212
|
-
3. **Validação Docker** - Verifica se o Docker está rodando
|
|
213
|
-
4. **Consentimento** - Pede permissão para ler/escrever `.env.local`
|
|
214
|
-
5. **Mapeamento de variáveis** - Mapeia suas variáveis de ambiente (primeira vez; a licença não entra no wizard—já validada)
|
|
215
|
-
6. **Backup do .env.local** - Cria backup automático antes de alterações
|
|
216
|
-
7. **Seleção de componentes** - Pergunta quais componentes incluir:
|
|
217
|
-
- ⚡ Edge Functions (explicação sobre reset de link e download)
|
|
218
|
-
- 📦 Storage (explicação sobre backup completo: download de arquivos + ZIP no padrão do Dashboard)
|
|
219
|
-
- 🔐 Auth Settings (explicação sobre configurações)
|
|
220
|
-
- 🔄 Realtime Settings (explicação sobre captura interativa de 7 parâmetros)
|
|
221
|
-
- 🗑️ Opções de limpeza (functions, .temp, migrations após backup)
|
|
222
|
-
8. **Resumo de configurações** - Mostra tudo que será feito
|
|
223
|
-
9. **Confirmação final** - Confirma antes de iniciar
|
|
224
|
-
10. **Execução das etapas:**
|
|
225
|
-
- 📊 1/10 - Backup Database via `pg_dumpall` (Docker)
|
|
226
|
-
- 📊 2/10 - Backup Database SQL separado (schema, dados, roles)
|
|
227
|
-
- 🔧 3/10 - Backup Database Extensions and Settings
|
|
228
|
-
- 🔐 4/10 - Backup Auth Settings (se selecionado)
|
|
229
|
-
- 🔄 5/10 - Backup Realtime Settings (se selecionado) - 7 parâmetros capturados interativamente
|
|
230
|
-
- 📦 6/10 - Backup Storage (se selecionado) - Download completo de arquivos + ZIP no padrão do Dashboard
|
|
231
|
-
- 👥 7/10 - Backup Custom Roles
|
|
232
|
-
- ⚡ 8/10 - Backup Edge Functions (se selecionado)
|
|
233
|
-
- 📁 9/10 - Backup Supabase .temp (se selecionado)
|
|
234
|
-
- 📋 10/10 - Backup Migrations (se selecionado)
|
|
235
|
-
|
|
236
|
-
**Resultado:** Uma pasta `backups/backup-YYYY-MM-DD-HH-MM-SS/` contendo, por exemplo:
|
|
237
|
-
|
|
238
|
-
```
|
|
239
|
-
backups/backup-2025-10-31-09-37-54/
|
|
240
|
-
├── backup-manifest.json
|
|
241
|
-
├── db_cluster-31-10-2025@09-38-57.backup.gz
|
|
242
|
-
├── schema.sql
|
|
243
|
-
├── data.sql
|
|
244
|
-
├── roles.sql
|
|
245
|
-
├── database-settings-*.json
|
|
246
|
-
├── auth-settings.json
|
|
247
|
-
├── realtime-settings.json
|
|
248
|
-
├── storage/
|
|
249
|
-
│ └── [bucket-name].json
|
|
250
|
-
├── [project-id].storage.zip
|
|
251
|
-
├── storage_temp/
|
|
252
|
-
│ └── [project-id]/
|
|
253
|
-
│ └── [bucket-name]/
|
|
254
|
-
├── edge-functions/
|
|
255
|
-
│ └── [nome-da-function]/
|
|
256
|
-
├── supabase-temp/
|
|
257
|
-
├── migrations/
|
|
258
|
-
└── env/
|
|
259
|
-
├── .env.local
|
|
260
|
-
└── env-map.json
|
|
261
|
-
```
|
|
262
|
-
|
|
263
|
-
### Restauração Interativa
|
|
264
|
-
|
|
265
|
-
**Restaurar backup existente:**
|
|
266
|
-
```bash
|
|
267
|
-
npx smoonb restore
|
|
268
|
-
```
|
|
269
|
-
|
|
270
|
-
**Opções disponíveis:**
|
|
271
|
-
|
|
272
|
-
| Flag | Descrição |
|
|
273
|
-
|------|-----------|
|
|
274
|
-
| `--skip-supabase-version-check` | Pula a checagem de versão do Supabase CLI. Use quando seu gerenciador de pacotes (ex.: Scoop) instala com atraso. Um aviso é exibido e o usuário assume o risco. |
|
|
275
|
-
|
|
276
|
-
**Exemplo com a flag:**
|
|
277
|
-
```bash
|
|
278
|
-
npx smoonb restore --skip-supabase-version-check
|
|
279
|
-
```
|
|
280
|
-
|
|
281
|
-
**Fluxo interativo do restore:**
|
|
282
|
-
|
|
283
|
-
1. **Termo de uso** - Exibe e solicita aceitação dos termos
|
|
284
|
-
2. **Validação de licença** - Valida `SMOONB_LICENSE_KEY` (env ou prompt); aborta se a validação falhar
|
|
285
|
-
3. **Validação Docker** - Verifica se o Docker está rodando
|
|
286
|
-
4. **Consentimento** - Pede permissão para ler/escrever `.env.local`
|
|
287
|
-
5. **Mapeamento de variáveis** - Mapeia variáveis para o projeto de destino (inclui `SUPABASE_POSTGRES_MAJOR`)
|
|
288
|
-
6. **Backup do .env.local** - Cria backup automático
|
|
289
|
-
7. **Seleção de backup** - Lista e permite escolher qual backup restaurar
|
|
290
|
-
8. **Seleção de componentes** - Pergunta quais componentes restaurar:
|
|
291
|
-
- 📊 Database (sempre disponível)
|
|
292
|
-
- ⚡ Edge Functions (se disponível no backup)
|
|
293
|
-
- 🔐 Auth Settings (se disponível no backup)
|
|
294
|
-
- 📦 Storage (se disponível no backup)
|
|
295
|
-
- 🔧 Database Extensions and Settings (se disponível no backup)
|
|
296
|
-
- 🔄 Realtime Settings (se disponível no backup)
|
|
297
|
-
9. **Resumo detalhado** - Mostra backup selecionado, projeto destino e componentes
|
|
298
|
-
10. **Confirmação final** - Confirma antes de iniciar
|
|
299
|
-
11. **
|
|
300
|
-
12. **Execução da restauração:**
|
|
301
|
-
- 📊 Database - Restaura via `psql` (suporta `.backup.gz` e `.backup`)
|
|
302
|
-
- ⚡ Edge Functions -
|
|
303
|
-
- 🔐 Auth Settings -
|
|
304
|
-
- 📦 Storage - Restaura buckets e arquivos do ZIP
|
|
305
|
-
- 🔧 Database Settings - Restaura extensões e configurações via SQL
|
|
306
|
-
- 🔄 Realtime Settings -
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
**
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
backup
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
├──
|
|
410
|
-
├──
|
|
411
|
-
|
|
412
|
-
├──
|
|
413
|
-
├──
|
|
414
|
-
├──
|
|
415
|
-
├──
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
```
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
####
|
|
440
|
-
- **
|
|
441
|
-
-
|
|
442
|
-
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
-
|
|
446
|
-
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
- **
|
|
450
|
-
- **
|
|
451
|
-
- **
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
- **
|
|
456
|
-
- **
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
- **
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
- **
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
- **
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
-
|
|
528
|
-
-
|
|
529
|
-
-
|
|
530
|
-
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
O smoonb
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
```
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
###
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
###
|
|
584
|
-
|
|
585
|
-
O smoonb
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
2
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
**
|
|
643
|
-
**
|
|
644
|
-
**
|
|
1
|
+
# Supa Moonbase (smoonb)
|
|
2
|
+
|
|
3
|
+
**Ferramenta completa de backup e migração do Supabase**
|
|
4
|
+
|
|
5
|
+
Backup e restauração: completo e simples, como deveria ser
|
|
6
|
+
|
|
7
|
+
> **Produto comercial.** É necessário ter **licença ativa** e **assinatura válida** (ou estar em período de trial) para usar o smoonb. [www.smoonb.com/#price](https://www.smoonb.com/#price). O uso é regido pelos [Termos de Serviço](https://www.smoonb.com/terms) e pela [Política de Privacidade](https://www.smoonb.com/privacy). Não assumimos responsabilidade por danos causados pelo smoonb; os avisos legais abaixo permanecem válidos.
|
|
8
|
+
|
|
9
|
+
**Leia em outro idioma:** [English](README.md)
|
|
10
|
+
|
|
11
|
+
**Desenvolvido por:** Goalmoon Tecnologia LTDA
|
|
12
|
+
**Website:** https://www.smoonb.com
|
|
13
|
+
**GitHub:** https://github.com/almmello/smoonb
|
|
14
|
+
|
|
15
|
+
## 🎯 Objetivo
|
|
16
|
+
|
|
17
|
+
O **smoonb** resolve o problema das ferramentas existentes que fazem backup apenas da database PostgreSQL, ignorando componentes críticos do Supabase.
|
|
18
|
+
|
|
19
|
+
## 📦 Componentes de Backup
|
|
20
|
+
|
|
21
|
+
O smoonb faz backup completo de todos os componentes do seu projeto Supabase:
|
|
22
|
+
|
|
23
|
+
- ✅ **Database PostgreSQL** (backup completo via `pg_dumpall` + SQL separados, idêntico ao Dashboard)
|
|
24
|
+
- ✅ **Database Extensions and Settings** (extensões PostgreSQL e configurações)
|
|
25
|
+
- ✅ **Custom Roles** (roles personalizados do PostgreSQL)
|
|
26
|
+
- ✅ **Edge Functions** (download automático do servidor)
|
|
27
|
+
- ✅ **Auth Settings** (configurações de autenticação via Management API)
|
|
28
|
+
- ✅ **Storage Buckets** (backup completo: metadados, configurações e todos os arquivos via Management API + Supabase Client, cria ZIP no padrão do Dashboard)
|
|
29
|
+
- ✅ **Realtime Settings** (7 parâmetros capturados interativamente)
|
|
30
|
+
- ✅ **Supabase .temp** (arquivos temporários do Supabase CLI)
|
|
31
|
+
- ✅ **Migrations** (todas as migrations do projeto via `supabase migration fetch`)
|
|
32
|
+
|
|
33
|
+
## ⚠️ Universal Disclaimer / Aviso Legal Universal
|
|
34
|
+
|
|
35
|
+
Ao continuar, você reconhece e concorda que o Supa Moonbase (smoonb) é fornecido "NO ESTADO EM QUE SE ENCONTRA" ("AS IS") e "CONFORME DISPONIBILIDADE" ("AS AVAILABLE"), sem garantias de qualquer natureza—expressas, implícitas ou legais—incluindo, sem limitação, garantias de comercialização, adequação a um fim específico e não violação, na máxima extensão permitida pela lei aplicável. Operações de backup e restauração envolvem riscos inerentes, os ambientes variam amplamente e não podemos prever ou validar todas as configurações dos usuários. Você é o único responsável por validar seu próprio ambiente, manter cópias independentes e verificar os resultados antes de utilizá-los em produção. Construímos o Supa Moonbase (smoonb) com repositórios públicos, auditáveis e de código aberto para ajudar pessoas a simplificar seus fluxos de trabalho, mas isso não cria qualquer garantia, promessa de suporte ou compromisso de nível de serviço.
|
|
36
|
+
|
|
37
|
+
**Limitação de responsabilidade** — Na máxima extensão permitida por lei, a Goalmoon Tecnologia LTDA, seus contribuidores e licenciadores não serão responsáveis por quaisquer danos indiretos, incidentais, especiais, consequentes, exemplares ou punitivos (incluindo perda de dados, interrupção de negócios ou lucros cessantes) decorrentes ou relacionados ao uso, incapacidade de uso, operações de backup/restauração realizadas por, ou resultados produzidos pelo Supa Moonbase (smoonb).
|
|
38
|
+
|
|
39
|
+
## 🚀 Instalação
|
|
40
|
+
|
|
41
|
+
**⚠️ IMPORTANTE: Instale APENAS localmente no projeto!**
|
|
42
|
+
|
|
43
|
+
**Instalar localmente no projeto:**
|
|
44
|
+
```bash
|
|
45
|
+
npm install smoonb
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
**Usar com npx:**
|
|
49
|
+
```bash
|
|
50
|
+
npx smoonb --help
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
**Não instalar globalmente** (será bloqueado):
|
|
54
|
+
```bash
|
|
55
|
+
npm install -g smoonb
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### 🔄 Atualizar para a Última Versão
|
|
59
|
+
|
|
60
|
+
Para atualizar o smoonb para a versão mais recente disponível, execute no projeto atual:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
npm install smoonb@latest
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**⚠️ IMPORTANTE:** O smoonb deve ser instalado localmente no projeto. Não é permitido usar sem instalar (ex.: `npx smoonb@latest`).
|
|
67
|
+
|
|
68
|
+
**💡 Por que apenas local?**
|
|
69
|
+
- **🔒 Segurança**: Evita conflitos de versão
|
|
70
|
+
- **📦 Isolamento**: Cada projeto usa sua versão
|
|
71
|
+
- **🔄 Atualizações**: Controle granular por projeto
|
|
72
|
+
- **🛡️ Estabilidade**: Evita quebras em outros projetos
|
|
73
|
+
|
|
74
|
+
## 📋 Pré-requisitos
|
|
75
|
+
|
|
76
|
+
### 1. Docker Desktop (OBRIGATÓRIO)
|
|
77
|
+
|
|
78
|
+
Instale pelo [Docker Desktop](https://docs.docker.com/desktop/install/) (Windows/macOS) ou [Docker Engine](https://docs.docker.com/engine/install/) (Linux). Depois verifique se está rodando:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
docker --version
|
|
82
|
+
docker ps
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
**⚠️ IMPORTANTE:** O Docker é necessário para:
|
|
86
|
+
- Backup da database via `pg_dumpall` (compatível com Dashboard do Supabase)
|
|
87
|
+
- Compressão de arquivos `.backup.gz`
|
|
88
|
+
- Restauração de backups `.backup` e `.backup.gz`
|
|
89
|
+
|
|
90
|
+
### 2. Supabase CLI
|
|
91
|
+
```bash
|
|
92
|
+
npm install -g supabase
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
**Política de versão:** o smoonb aceita qualquer versão do Supabase CLI que esteja **no máximo 1 minor atrás da latest** (mesma major). Recomendamos sempre usar a versão mais recente. Versões muito antigas são bloqueadas com mensagem de erro.
|
|
96
|
+
|
|
97
|
+
Se o seu gerenciador de pacotes (ex.: **Scoop** no Windows) instala com atraso e você quer avançar mesmo assim, use a flag `--skip-supabase-version-check` (veja a seção de uso abaixo).
|
|
98
|
+
|
|
99
|
+
Para atualizar o Supabase CLI: [Atualizando o Supabase CLI](https://supabase.com/docs/guides/cli/getting-started#updating-the-supabase-cli).
|
|
100
|
+
|
|
101
|
+
### 3. Personal Access Token do Supabase
|
|
102
|
+
É necessário obter um token de acesso pessoal do Supabase para usar a Management API:
|
|
103
|
+
|
|
104
|
+
1. Acesse: https://supabase.com/dashboard/account/tokens
|
|
105
|
+
2. Clique em "Generate new token"
|
|
106
|
+
3. Copie o token (formato: `sbp_...`)
|
|
107
|
+
4. Adicione ao `.env.local` como `SUPABASE_ACCESS_TOKEN`
|
|
108
|
+
|
|
109
|
+
### 4. Chave de licença (OBRIGATÓRIA para backup e restore)
|
|
110
|
+
O **smoonb** exige uma licença válida para executar backup e restore:
|
|
111
|
+
|
|
112
|
+
1. Obtenha sua licença no app desktop em https://www.smoonb.com
|
|
113
|
+
2. Defina no ambiente ou no `.env.local`: `SMOONB_LICENSE_KEY=[sua-chave-de-licença]`
|
|
114
|
+
3. A licença é validada no início de cada execução (step 00); não há cache. Se a validação falhar (rede/servidor), o CLI aborta. A licença **não** aparece no wizard de mapeamento de variáveis (já foi validada antes).
|
|
115
|
+
|
|
116
|
+
## ⚙️ Configuração
|
|
117
|
+
|
|
118
|
+
### Método Moderno: `.env.local` (RECOMENDADO)
|
|
119
|
+
|
|
120
|
+
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.
|
|
121
|
+
|
|
122
|
+
#### 1. Criar ou editar `.env.local` na raiz do projeto
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
touch .env.local
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
#### 2. Adicionar as variáveis de ambiente necessárias
|
|
129
|
+
|
|
130
|
+
```env
|
|
131
|
+
SMOONB_LICENSE_KEY=[sua-chave-de-licença]
|
|
132
|
+
NEXT_PUBLIC_SUPABASE_URL=[sua-supabase-url]
|
|
133
|
+
NEXT_PUBLIC_SUPABASE_ANON_KEY=[sua-anon-key]
|
|
134
|
+
SUPABASE_SERVICE_ROLE_KEY=[sua-service-role]
|
|
135
|
+
SUPABASE_DB_URL=postgresql://postgres:[sua-database-password]@db.[seu-project-id].supabase.co:5432/postgres
|
|
136
|
+
SUPABASE_PROJECT_ID=[seu-project-id]
|
|
137
|
+
SUPABASE_ACCESS_TOKEN=[seu-access-token]
|
|
138
|
+
SUPABASE_POSTGRES_MAJOR=17
|
|
139
|
+
SMOONB_TELEMETRY_ENABLED=true
|
|
140
|
+
SMOONB_OUTPUT_DIR=./backups
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
Obrigatórias: `SMOONB_LICENSE_KEY` (app desktop em [smoonb.com](https://www.smoonb.com)), `SUPABASE_POSTGRES_MAJOR` (ex.: 17; veja no Dashboard → Project Settings → Infrastructure → Service Versions). Opcionais: `SMOONB_TELEMETRY_ENABLED`, `SMOONB_OUTPUT_DIR` (padrão `./backups`).
|
|
144
|
+
|
|
145
|
+
#### 3. Mapeamento Interativo
|
|
146
|
+
|
|
147
|
+
Ao executar `backup` ou `restore` pela primeira vez, o **smoonb** irá:
|
|
148
|
+
|
|
149
|
+
1. **Ler** seu `.env.local` atual
|
|
150
|
+
2. **Identificar** as chaves que você já tem
|
|
151
|
+
3. **Perguntar interativamente** quais chaves correspondem às esperadas (se os nomes forem diferentes)
|
|
152
|
+
4. **Adicionar** chaves faltantes se necessário
|
|
153
|
+
5. **Criar backup** automático do `.env.local` antes de qualquer alteração
|
|
154
|
+
6. **Salvar mapeamento** para futuras execuções
|
|
155
|
+
|
|
156
|
+
**Exemplo de mapeamento:**
|
|
157
|
+
```
|
|
158
|
+
🔧 Mapeando variável: NEXT_PUBLIC_SUPABASE_URL
|
|
159
|
+
Valor atual: https://abc123.supabase.co
|
|
160
|
+
Este é o valor correto do projeto alvo? (S/n): S
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## 🌐 Internacionalização (i18n)
|
|
164
|
+
|
|
165
|
+
O **smoonb** suporta múltiplos idiomas automaticamente. Atualmente, os idiomas suportados são:
|
|
166
|
+
|
|
167
|
+
- **Inglês (en)** - Idioma padrão
|
|
168
|
+
- **Português do Brasil (pt-BR)** - Suporte completo
|
|
169
|
+
|
|
170
|
+
### Detecção Automática de Idioma
|
|
171
|
+
|
|
172
|
+
O idioma é detectado automaticamente na seguinte ordem de precedência:
|
|
173
|
+
|
|
174
|
+
1. **Variável de ambiente `SMOONB_LANG`** (no `.env.local` ou no ambiente)
|
|
175
|
+
2. **Locale do sistema** (LANG, LC_ALL, LC_MESSAGES). Exemplo: `LANG=pt_BR.UTF-8` → pt-BR
|
|
176
|
+
3. **Fallback para inglês (en)** se nenhum dos anteriores for detectado
|
|
177
|
+
|
|
178
|
+
### Idiomas Suportados e Aliases
|
|
179
|
+
|
|
180
|
+
- `en` ou `en-US` → Inglês
|
|
181
|
+
- `pt-BR`, `pt_BR` ou `pt` → Português do Brasil
|
|
182
|
+
|
|
183
|
+
### Notas Importantes
|
|
184
|
+
|
|
185
|
+
- **Saídas "máquina"** (ex.: `--json` se implementado) **não** são traduzidas; campos e chaves permanecem em inglês
|
|
186
|
+
- Se uma chave de tradução estiver ausente em um idioma, o sistema faz **fallback automático para inglês**
|
|
187
|
+
- O idioma é detectado uma vez no início da execução e aplicado a todas as mensagens do CLI
|
|
188
|
+
|
|
189
|
+
## 🎯 Uso
|
|
190
|
+
|
|
191
|
+
### Backup Completo
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
npx smoonb backup
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
**Opções disponíveis:**
|
|
198
|
+
|
|
199
|
+
| Flag | Descrição |
|
|
200
|
+
|------|-----------|
|
|
201
|
+
| `--skip-supabase-version-check` | Pula a checagem de versão do Supabase CLI. Use quando seu gerenciador de pacotes (ex.: Scoop) instala com atraso. Um aviso é exibido e o usuário assume o risco. |
|
|
202
|
+
|
|
203
|
+
**Exemplo com a flag:**
|
|
204
|
+
```bash
|
|
205
|
+
npx smoonb backup --skip-supabase-version-check
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
**Fluxo interativo do backup:**
|
|
209
|
+
|
|
210
|
+
1. **Termo de uso** - Exibe e solicita aceitação dos termos
|
|
211
|
+
2. **Validação de licença** - Valida `SMOONB_LICENSE_KEY` (env ou prompt); sem cache; aborta se a validação falhar
|
|
212
|
+
3. **Validação Docker** - Verifica se o Docker está rodando
|
|
213
|
+
4. **Consentimento** - Pede permissão para ler/escrever `.env.local`
|
|
214
|
+
5. **Mapeamento de variáveis** - Mapeia suas variáveis de ambiente (primeira vez; a licença não entra no wizard—já validada)
|
|
215
|
+
6. **Backup do .env.local** - Cria backup automático antes de alterações
|
|
216
|
+
7. **Seleção de componentes** - Pergunta quais componentes incluir:
|
|
217
|
+
- ⚡ Edge Functions (explicação sobre reset de link e download)
|
|
218
|
+
- 📦 Storage (explicação sobre backup completo: download de arquivos + ZIP no padrão do Dashboard)
|
|
219
|
+
- 🔐 Auth Settings (explicação sobre configurações)
|
|
220
|
+
- 🔄 Realtime Settings (explicação sobre captura interativa de 7 parâmetros)
|
|
221
|
+
- 🗑️ Opções de limpeza (functions, .temp, migrations após backup)
|
|
222
|
+
8. **Resumo de configurações** - Mostra tudo que será feito
|
|
223
|
+
9. **Confirmação final** - Confirma antes de iniciar
|
|
224
|
+
10. **Execução das etapas:**
|
|
225
|
+
- 📊 1/10 - Backup Database via `pg_dumpall` (Docker)
|
|
226
|
+
- 📊 2/10 - Backup Database SQL separado (schema, dados, roles)
|
|
227
|
+
- 🔧 3/10 - Backup Database Extensions and Settings
|
|
228
|
+
- 🔐 4/10 - Backup Auth Settings (se selecionado)
|
|
229
|
+
- 🔄 5/10 - Backup Realtime Settings (se selecionado) - 7 parâmetros capturados interativamente
|
|
230
|
+
- 📦 6/10 - Backup Storage (se selecionado) - Download completo de arquivos + ZIP no padrão do Dashboard
|
|
231
|
+
- 👥 7/10 - Backup Custom Roles
|
|
232
|
+
- ⚡ 8/10 - Backup Edge Functions (se selecionado)
|
|
233
|
+
- 📁 9/10 - Backup Supabase .temp (se selecionado)
|
|
234
|
+
- 📋 10/10 - Backup Migrations (se selecionado)
|
|
235
|
+
|
|
236
|
+
**Resultado:** Uma pasta `backups/backup-YYYY-MM-DD-HH-MM-SS/` contendo, por exemplo:
|
|
237
|
+
|
|
238
|
+
```
|
|
239
|
+
backups/backup-2025-10-31-09-37-54/
|
|
240
|
+
├── backup-manifest.json
|
|
241
|
+
├── db_cluster-31-10-2025@09-38-57.backup.gz
|
|
242
|
+
├── schema.sql
|
|
243
|
+
├── data.sql
|
|
244
|
+
├── roles.sql
|
|
245
|
+
├── database-settings-*.json
|
|
246
|
+
├── auth-settings.json
|
|
247
|
+
├── realtime-settings.json
|
|
248
|
+
├── storage/
|
|
249
|
+
│ └── [bucket-name].json
|
|
250
|
+
├── [project-id].storage.zip
|
|
251
|
+
├── storage_temp/
|
|
252
|
+
│ └── [project-id]/
|
|
253
|
+
│ └── [bucket-name]/
|
|
254
|
+
├── edge-functions/
|
|
255
|
+
│ └── [nome-da-function]/
|
|
256
|
+
├── supabase-temp/
|
|
257
|
+
├── migrations/
|
|
258
|
+
└── env/
|
|
259
|
+
├── .env.local
|
|
260
|
+
└── env-map.json
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
### Restauração Interativa
|
|
264
|
+
|
|
265
|
+
**Restaurar backup existente:**
|
|
266
|
+
```bash
|
|
267
|
+
npx smoonb restore
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
**Opções disponíveis:**
|
|
271
|
+
|
|
272
|
+
| Flag | Descrição |
|
|
273
|
+
|------|-----------|
|
|
274
|
+
| `--skip-supabase-version-check` | Pula a checagem de versão do Supabase CLI. Use quando seu gerenciador de pacotes (ex.: Scoop) instala com atraso. Um aviso é exibido e o usuário assume o risco. |
|
|
275
|
+
|
|
276
|
+
**Exemplo com a flag:**
|
|
277
|
+
```bash
|
|
278
|
+
npx smoonb restore --skip-supabase-version-check
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
**Fluxo interativo do restore:**
|
|
282
|
+
|
|
283
|
+
1. **Termo de uso** - Exibe e solicita aceitação dos termos
|
|
284
|
+
2. **Validação de licença** - Valida `SMOONB_LICENSE_KEY` (env ou prompt); aborta se a validação falhar
|
|
285
|
+
3. **Validação Docker** - Verifica se o Docker está rodando
|
|
286
|
+
4. **Consentimento** - Pede permissão para ler/escrever `.env.local`
|
|
287
|
+
5. **Mapeamento de variáveis** - Mapeia variáveis para o projeto de destino (inclui `SUPABASE_POSTGRES_MAJOR`)
|
|
288
|
+
6. **Backup do .env.local** - Cria backup automático
|
|
289
|
+
7. **Seleção de backup** - Lista e permite escolher qual backup restaurar
|
|
290
|
+
8. **Seleção de componentes** - Pergunta quais componentes restaurar:
|
|
291
|
+
- 📊 Database (sempre disponível)
|
|
292
|
+
- ⚡ Edge Functions (se disponível no backup)
|
|
293
|
+
- 🔐 Auth Settings (se disponível no backup)
|
|
294
|
+
- 📦 Storage (se disponível no backup)
|
|
295
|
+
- 🔧 Database Extensions and Settings (se disponível no backup)
|
|
296
|
+
- 🔄 Realtime Settings (se disponível no backup)
|
|
297
|
+
9. **Resumo detalhado** - Mostra backup selecionado, projeto destino e componentes
|
|
298
|
+
10. **Confirmação final** - Confirma antes de iniciar
|
|
299
|
+
11. **Endereços do projeto** - Confirma se as URLs Supabase nos dados e arquivos devem apontar para o novo projeto
|
|
300
|
+
12. **Execução da restauração:**
|
|
301
|
+
- 📊 Database - Restaura via `psql` (suporta `.backup.gz` e `.backup`)
|
|
302
|
+
- ⚡ Edge Functions - Faz deploy de uma cópia temporária, preservando as fontes locais
|
|
303
|
+
- 🔐 Auth Settings - Aplica via API e verifica os valores recuperados
|
|
304
|
+
- 📦 Storage - Restaura buckets e arquivos do ZIP, preserva metadados e verifica cada download
|
|
305
|
+
- 🔧 Database Settings - Restaura extensões e configurações via SQL
|
|
306
|
+
- 🔄 Realtime Settings - Aplica e verifica o snapshot registrado no backup
|
|
307
|
+
|
|
308
|
+
### Restauração verificada (1.0.8)
|
|
309
|
+
|
|
310
|
+
Use um projeto de destino novo e vazio e Node.js 20 ou mais recente. O backup completo existente da versão 1.0.7 pode ser reutilizado, sem nova captura. A versão 1.0.8 usa o dump completo como snapshot único: recupera a estrutura da aplicação, dados de Auth, histórico de migrações, buckets e metadados. Os schemas internos e as migrações da plataforma são mantidos na versão do destino.
|
|
311
|
+
|
|
312
|
+
A carga do banco usa uma transação com interrupção em erro, suspende triggers apenas nessa conexão, compara todas as colunas recuperadas e verifica chaves estrangeiras antes de confirmar. Permissões herdadas dos defaults do destino são removidas antes da reaplicação dos grants do backup. SQL com falha nunca é classificado como sucesso. O arquivo compactado e a pasta local de funções são preservados.
|
|
313
|
+
|
|
314
|
+
O remapeamento opcional troca apenas o domínio Supabase do projeto em URLs, inclusive em JSON e arquivos de texto. Não troca IDs isolados nem nomes de arquivos. URLs históricas também podem ser afetadas; escolha preservar quando isso for necessário. URLs assinadas, domínios personalizados, integrações externas e chaves de API da aplicação precisam de validação específica. As chaves de plataforma do destino não são substituídas.
|
|
315
|
+
|
|
316
|
+
Auth e Realtime são aplicados pela Management API e conferidos por nova leitura. A captura antiga de Realtime pode conter valores desatualizados: a restauração reproduz os valores e a data registrados, não o estado atual do projeto original. Novos backups capturam Realtime diretamente pela API. Em backups antigos sem o sinalizador de JWT de Functions, o padrão seguro é exigir JWT; os novos backups guardam esse sinalizador.
|
|
317
|
+
|
|
318
|
+
O relatório é salvo durante cada etapa, inclusive em falhas. Serviços externos não participam da transação do banco: se uma etapa posterior falhar, as anteriores permanecem registradas como concluídas. Não repita a carga do banco em um destino já preenchido. Resolva a etapa indicada e selecione apenas os componentes pendentes, ou use outro projeto vazio.
|
|
319
|
+
|
|
320
|
+
Dados internos não suportados (por exemplo, Vault com segredos criptografados sem migração da chave) e configurações incompatíveis com o plano/versão do destino interrompem o processo. O status verificado cobre os componentes selecionados; ainda é necessário validar login, envio de e-mail e fluxos de negócio antes de usar o destino em produção.
|
|
321
|
+
|
|
322
|
+
**Formato de arquivos suportados:**
|
|
323
|
+
- ✅ `.backup.gz` (compactado) - Descompacta automaticamente antes de restaurar
|
|
324
|
+
- ✅ `.backup` (descompactado) - Restaura diretamente
|
|
325
|
+
|
|
326
|
+
### Importar Backup do Dashboard do Supabase
|
|
327
|
+
|
|
328
|
+
Se você baixou um backup diretamente do Dashboard do Supabase (formato `.backup.gz`), você pode importá-lo para o formato esperado pelo smoonb. O comando também suporta importar arquivos de storage (`.storage.zip`) opcionalmente.
|
|
329
|
+
|
|
330
|
+
**Importar apenas database:**
|
|
331
|
+
```bash
|
|
332
|
+
npx smoonb import --file "caminho/completo/para/db_cluster-04-03-2024@14-16-59.backup.gz"
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
**Importar database e storage juntos:**
|
|
336
|
+
```bash
|
|
337
|
+
npx smoonb import --file "backup.backup.gz" --storage "meu-projeto.storage.zip"
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
**O que o comando faz:**
|
|
341
|
+
1. Lê o arquivo `.backup.gz` do Dashboard (obrigatório)
|
|
342
|
+
2. Se fornecido, lê o arquivo `.storage.zip` do Dashboard (opcional)
|
|
343
|
+
3. Extrai informações do nome do arquivo de backup (data e hora)
|
|
344
|
+
4. Cria uma pasta de backup no formato esperado (`backup-YYYY-MM-DD-HH-MM-SS`)
|
|
345
|
+
5. Copia o arquivo de backup para a pasta criada
|
|
346
|
+
6. Se fornecido, copia o arquivo de storage para a mesma pasta
|
|
347
|
+
7. Deixa o backup pronto para ser encontrado pelo comando `restore`
|
|
348
|
+
|
|
349
|
+
**Exemplo completo - Apenas database (usando import + restore):**
|
|
350
|
+
|
|
351
|
+
1. Baixe o backup do Dashboard do Supabase (ex.: `db_cluster-04-03-2024@14-16-59.backup.gz`).
|
|
352
|
+
2. Importe o arquivo e depois restaure:
|
|
353
|
+
|
|
354
|
+
```bash
|
|
355
|
+
npx smoonb import --file "C:\Downloads\db_cluster-04-03-2024@14-16-59.backup.gz"
|
|
356
|
+
npx smoonb restore
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
O backup importado aparecerá na lista de backups disponíveis.
|
|
360
|
+
|
|
361
|
+
**Exemplo completo - Database e Storage (usando import + restore):**
|
|
362
|
+
|
|
363
|
+
1. Baixe backup e storage do Dashboard do Supabase (ex.: `db_cluster-04-03-2024@14-16-59.backup.gz` e `meu-projeto.storage.zip`).
|
|
364
|
+
2. Importe ambos os arquivos e depois restaure:
|
|
365
|
+
|
|
366
|
+
```bash
|
|
367
|
+
npx smoonb import --file "C:\Downloads\db_cluster-04-03-2024@14-16-59.backup.gz" --storage "C:\Downloads\meu-projeto.storage.zip"
|
|
368
|
+
npx smoonb restore
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
O backup importado aparecerá na lista de backups disponíveis.
|
|
372
|
+
|
|
373
|
+
**Importante:**
|
|
374
|
+
- O arquivo de backup é **obrigatório** e deve estar no formato do Dashboard: `db_cluster-DD-MM-YYYY@HH-MM-SS.backup.gz`
|
|
375
|
+
- O arquivo de storage é **opcional** e deve estar no formato: `*.storage.zip`
|
|
376
|
+
- O storage depende de um backup, mas o backup não depende do storage
|
|
377
|
+
- Ambos os arquivos serão copiados para a mesma pasta de backup
|
|
378
|
+
- O caminho pode ser absoluto ou relativo
|
|
379
|
+
- O comando criará a estrutura de pastas necessária automaticamente
|
|
380
|
+
|
|
381
|
+
Após executar `import`, execute `restore` para escolher o backup importado na lista e restaurar.
|
|
382
|
+
|
|
383
|
+
## 🔧 Comandos Disponíveis
|
|
384
|
+
|
|
385
|
+
| Comando | Descrição |
|
|
386
|
+
|---------|-----------|
|
|
387
|
+
| `npx smoonb backup` | Backup completo interativo usando Docker |
|
|
388
|
+
| `npx smoonb backup --skip-supabase-version-check` | Backup pulando a checagem de versão do Supabase CLI |
|
|
389
|
+
| `npx smoonb restore` | Restauração interativa usando psql (Docker) |
|
|
390
|
+
| `npx smoonb restore --skip-supabase-version-check` | Restore pulando a checagem de versão do Supabase CLI |
|
|
391
|
+
| `npx smoonb import --file <path> [--storage <path>]` | Importar arquivo .backup.gz e opcionalmente .storage.zip do Dashboard do Supabase |
|
|
392
|
+
|
|
393
|
+
## 🏗️ Arquitetura Técnica
|
|
394
|
+
|
|
395
|
+
### Estrutura Modular
|
|
396
|
+
|
|
397
|
+
O código foi refatorado para uma **arquitetura modular** com etapas independentes:
|
|
398
|
+
|
|
399
|
+
#### Backup (`src/commands/backup/`)
|
|
400
|
+
```
|
|
401
|
+
backup/
|
|
402
|
+
├── index.js
|
|
403
|
+
├── utils.js
|
|
404
|
+
└── steps/
|
|
405
|
+
├── 00-license.js
|
|
406
|
+
├── 01-docker-validation.js
|
|
407
|
+
├── 02-database.js
|
|
408
|
+
├── 03-database-separated.js
|
|
409
|
+
├── 04-database-settings.js
|
|
410
|
+
├── 05-auth-settings.js
|
|
411
|
+
├── 06-realtime-settings.js
|
|
412
|
+
├── 07-storage.js
|
|
413
|
+
├── 08-custom-roles.js
|
|
414
|
+
├── 09-edge-functions.js
|
|
415
|
+
├── 10-supabase-temp.js
|
|
416
|
+
└── 11-migrations.js
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
#### Restore (`src/commands/restore/`)
|
|
420
|
+
A validação de licença (mesmo step do backup, `00-license.js` em backup/steps) roda no início. Em seguida:
|
|
421
|
+
```
|
|
422
|
+
restore/
|
|
423
|
+
├── index.js
|
|
424
|
+
├── utils.js
|
|
425
|
+
└── steps/
|
|
426
|
+
├── 00-backup-selection.js
|
|
427
|
+
├── 01-components-selection.js
|
|
428
|
+
├── 02-confirmation.js
|
|
429
|
+
├── 03-database.js
|
|
430
|
+
├── 04-edge-functions.js
|
|
431
|
+
├── 05-auth-settings.js
|
|
432
|
+
├── 06-storage.js
|
|
433
|
+
├── 07-database-settings.js
|
|
434
|
+
└── 08-realtime-settings.js
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
### Estratégia de Backup
|
|
438
|
+
|
|
439
|
+
#### Database
|
|
440
|
+
- **Backup Principal**: `pg_dumpall` via Docker (idêntico ao Dashboard)
|
|
441
|
+
- Arquivo: `db_cluster-XX-XX-XXXX@XX-XX-XX.backup.gz`
|
|
442
|
+
- Compatível com restauração via Dashboard do Supabase
|
|
443
|
+
- **Backup Separado**: SQL em arquivos distintos via Supabase CLI
|
|
444
|
+
- `schema.sql` - Estrutura das tabelas
|
|
445
|
+
- `data.sql` - Dados (comandos COPY)
|
|
446
|
+
- `roles.sql` - Roles e permissões
|
|
447
|
+
|
|
448
|
+
#### Edge Functions
|
|
449
|
+
- **Download Automático**: Via Supabase CLI `supabase functions download`
|
|
450
|
+
- **Reset de Link**: Garante link limpo com o projeto antes do download
|
|
451
|
+
- **Backup Completo**: Código completo de cada function
|
|
452
|
+
|
|
453
|
+
#### Migrations
|
|
454
|
+
- **Download Automático**: Via `supabase migration fetch`
|
|
455
|
+
- **Reset de Link**: Garante link limpo com o projeto
|
|
456
|
+
- **Backup Completo**: Todas as migrations do servidor
|
|
457
|
+
|
|
458
|
+
#### Storage
|
|
459
|
+
- **Backup Completo**: Download de todos os arquivos de todos os buckets
|
|
460
|
+
- **Estrutura Temporária**: Cria `storage_temp/project-id/bucket-name/arquivos...` dentro do backupDir
|
|
461
|
+
- **ZIP no Padrão Dashboard**: Cria `{project-id}.storage.zip` com estrutura `project-id/bucket-name/arquivos...`
|
|
462
|
+
- **Compatível com Restore**: O ZIP criado é compatível com o processo de restore (mesmo formato do Dashboard)
|
|
463
|
+
- **Pergunta Interativa**: Após criar o ZIP, pergunta se deseja limpar a estrutura temporária
|
|
464
|
+
- **Fallback**: Se não houver credenciais do Supabase, faz backup apenas de metadados
|
|
465
|
+
- **Management API**: Usa Personal Access Token para listar buckets e objetos
|
|
466
|
+
- **Supabase Client**: Usa Service Role Key para download de arquivos
|
|
467
|
+
|
|
468
|
+
#### Auth, Realtime
|
|
469
|
+
- **Management API**: Usa Personal Access Token
|
|
470
|
+
- **JSON Export**: Configurações exportadas como JSON
|
|
471
|
+
- **Realtime Settings**: Captura interativa de 7 parâmetros:
|
|
472
|
+
1. Habilitar serviço Realtime
|
|
473
|
+
2. Permitir acesso público
|
|
474
|
+
3. Tamanho do pool de conexões do database
|
|
475
|
+
4. Máximo de clientes simultâneos
|
|
476
|
+
5. Máximo de eventos por segundo
|
|
477
|
+
6. Máximo de eventos de presença por segundo
|
|
478
|
+
7. Tamanho máximo do payload em KB
|
|
479
|
+
- **Manual para alguns**: Alguns settings precisam ser aplicados manualmente por segurança
|
|
480
|
+
|
|
481
|
+
### Estratégia de Restauração
|
|
482
|
+
|
|
483
|
+
#### Database
|
|
484
|
+
- **Suporte a Formatos**:
|
|
485
|
+
- `.backup.gz` - Descompacta automaticamente via Docker
|
|
486
|
+
- `.backup` - Restaura diretamente via `psql` (Docker)
|
|
487
|
+
- **Restauração Limpa**: Pode sobrescrever dados existentes (com confirmação)
|
|
488
|
+
|
|
489
|
+
#### Edge Functions
|
|
490
|
+
- **Deploy Limpo**: Limpa `supabase/functions` antes do deploy
|
|
491
|
+
- **Reset de Link**: Garante link correto com projeto destino
|
|
492
|
+
- **Deploy Automático**: Usa `supabase functions deploy`
|
|
493
|
+
|
|
494
|
+
#### Outros Componentes
|
|
495
|
+
- **Database Settings**: Restaura via SQL
|
|
496
|
+
- **Storage**: Restaura buckets e arquivos do ZIP (se disponível) ou exibe informações para configuração manual
|
|
497
|
+
- **Auth/Realtime**: Exibe informações para configuração manual no Dashboard
|
|
498
|
+
|
|
499
|
+
### Multiplataforma
|
|
500
|
+
|
|
501
|
+
- **Windows/macOS/Linux**: Detecção automática de binários
|
|
502
|
+
- **Multiplataforma**: Usa `fs.promises.cp`, `path.join`, Docker
|
|
503
|
+
- **Docker para Tudo**: Backup, restore e compressão via Docker (garante consistência)
|
|
504
|
+
|
|
505
|
+
## 📊 Fluxo Recomendado
|
|
506
|
+
|
|
507
|
+
1. **Configurar `.env.local`** (primeira vez) com as credenciais do projeto origem.
|
|
508
|
+
2. **Backup do projeto origem:**
|
|
509
|
+
```bash
|
|
510
|
+
npx smoonb backup
|
|
511
|
+
```
|
|
512
|
+
(Mapeia variáveis interativamente na primeira vez, seleciona componentes, executa backup completo.)
|
|
513
|
+
3. **Criar novo projeto Supabase** (via Dashboard ou Supabase CLI).
|
|
514
|
+
4. **Editar `.env.local`** com as credenciais do novo projeto (apontar variáveis para o projeto destino).
|
|
515
|
+
5. **Restaurar backup** (modo interativo):
|
|
516
|
+
```bash
|
|
517
|
+
npx smoonb restore
|
|
518
|
+
```
|
|
519
|
+
(Seleciona backup desejado, componentes a restaurar, executa restauração.)
|
|
520
|
+
6. **Conferir o resultado**: leia `backups/restore-*/report.json` e teste login, e-mail e os fluxos da aplicação no destino.
|
|
521
|
+
|
|
522
|
+
## 🎨 Experiência do Usuário
|
|
523
|
+
|
|
524
|
+
### Interface em Português
|
|
525
|
+
|
|
526
|
+
Todas as interações são em **Português do Brasil**:
|
|
527
|
+
- Perguntas claras e diretas
|
|
528
|
+
- Explicações antes de cada processo
|
|
529
|
+
- Resumos detalhados antes de confirmar
|
|
530
|
+
- Confirmações com `(S/n)` ou `(s/N)` em português
|
|
531
|
+
|
|
532
|
+
### Mapeamento Inteligente de Variáveis
|
|
533
|
+
|
|
534
|
+
- **Detecção Automática**: Se a chave já existe com o nome esperado, pula a seleção
|
|
535
|
+
- **Opção de Adicionar**: Permite adicionar novas chaves se não existirem
|
|
536
|
+
- **Validação de Valores**: Confirma valores antes de salvar
|
|
537
|
+
- **Backup Automático**: Sempre cria backup do `.env.local` antes de alterações
|
|
538
|
+
|
|
539
|
+
### Processo Guiado
|
|
540
|
+
|
|
541
|
+
- **Validação Prévia**: Verifica Docker antes de começar
|
|
542
|
+
- **Explicações Contextuais**: Explica cada processo antes de perguntar
|
|
543
|
+
- **Resumo Final**: Mostra tudo que será feito antes de executar
|
|
544
|
+
- **Feedback Visual**: Cores e ícones para melhor experiência
|
|
545
|
+
|
|
546
|
+
## 🐛 Solução de Problemas
|
|
547
|
+
|
|
548
|
+
### Avisos de chaves estrangeiras circulares na exportação dos dados
|
|
549
|
+
|
|
550
|
+
Tabelas podem referenciar umas às outras ou a si mesmas. O PostgreSQL avisa que um dump **somente de dados** nem sempre pode ser restaurado com a verificação normal de chaves estrangeiras. Esse aviso isolado não significa falha na exportação: confira o resultado do comando e o manifesto do backup.
|
|
551
|
+
|
|
552
|
+
O smoonb agrupa esses avisos conhecidos, lista as tabelas envolvidas e registra os diagnósticos originais em `backup-manifest.json`, em `components.database_separated.warnings`. Outros avisos e erros continuam visíveis. Se schema, dados ou roles falharem, esse componente será marcado como incompleto.
|
|
553
|
+
|
|
554
|
+
Atualmente, o Supabase CLI coloca `SET session_replication_role = replica;` no início de `data.sql`. O smoonb verifica a primeira linha antes de informar sua presença. Isso **não valida a restauração**: a role de destino precisa ter permissão para alterar essa configuração. Restaure o schema antes dos dados e interrompa ao encontrar erros SQL. Para uma restauração controlada em destino separado e adequado, siga o [guia de backup/restauração do Supabase](https://supabase.com/docs/guides/platform/migrating-within-supabase/backup-restore):
|
|
555
|
+
|
|
556
|
+
```bash
|
|
557
|
+
psql --dbname "$TARGET_DB_URL" --single-transaction --variable ON_ERROR_STOP=1 --file roles.sql --file schema.sql --command 'SET session_replication_role = replica' --file data.sql
|
|
558
|
+
```
|
|
559
|
+
|
|
560
|
+
A configuração afeta essa conexão de restauração; não altera o banco de origem. Confira contagens e referências no destino restaurado antes de depender do backup. Não remova chaves estrangeiras da aplicação para silenciar os avisos. O `.backup.gz` principal é um dump completo do cluster; os SQL separados são arquivos adicionais.
|
|
561
|
+
|
|
562
|
+
### Verificações de desenvolvimento
|
|
563
|
+
|
|
564
|
+
Use Node.js 22 para as verificações de desenvolvimento: `npm test`, `npm run lint` e `npm run build`. O teste explícito `npm run test:docker` exige Docker, imagem `postgres:17` e Supabase CLI. Ele cria somente dados fictícios em um PostgreSQL descartável próprio, testa restaurações com e sem proteção e remove esse contêiner ao terminar. Não usa credenciais do projeto nem banco remoto.
|
|
565
|
+
|
|
566
|
+
|
|
567
|
+
### Docker não encontrado ou não está rodando
|
|
568
|
+
|
|
569
|
+
Verifique se o Docker está instalado e em execução:
|
|
570
|
+
|
|
571
|
+
```bash
|
|
572
|
+
docker --version
|
|
573
|
+
docker ps
|
|
574
|
+
```
|
|
575
|
+
|
|
576
|
+
Se não estiver, inicie o Docker Desktop (Windows/macOS) ou execute `sudo systemctl start docker` (Linux).
|
|
577
|
+
|
|
578
|
+
### Supabase CLI não encontrado
|
|
579
|
+
```bash
|
|
580
|
+
npm install -g supabase
|
|
581
|
+
```
|
|
582
|
+
|
|
583
|
+
### Supabase CLI desatualizado (abaixo da versão mínima aceita)
|
|
584
|
+
|
|
585
|
+
O smoonb aceita versões até **1 minor atrás da latest**. Se sua versão instalada estiver abaixo desse limite, você verá uma mensagem como:
|
|
586
|
+
|
|
587
|
+
```
|
|
588
|
+
❌ Supabase CLI X.Y.Z está abaixo da versão mínima aceita (X.W.0). Versão latest: X.V.Z. Atualize para pelo menos a versão X.W.0.
|
|
589
|
+
```
|
|
590
|
+
|
|
591
|
+
**Opção 1 — Atualizar o Supabase CLI:**
|
|
592
|
+
```bash
|
|
593
|
+
npm install -g supabase@latest # instalação global
|
|
594
|
+
npm install supabase@latest # instalação local/projeto
|
|
595
|
+
```
|
|
596
|
+
|
|
597
|
+
**Opção 2 — Pular a checagem (temporariamente, risco do usuário):**
|
|
598
|
+
```bash
|
|
599
|
+
npx smoonb backup --skip-supabase-version-check
|
|
600
|
+
npx smoonb restore --skip-supabase-version-check
|
|
601
|
+
```
|
|
602
|
+
|
|
603
|
+
> **Nota para usuários de Scoop (Windows):** o repositório do Scoop pode levar alguns dias para atualizar após um release. Use `--skip-supabase-version-check` até que o Scoop disponibilize a versão atualizada.
|
|
604
|
+
|
|
605
|
+
### Personal Access Token inválido ou ausente
|
|
606
|
+
|
|
607
|
+
1. Verificar se `SUPABASE_ACCESS_TOKEN` está no `.env.local`
|
|
608
|
+
2. Gerar novo token: https://supabase.com/dashboard/account/tokens
|
|
609
|
+
3. Atualizar `.env.local` com o novo token
|
|
610
|
+
|
|
611
|
+
### Database URL incorreta
|
|
612
|
+
- Verificar senha na URL de conexão
|
|
613
|
+
- Usar string de conexão do Dashboard Supabase (Settings → Database)
|
|
614
|
+
- Testar conexão: `psql "sua-database-url" -c "SELECT 1"`
|
|
615
|
+
|
|
616
|
+
### Arquivo .backup.gz não pode ser restaurado
|
|
617
|
+
|
|
618
|
+
O smoonb suporta automaticamente:
|
|
619
|
+
- ✅ `.backup.gz` - Lê o conteúdo compactado sem modificar o arquivo original
|
|
620
|
+
- ✅ `.backup` - Restaura diretamente
|
|
621
|
+
|
|
622
|
+
Se houver problemas:
|
|
623
|
+
1. Verificar se Docker está rodando
|
|
624
|
+
2. Verificar permissões do arquivo
|
|
625
|
+
3. Verificar espaço em disco
|
|
626
|
+
|
|
627
|
+
### Erro ao baixar Edge Functions
|
|
628
|
+
|
|
629
|
+
1. Verificar se `SUPABASE_ACCESS_TOKEN` está configurado
|
|
630
|
+
2. Verificar se o projeto está linkado: `supabase link`
|
|
631
|
+
3. Verificar se as functions existem no servidor
|
|
632
|
+
|
|
633
|
+
### Erro ao baixar Migrations
|
|
634
|
+
|
|
635
|
+
1. Verificar se `SUPABASE_ACCESS_TOKEN` está configurado
|
|
636
|
+
2. Verificar se o projeto está linkado: `supabase link`
|
|
637
|
+
3. Verificar se há migrations no servidor
|
|
638
|
+
|
|
639
|
+
## 🔒 Segurança
|
|
640
|
+
|
|
641
|
+
- **Backup Automático**: Sempre cria backup do `.env.local` antes de alterações
|
|
642
|
+
- **Mapeamento Local**: Mapeamento de variáveis salvo apenas localmente
|
|
643
|
+
- **Sem Dados Sensíveis**: Nenhum dado sensível é enviado para fora do seu ambiente
|
|
644
|
+
- **Docker Isolado**: Operações de database via Docker (isolamento)
|
|
645
|
+
|
|
646
|
+
## 💼 Acesso e assinatura
|
|
647
|
+
|
|
648
|
+
O código do Supa Moonbase é disponibilizado sob licença MIT (ver `LICENSE`). Para usar o smoonb é obrigatório ter **licença ativa** e **assinatura válida**, ou estar em **período de trial**. A validação da licença ocorre no início do backup e do restore; sem licença e assinatura válidas (ou trial), o CLI não executa essas operações.
|
|
649
|
+
|
|
650
|
+
[smoonb.com/#price](https://www.smoonb.com/#price).
|
|
651
|
+
|
|
652
|
+
## 🔒 Privacidade e LGPD (resumo)
|
|
653
|
+
|
|
654
|
+
O Supa Moonbase adota o princípio de minimização de dados. Tratamos apenas as informações estritamente necessárias para controle de acesso e faturamento (por exemplo, identificador de conta e contato). Os propósitos, bases legais e direitos do titular estão descritos na [Política de Privacidade](https://www.smoonb.com/privacy).
|
|
655
|
+
|
|
656
|
+
## 📋 Termos de Serviço e uso de marca
|
|
657
|
+
|
|
658
|
+
A licença de código (MIT) não substitui os [Termos de Serviço](https://www.smoonb.com/terms) que regem o acesso operacional e a validação de assinatura.
|
|
659
|
+
|
|
660
|
+
"Supa Moonbase" e elementos de identidade visual são marcas da Goalmoon Tecnologia Ltda.; o uso de marca e assets de branding é restrito, conforme os [Termos de Serviço](https://www.smoonb.com/terms).
|
|
661
|
+
|
|
662
|
+
[FAQ](https://www.smoonb.com/#faq).
|
|
663
|
+
|
|
664
|
+
## 📝 Licença
|
|
665
|
+
|
|
666
|
+
O código do Supa Moonbase é disponibilizado sob licença MIT. Veja [LICENSE](LICENSE) para o texto completo da licença. Uma tradução em português está disponível em [LICENSE.pt-BR.md](LICENSE.pt-BR.md) apenas para conveniência.
|
|
667
|
+
|
|
668
|
+
## 🤝 Contribuição
|
|
669
|
+
|
|
670
|
+
Contribuições são bem-vindas. [www.smoonb.com/#price](https://www.smoonb.com/#price).
|
|
671
|
+
|
|
672
|
+
|
|
673
|
+
---
|
|
674
|
+
|
|
675
|
+
**Desenvolvido por:** Goalmoon Tecnologia LTDA
|
|
676
|
+
**Website:** https://www.smoonb.com
|
|
677
|
+
**GitHub:** https://github.com/almmello/smoonb
|
|
678
|
+
|
|
679
|
+
Teste adicional do caminho real de restore: `npm run test:restore:docker`. Usa PostgreSQL descartável, dados fictícios e transporte HTTP simulado para Storage; cobre Auth, permissões, ciclos, rollback, arquivos e metadados.
|