DOCUMENTAÇÃO

Do banco à API,
sem atrito.

Instale o RestGo, conecte seu PostgreSQL e publique sua primeira rota REST em poucos passos.

Tempo estimado 30 minImagem latest

ANTES DE COMEÇAR

O que você precisa

01

Docker Engine

O RestGo é distribuído como uma imagem única. Não é necessário instalar Go, Node ou PostgreSQL separadamente.

02

Uma porta local

Por padrão o painel responde na porta 8080. Em produção, recomendamos um proxy reverso HTTPS.

03

Credenciais seguras

Separe as senhas administrativas das credenciais usadas pelos bancos de destino.

INSTALAÇÃO

Execute a imagem Docker

O fluxo recomendado usa um arquivo .env e um volume Docker persistente. A tag latest acompanha a versão mais recente publicada.

1

Baixe o modelo de configuração

Crie uma pasta para a instalação e baixe o .env.example correspondente à imagem publicada.

Invoke-WebRequest -Uri https://raw.githubusercontent.com/atentor/RestGo/main/.env.example -OutFile .env
notepad .env
2

Configure os segredos essenciais

Antes de iniciar, substitua todos os valores de exemplo. Estes são obrigatórios para uma instalação segura:

POSTGRES_PASSWORDRESTGO_APP_DB_PASSWORDRESTGO_AUTHORIZATIONJWT_SECRET mín. 32 caracteresRESTGO_PASSWORD_DB_EXTERNAL
Importante

Não configure DATABASE_URL: o banco administrativo é interno ao container. Defina RESTGO_BASE_URL com a URL pública se ela não for http://localhost:8080.

3

Crie o volume e inicie o container

O volume guarda o PostgreSQL administrativo, arquivos enviados e backups. Não execute duas instâncias com o mesmo volume.

docker volume create restgo_data
docker pull ghcr.io/atentor/restgo:latest
docker run -d --name restgo --restart unless-stopped \
  --stop-timeout 60 --env-file .env \
  -p 127.0.0.1:8080:8080 \
  -v restgo_data:/var/lib/restgo \
  ghcr.io/atentor/restgo:latest

O mapeamento 127.0.0.1:8080:8080 restringe o serviço à máquina local. Coloque-o atrás de um proxy reverso HTTPS para acesso externo.

4

Confira a inicialização

A imagem executa uma verificação de saúde a cada 30 segundos, incluindo API e banco administrativo.

docker logs -f restgo
Invoke-WebRequest -Uri http://localhost:8080/health `
  -Headers @{ Authorization = "SEU_RESTGO_AUTHORIZATION" }
docker inspect --format='{{.State.Health.Status}}' restgo

Com o container saudável, abra o painel em localhost:8080/dashboard e use RESTGO_AUTHORIZATION para entrar.

PERSISTÊNCIA

Volumes: seus dados ficam fora do container

O volume Docker restgo_data é a fonte de verdade da instalação. Ele mantém o PostgreSQL administrativo, os arquivos do Storage e os backups criados pelo painel, mesmo quando o container é atualizado ou recriado.

VOLUME GERENCIADO PELO DOCKER

restgo_data/var/lib/restgo

  • postgres/Banco administrativo do RestGo.
  • storage/Uploads e arquivos do Storage.
  • backups/Backups manuais gerados pelo painel.
CICLO DE VIDA SEGURO

Atualizar o container não apaga os dados

Use o mesmo nome de volume ao recriar o container. Remover restgo remove apenas o container; não use docker volume rm restgo_data a menos que queira apagar permanentemente toda a instalação.

Ver o comando de montagem

Verifique antes de manter ou migrar

Confirme que o volume existe e veja onde o Docker o armazena. O caminho mostrado é gerenciado pelo Docker: não edite seus arquivos diretamente com o serviço em execução.

docker volume ls
docker volume inspect restgo_data
Backup de infraestrutura

Para uma cópia do volume, pare o RestGo antes de fazer um backup em nível de arquivos. Para backups de bancos de dados, prefira o fluxo do painel; assim você evita copiar um PostgreSQL enquanto ele ainda está gravando dados.

CONFIGURAÇÃO

Conecte à sua operação

URL e fuso horário

RESTGO_BASE_URL é a URL pública usada nos links de e-mail e na integração com Google Drive. Configure também o fuso IANA da operação.

RESTGO_PORT=8080
RESTGO_BASE_URL=https://api.seudominio.com
RESTGO_TIMEZONE=America/Sao_Paulo

SMTP e recuperação de senha

Deixe AUTH_SMTP_HOST vazio para desabilitar o fluxo até configurar seu provedor. Use starttls em produção.

AUTH_SMTP_HOST=smtp.exemplo.com
AUTH_SMTP_PORT=587
AUTH_SMTP_TLS=starttls
AUTH_SMTP_USERNAME=...

POSTGRESQL EXTERNO

Gere e instale certificados TLS

A exposição do PostgreSQL para terceiros é desabilitada por padrão. Ao configurá-la, mantenha TLS ativo: o RestGo entrega aos clientes o modo verify-full, que valida a criptografia e o nome DNS do servidor.

Antes de começar

Use o DNS que o cliente realmente acessará, como postgres.seudominio.com. Ele precisa constar no certificado. Para produção, use o certificado da sua CA confiável ou da CA interna; o autoassinado abaixo é indicado para desenvolvimento e redes controladas.

  1. 01
    Crie uma pasta persistente no host

    Guarde os arquivos fora do container. O exemplo usa C:\RestGo\tls, que permanece após reiniciar ou recriar o serviço.

  2. 02
    Gere o certificado e a chave

    Execute no PowerShell com o OpenSSL disponível no PATH. A chave server.key é privada e nunca deve ser enviada ao cliente ou versionada.

  3. 03
    Informe os caminhos no .env

    No Windows, use barras normais nos valores _SOURCE. O Docker Compose monta os dois arquivos como somente leitura.

  4. 04
    Recrie o serviço

    Na raiz do projeto, o Compose encontra os arquivos e configura os caminhos internos automaticamente.

PowerShell certificado autoassinado
$postgresHost = 'postgres.seudominio.com'
$tlsDirectory = 'C:\RestGo\tls'

New-Item -ItemType Directory -Force -Path $tlsDirectory

openssl req -x509 -newkey rsa:4096 -sha256 -nodes `
  -keyout "$tlsDirectory\server.key" `
  -out "$tlsDirectory\server.crt" `
  -days 365 `
  -subj "/CN=$postgresHost" `
  -addext "subjectAltName=DNS:$postgresHost"
.env acesso externo com TLS
RESTGO_POSTGRES_EXTERNAL_CIDRS=203.0.113.10/32
RESTGO_POSTGRES_EXTERNAL_HOST=postgres.seudominio.com
RESTGO_POSTGRES_EXTERNAL_PORT=5432
RESTGO_POSTGRES_ALLOW_INSECURE_EXTERNAL=false

RESTGO_POSTGRES_TLS_CERT_SOURCE=C:/RestGo/tls/server.crt
RESTGO_POSTGRES_TLS_KEY_SOURCE=C:/RestGo/tls/server.key

docker compose up --build
ENTREGA AO CLIENTE

Compartilhe só a cadeia de confiança

Forneça host, porta, usuário, senha e server.crt — ou o certificado da CA. Com um certificado autoassinado, o cliente deve confiar nele e conectar usando sslmode=verify-full.

Nunca compartilhe: server.key

Usa docker run em vez do Docker Compose?

Troque as variáveis _SOURCE pelos caminhos internos _FILE no seu .env, monte a pasta de certificados como somente leitura e publique a porta PostgreSQL junto com o comando de instalação.

RESTGO_POSTGRES_TLS_CERT_FILE=/tls/server.crt
RESTGO_POSTGRES_TLS_KEY_FILE=/tls/server.key

docker run ... --env-file .env `
  -p 0.0.0.0:5432:5432 `
  -v C:\RestGo\tls:/tls:ro `
  -v restgo_data:/var/lib/restgo `
  ghcr.io/atentor/restgo:latest
Renovação

Substitua os arquivos no diretório do host e recrie os serviços com docker compose up --build para que o PostgreSQL carregue as novas cópias. A conexão sem TLS, por meio de RESTGO_POSTGRES_ALLOW_INSECURE_EXTERNAL=true, deve ficar restrita a uma LAN ou VPN controlada — nunca à internet.

PRIMEIRA ROTA

Publique dados em quatro movimentos

No painel, os bancos representam destinos PostgreSQL; os endpoints são scripts SQL nomeados. O vínculo entre eles publica a rota.

  1. Cadastre um bancoEm Databases, informe host, porta, nome, slug e descrição do PostgreSQL de destino.
  2. Crie um endpointEm Endpoints, escreva o script SQL. Parâmetros usam o formato :nome.
  3. Vincule e escolha a versãoEm Links, associe banco e endpoint. O RestGo publica uma rota como /v1/{slug_banco}/{slug_endpoint}.
  4. Faça a chamadaEnvie parâmetros pela query string ou corpo JSON. Em conflitos, os valores do body prevalecem.
POST/v1/loja/criar-pedidoAuthorization: Bearer <JWT>
REQUEST{
  "cliente_id": 42,
  "valor": 189.90
}
RESPONSE{
  "success": true,
  "error": null,
  "data": { "id": 918 }
}

OPERAÇÃO

Feito para permanecer previsível

Observabilidade

O Dashboard reúne tráfego, códigos HTTP, performance, autenticação, workflows, quota de Storage e saúde de execução.

Workflows

Orquestre ações HTTP, SQL, condições, loops, e-mail, backup e Google Drive em um editor visual.

Storage & backup

Arquivos e backups manuais ficam no volume persistente, com quotas configuráveis e controles de acesso.

Tela de teste de endpoint do RestGo mostrando resposta JSON
Teste rotas diretamente no painel antes de publicá-las.

REFERÊNCIA

Variáveis de ambiente

Copie o conteúdo abaixo para criar seu .env. Troque todos os valores de exemplo que sejam credenciais antes de iniciar em produção.

.env valores padrão
# Aplicação e deploy
RESTGO_PORT=8080
RESTGO_BASE_URL=http://localhost:8080
RESTGO_TIMEZONE=America/Sao_Paulo
RESTGO_APP_IMAGE=

# PostgreSQL externo para terceiros
RESTGO_POSTGRES_EXTERNAL_CIDRS=
RESTGO_POSTGRES_EXTERNAL_HOST=
RESTGO_POSTGRES_EXTERNAL_PORT=5432
RESTGO_POSTGRES_EXTERNAL_BIND_ADDRESS=0.0.0.0
RESTGO_POSTGRES_ALLOW_INSECURE_EXTERNAL=false
RESTGO_POSTGRES_TLS_CERT_FILE=
RESTGO_POSTGRES_TLS_KEY_FILE=
RESTGO_POSTGRES_TLS_CERT_SOURCE=
RESTGO_POSTGRES_TLS_KEY_SOURCE=

# Banco administrativo e bancos de destino
POSTGRES_PASSWORD=troque-esta-senha-do-banco-administrativo
RESTGO_POSTGRES_PASSWORD_RECOVERY=false
RESTGO_APP_DB_USER=restgo_app
RESTGO_APP_DB_PASSWORD=troque-esta-senha-do-usuario-da-api
RESTGO_USER_DB_EXTERNAL=restgo_dynamic
RESTGO_PASSWORD_DB_EXTERNAL=troque-esta-senha-dos-bancos-dinamicos

# Pools PostgreSQL
DATABASE_MAX_OPEN_CONNS=20
DATABASE_MAX_IDLE_CONNS=10
DATABASE_CONN_MAX_LIFETIME_MINUTES=30
DATABASE_CONN_MAX_IDLE_TIME_MINUTES=5

# Acesso e sessões
RESTGO_AUTHORIZATION=change-this-token
JWT_SECRET=change-this-with-a-random-secret-of-at-least-32-characters
JWT_ISSUER=restgo
AUTH_TOKEN_TTL_HOURS=24
AUTH_REMEMBER_TOKEN_TTL_HOURS=8760

# Senhas e autenticação
AUTH_ARGON2_TIME_COST=3
AUTH_ARGON2_MEMORY_COST=65536
AUTH_ARGON2_PARALLELISM=4
AUTH_MAX_LOGIN_ATTEMPTS=5
AUTH_LOCKOUT_MINUTES=15
AUTH_RESET_TOKEN_TTL_MINUTES=30
AUTH_RESET_REQUEST_COOLDOWN_SECONDS=60
AUTH_EMAIL_CONFIRMATION_TOKEN_TTL_MINUTES=1440

# E-mail SMTP
AUTH_SMTP_HOST=
AUTH_SMTP_PORT=587
AUTH_SMTP_USERNAME=
AUTH_SMTP_PASSWORD=
AUTH_SMTP_FROM=
AUTH_SMTP_TLS=starttls
AUTH_SMTP_TIMEOUT_SECONDS=10

# Storage, backup e auditoria
STORAGE_MAX_GIB=10
BACKUP_MAX_GIB=10
LOG_ASYNC_QUEUE_SIZE=1024
LOG_ASYNC_WORKERS=2
LOG_RETENTION_DAYS=30

Legenda das variáveis

Nome e padrãoExplicação
Aplicação e deploy
RESTGO_PORT8080Porta HTTP interna da aplicação; o Compose também a publica no host.
RESTGO_BASE_URLhttp://localhost:8080URL pública do painel, usada nos links de e-mail e no retorno do Google Drive.
RESTGO_TIMEZONEAmerica/Sao_PauloFuso IANA usado pela aplicação e pelo PostgreSQL administrativo.
RESTGO_APP_IMAGE—Imagem opcional usada pelo Compose. Sem valor, ele constrói e usa restgo:local.
PostgreSQL externo para terceiros
RESTGO_POSTGRES_EXTERNAL_CIDRSvazioRedes confiáveis, separadas por vírgula, autorizadas a conectar ao PostgreSQL externo.
RESTGO_POSTGRES_EXTERNAL_HOSTvazioDNS ou IP público informado aos clientes provisionados pelo painel.
RESTGO_POSTGRES_EXTERNAL_PORT5432Porta PostgreSQL publicada e informada aos clientes externos.
RESTGO_POSTGRES_EXTERNAL_BIND_ADDRESS0.0.0.0Endereço de bind no host Docker; mantenha firewall e CIDRs restritos.
RESTGO_POSTGRES_ALLOW_INSECURE_EXTERNALfalsePermite conexão externa sem TLS somente em LAN/VPN confiável. false exige TLS.
RESTGO_POSTGRES_TLS_CERT_FILEvazioCaminho interno do container para o certificado TLS; necessário no fluxo docker run.
RESTGO_POSTGRES_TLS_KEY_FILEvazioCaminho interno do container para a chave privada TLS; necessário no fluxo docker run.
RESTGO_POSTGRES_TLS_CERT_SOURCEvazioCaminho do certificado no host, montado automaticamente pelo Docker Compose.
RESTGO_POSTGRES_TLS_KEY_SOURCEvazioCaminho da chave privada no host, montado automaticamente pelo Docker Compose.
Banco administrativo e bancos de destino
POSTGRES_PASSWORDtroque-esta-senha-do-banco-administrativoSenha da role administrativa fixa restgo do PostgreSQL interno.
RESTGO_POSTGRES_PASSWORD_RECOVERYfalseAtiva a recuperação emergencial da senha administrativa no próximo boot; volte para false depois.
RESTGO_APP_DB_USERrestgo_appUsuário sem poderes administrativos usado somente pela API.
RESTGO_APP_DB_PASSWORDtroque-esta-senha-do-usuario-da-apiSenha do usuário de runtime da API no banco administrativo.
RESTGO_USER_DB_EXTERNALrestgo_dynamicUsuário restrito usado para abrir conexões com bancos de destino das rotas dinâmicas.
RESTGO_PASSWORD_DB_EXTERNALtroque-esta-senha-dos-bancos-dinamicosSenha do usuário usado nos bancos de destino; não reutilize a senha administrativa.
Pools PostgreSQL
DATABASE_MAX_OPEN_CONNS20Máximo de conexões abertas em cada pool, administrativo e dinâmico.
DATABASE_MAX_IDLE_CONNS10Máximo de conexões ociosas mantidas em cada pool.
DATABASE_CONN_MAX_LIFETIME_MINUTES30Tempo máximo de vida de uma conexão, em minutos.
DATABASE_CONN_MAX_IDLE_TIME_MINUTES5Tempo máximo que uma conexão pode permanecer ociosa, em minutos.
Acesso e sessões
RESTGO_AUTHORIZATIONchange-this-tokenToken de acesso ao painel e às APIs administrativas.
JWT_SECRETchange-this-with-a-random-secret-of-at-least-32-charactersChave aleatória usada para JWT; deve ter no mínimo 32 caracteres.
JWT_ISSUERrestgoValor do emissor incluído nos tokens JWT.
AUTH_TOKEN_TTL_HOURS24Duração, em horas, do JWT emitido em um login normal.
AUTH_REMEMBER_TOKEN_TTL_HOURS8760Duração, em horas, do JWT quando o usuário escolhe manter a sessão.
Senhas e autenticação
AUTH_ARGON2_TIME_COST3Número de iterações do algoritmo Argon2id para proteção de senhas.
AUTH_ARGON2_MEMORY_COST65536Memória do Argon2id em KiB; o padrão equivale a 64 MiB.
AUTH_ARGON2_PARALLELISM4Grau de paralelismo usado no processamento Argon2id.
AUTH_MAX_LOGIN_ATTEMPTS5Quantidade de tentativas consecutivas permitidas antes do bloqueio temporário.
AUTH_LOCKOUT_MINUTES15Duração, em minutos, do bloqueio após excesso de tentativas.
AUTH_RESET_TOKEN_TTL_MINUTES30Validade, em minutos, do token de redefinição de senha.
AUTH_RESET_REQUEST_COOLDOWN_SECONDS60Intervalo mínimo, em segundos, entre solicitações de redefinição.
AUTH_EMAIL_CONFIRMATION_TOKEN_TTL_MINUTES1440Validade, em minutos, do token de confirmação de e-mail.
E-mail SMTP
AUTH_SMTP_HOSTvazioHost SMTP. Quando vazio, o fluxo de e-mail fica desabilitado.
AUTH_SMTP_PORT587Porta do servidor SMTP.
AUTH_SMTP_USERNAMEvazioUsuário de autenticação do provedor SMTP.
AUTH_SMTP_PASSWORDvazioSenha de autenticação do provedor SMTP.
AUTH_SMTP_FROMvazioRemetente; aceita endereço completo ou nome de exibição, usando o usuário SMTP como endereço.
AUTH_SMTP_TLSstarttlsModo TLS: starttls (recomendado), implicit ou none somente no localhost.
AUTH_SMTP_TIMEOUT_SECONDS10Tempo máximo, em segundos, para operações SMTP.
Storage, backup e auditoria
STORAGE_MAX_GIB10Capacidade total do Storage em GiB; aceita valores decimais.
BACKUP_MAX_GIB10Limite de importação de arquivos .dump pelo painel, em GiB; aceita decimais.
LOG_ASYNC_QUEUE_SIZE1024Capacidade da fila de auditoria assíncrona; novos logs são descartados em saturação.
LOG_ASYNC_WORKERS2Número de workers que gravam eventos de auditoria em lote.
LOG_RETENTION_DAYS30Dias de retenção de auditoria, workflows e amostras de desempenho.

SEGURANÇA

Checklist para produção

  • Use um JWT_SECRET aleatório com pelo menos 32 caracteres e um token administrativo forte.
  • Coloque o painel atrás de HTTPS e mantenha SMTP com TLS em produção.
  • Não registre, publique ou versione senhas, tokens ou credenciais PostgreSQL/SMTP.
  • Mantenha o volume /var/lib/restgo em armazenamento persistente.
  • Use uma conta restrita para os bancos de destino e não exponha o banco administrativo.