Docker Engine
O RestGo é distribuído como uma imagem única. Não é necessário instalar Go, Node ou PostgreSQL separadamente.
DOCUMENTAÇÃO
Instale o RestGo, conecte seu PostgreSQL e publique sua primeira rota REST em poucos passos.
ANTES DE COMEÇAR
O RestGo é distribuído como uma imagem única. Não é necessário instalar Go, Node ou PostgreSQL separadamente.
Por padrão o painel responde na porta 8080. Em produção, recomendamos um proxy reverso HTTPS.
Separe as senhas administrativas das credenciais usadas pelos bancos de destino.
INSTALAÇÃO
O fluxo recomendado usa um arquivo .env e um volume Docker persistente. A tag latest acompanha a versão mais recente publicada.
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 .envAntes 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_EXTERNALNã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.
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:latestO 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.
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}}' restgoCom o container saudável, abra o painel em localhost:8080/dashboard e use RESTGO_AUTHORIZATION para entrar.
PERSISTÊNCIA
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.
restgo_data/var/lib/restgopostgres/Banco administrativo do RestGo.storage/Uploads e arquivos do Storage.backups/Backups manuais gerados pelo painel.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.
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
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
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_PauloDeixe 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
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.
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.
Guarde os arquivos fora do container. O exemplo usa C:\RestGo\tls, que permanece após reiniciar ou recriar o serviço.
Execute no PowerShell com o OpenSSL disponível no PATH. A chave server.key é privada e nunca deve ser enviada ao cliente ou versionada.
.envNo Windows, use barras normais nos valores _SOURCE. O Docker Compose monta os dois arquivos como somente leitura.
Na raiz do projeto, o Compose encontra os arquivos e configura os caminhos internos automaticamente.
$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"
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
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
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
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
No painel, os bancos representam destinos PostgreSQL; os endpoints são scripts SQL nomeados. O vínculo entre eles publica a rota.
:nome./v1/{slug_banco}/{slug_endpoint}.REQUEST{
"cliente_id": 42,
"valor": 189.90
}RESPONSE{
"success": true,
"error": null,
"data": { "id": 918 }
}OPERAÇÃO
O Dashboard reúne tráfego, códigos HTTP, performance, autenticação, workflows, quota de Storage e saúde de execução.
Orquestre ações HTTP, SQL, condições, loops, e-mail, backup e Google Drive em um editor visual.
Arquivos e backups manuais ficam no volume persistente, com quotas configuráveis e controles de acesso.

REFERÊNCIA
Copie o conteúdo abaixo para criar seu .env. Troque todos os valores de exemplo que sejam credenciais antes de iniciar em produçã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
| Nome e padrão | Explicação | |
|---|---|---|
| Aplicação e deploy | ||
RESTGO_PORT | 8080 | Porta HTTP interna da aplicação; o Compose também a publica no host. |
RESTGO_BASE_URL | http://localhost:8080 | URL pública do painel, usada nos links de e-mail e no retorno do Google Drive. |
RESTGO_TIMEZONE | America/Sao_Paulo | Fuso 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_CIDRS | vazio | Redes confiáveis, separadas por vírgula, autorizadas a conectar ao PostgreSQL externo. |
RESTGO_POSTGRES_EXTERNAL_HOST | vazio | DNS ou IP público informado aos clientes provisionados pelo painel. |
RESTGO_POSTGRES_EXTERNAL_PORT | 5432 | Porta PostgreSQL publicada e informada aos clientes externos. |
RESTGO_POSTGRES_EXTERNAL_BIND_ADDRESS | 0.0.0.0 | Endereço de bind no host Docker; mantenha firewall e CIDRs restritos. |
RESTGO_POSTGRES_ALLOW_INSECURE_EXTERNAL | false | Permite conexão externa sem TLS somente em LAN/VPN confiável. false exige TLS. |
RESTGO_POSTGRES_TLS_CERT_FILE | vazio | Caminho interno do container para o certificado TLS; necessário no fluxo docker run. |
RESTGO_POSTGRES_TLS_KEY_FILE | vazio | Caminho interno do container para a chave privada TLS; necessário no fluxo docker run. |
RESTGO_POSTGRES_TLS_CERT_SOURCE | vazio | Caminho do certificado no host, montado automaticamente pelo Docker Compose. |
RESTGO_POSTGRES_TLS_KEY_SOURCE | vazio | Caminho da chave privada no host, montado automaticamente pelo Docker Compose. |
| Banco administrativo e bancos de destino | ||
POSTGRES_PASSWORD | troque-esta-senha-do-banco-administrativo | Senha da role administrativa fixa restgo do PostgreSQL interno. |
RESTGO_POSTGRES_PASSWORD_RECOVERY | false | Ativa a recuperação emergencial da senha administrativa no próximo boot; volte para false depois. |
RESTGO_APP_DB_USER | restgo_app | Usuário sem poderes administrativos usado somente pela API. |
RESTGO_APP_DB_PASSWORD | troque-esta-senha-do-usuario-da-api | Senha do usuário de runtime da API no banco administrativo. |
RESTGO_USER_DB_EXTERNAL | restgo_dynamic | Usuário restrito usado para abrir conexões com bancos de destino das rotas dinâmicas. |
RESTGO_PASSWORD_DB_EXTERNAL | troque-esta-senha-dos-bancos-dinamicos | Senha do usuário usado nos bancos de destino; não reutilize a senha administrativa. |
| Pools PostgreSQL | ||
DATABASE_MAX_OPEN_CONNS | 20 | Máximo de conexões abertas em cada pool, administrativo e dinâmico. |
DATABASE_MAX_IDLE_CONNS | 10 | Máximo de conexões ociosas mantidas em cada pool. |
DATABASE_CONN_MAX_LIFETIME_MINUTES | 30 | Tempo máximo de vida de uma conexão, em minutos. |
DATABASE_CONN_MAX_IDLE_TIME_MINUTES | 5 | Tempo máximo que uma conexão pode permanecer ociosa, em minutos. |
| Acesso e sessões | ||
RESTGO_AUTHORIZATION | change-this-token | Token de acesso ao painel e às APIs administrativas. |
JWT_SECRET | change-this-with-a-random-secret-of-at-least-32-characters | Chave aleatória usada para JWT; deve ter no mínimo 32 caracteres. |
JWT_ISSUER | restgo | Valor do emissor incluído nos tokens JWT. |
AUTH_TOKEN_TTL_HOURS | 24 | Duração, em horas, do JWT emitido em um login normal. |
AUTH_REMEMBER_TOKEN_TTL_HOURS | 8760 | Duração, em horas, do JWT quando o usuário escolhe manter a sessão. |
| Senhas e autenticação | ||
AUTH_ARGON2_TIME_COST | 3 | Número de iterações do algoritmo Argon2id para proteção de senhas. |
AUTH_ARGON2_MEMORY_COST | 65536 | Memória do Argon2id em KiB; o padrão equivale a 64 MiB. |
AUTH_ARGON2_PARALLELISM | 4 | Grau de paralelismo usado no processamento Argon2id. |
AUTH_MAX_LOGIN_ATTEMPTS | 5 | Quantidade de tentativas consecutivas permitidas antes do bloqueio temporário. |
AUTH_LOCKOUT_MINUTES | 15 | Duração, em minutos, do bloqueio após excesso de tentativas. |
AUTH_RESET_TOKEN_TTL_MINUTES | 30 | Validade, em minutos, do token de redefinição de senha. |
AUTH_RESET_REQUEST_COOLDOWN_SECONDS | 60 | Intervalo mínimo, em segundos, entre solicitações de redefinição. |
AUTH_EMAIL_CONFIRMATION_TOKEN_TTL_MINUTES | 1440 | Validade, em minutos, do token de confirmação de e-mail. |
| E-mail SMTP | ||
AUTH_SMTP_HOST | vazio | Host SMTP. Quando vazio, o fluxo de e-mail fica desabilitado. |
AUTH_SMTP_PORT | 587 | Porta do servidor SMTP. |
AUTH_SMTP_USERNAME | vazio | Usuário de autenticação do provedor SMTP. |
AUTH_SMTP_PASSWORD | vazio | Senha de autenticação do provedor SMTP. |
AUTH_SMTP_FROM | vazio | Remetente; aceita endereço completo ou nome de exibição, usando o usuário SMTP como endereço. |
AUTH_SMTP_TLS | starttls | Modo TLS: starttls (recomendado), implicit ou none somente no localhost. |
AUTH_SMTP_TIMEOUT_SECONDS | 10 | Tempo máximo, em segundos, para operações SMTP. |
| Storage, backup e auditoria | ||
STORAGE_MAX_GIB | 10 | Capacidade total do Storage em GiB; aceita valores decimais. |
BACKUP_MAX_GIB | 10 | Limite de importação de arquivos .dump pelo painel, em GiB; aceita decimais. |
LOG_ASYNC_QUEUE_SIZE | 1024 | Capacidade da fila de auditoria assíncrona; novos logs são descartados em saturação. |
LOG_ASYNC_WORKERS | 2 | Número de workers que gravam eventos de auditoria em lote. |
LOG_RETENTION_DAYS | 30 | Dias de retenção de auditoria, workflows e amostras de desempenho. |
SEGURANÇA
JWT_SECRET aleatório com pelo menos 32 caracteres e um token administrativo forte./var/lib/restgo em armazenamento persistente.