Antes de comprar ou instalar um script FiveM, teste-o como um líder de QA: execute-o em um Docker “Test City” isolado, siga a lista de verificação de aceitação, pontue o risco de 0-100 e avalie o fornecedor antes que o dinheiro mude de mãos. Este guia fornece aos proprietários de servidores e desenvolvedores o fluxo de trabalho completo — um stack docker compose FXServer + MariaDB para copiar e colar, limites de desempenho do resmon, verificações de segurança e um playbook de manutenção para depois que você enviar.
Resumo
- Gire para cima Cidade de Teste (Docker) para isolar e comparar qualquer script com segurança.
- Execute o Lista de verificação de aceitação antes que um centavo mude de mãos.
- Use o Pontuação de risco (0–100) para decidir enviar/manter/rejeitar.
- Vendedores veterinários com o Rubrica do Fornecedor (não pule isso).
- Se for comprar, prefira lojas de boa reputação — veja nossas escolhas: Melhores Lojas Tebex.
Parte 1 — “Test City” (Docker) para garantia de qualidade de scripts segura e repetível
O que você ganha
- FXServer em contêiner + MariaDB (+ Administrador)
- Limpar servidor.cfg com
oxmysqle recursos básicos - Montado em encadernação
recursos/personalizadosonde você solta o script em teste - Nomes/portas de rede determinísticos para strings de banco de dados simples
Baixe test-city.zip (Github)
Modo de usar:
- Descompactar →
cd test-city - Cópia
.env.exemplopara.enve defina seuCHAVE_DE_LICENÇA(e credenciais de banco de dados, se preferir). - Derrubar
oxmysqlemdados do servidor/recursos/[autônomo]/oxmysql/. - Coloque o script em teste em
dados do servidor/recursos/personalizado/ /e adicionegarantirparaservidor.cfg. docker compose build && docker compose up -d→ conectar via Direct Connect parahost local:30120.
Pré-requisitos: Docker + Docker Compose, uma chave de licença cfx e um
oxmysqlcópia do recurso (coloque emdados do servidor/recursos/[autônomo]/oxmysql).
Layout de pasta
test-city/ ├─ docker-compose.yml ├─ fxserver/ │ ├─ Dockerfile │ └─ entrypoint.sh ├─ server-data/ │ ├─ server.cfg │ └─ resources/ │ ├─ [standalone]/oxmysql/ # coloque o oxmysql aqui │ └─ custom/ # coloque o script em teste aqui (ex.: myscript/) └─ .env
.env (exemplo)
LICENSE_KEY=changeme_cfx_license_key MYSQL_DATABASE=fivem MYSQL_USER=fivem MYSQL_PASSWORD=fivempw MYSQL_ROOT_PASSWORD=rootpw FX_ARTIFACT_URL=https://runtime.fivem.net/artifacts/fivem/build_proot_linux/master/LATEST.tar.xz # Dica: substitua por uma URL de artefato específica em que você confia para reprodutibilidade.
docker-compose.yml
version: "3.9"
networks:
testcity:
volumes:
db_data:
services:
db:
image: mariadb:10.11
restart: unless-stopped
environment:
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
command: >
--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
--innodb_buffer_pool_size=256M
volumes:
- db_data:/var/lib/mysql
networks: [testcity]
adminer:
image: adminer:4
restart: unless-stopped
ports:
- "8080:8080"
networks: [testcity]
depends_on: [db]
fxserver:
build:
context: ./fxserver
args:
FX_ARTIFACT_URL: ${FX_ARTIFACT_URL}
restart: unless-stopped
environment:
LICENSE_KEY: ${LICENSE_KEY}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
depends_on: [db]
networks: [testcity]
ports:
- "30120:30120/udp"
- "30120:30120/tcp"
- "40120:40120/tcp" # txAdmin (opcional)
volumes:
- ./server-data:/opt/fivem/server-data
fxserver/Dockerfile
FROM debian:bookworm-slim
ARG FX_ARTIFACT_URL
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y --no-install-recommends
xz-utils curl ca-certificates tini bash &&
rm -rf /var/lib/apt/lists/*
# Baixar e extrair o artefato FXServer (URL fornecida via build-arg)
RUN mkdir -p /opt/fivem &&
curl -fsSL "${FX_ARTIFACT_URL}" -o /opt/fivem/fx.tar.xz &&
tar -xJf /opt/fivem/fx.tar.xz -C /opt/fivem &&
rm -f /opt/fivem/fx.tar.xz
# Não-root
RUN useradd -ms /bin/bash fivem
USER fivem
WORKDIR /opt/fivem
COPY --chown=fivem:fivem ../server-data /opt/fivem/server-data
COPY --chown=fivem:fivem entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/usr/bin/tini","--"]
CMD ["/bin/bash","/entrypoint.sh"]
fxserver/ponto de entrada.sh
#!/usr/bin/env bash set -euo pipefail # Fornece string de BD para oxmysql via server.cfg (já definida lá), # apenas garante que o BD esteja acessível antes da inicialização para evitar erros de spam. echo "Aguardando banco de dados..." until nc -z db 3306; do sleep 1; done echo "BD pronto." # Executa o FXServer com nosso server.cfg # A maioria dos artefatos do Linux envia um run.sh na raiz do artefato. exec bash /opt/fivem/run.sh +exec /opt/fivem/server-data/server.cfg
Se o seu artefato usar um caminho de iniciador diferente, ajuste a última linha de acordo (por exemplo,
/opt/fivem/alpine/opt/cfx-server/run.sh).
dados do servidor/servidor.cfg (enxuto, pronto para testes)
# ---------- Identidade ----------
sv_licenseKey "%{LICENSE_KEY}%" # injetado pelo env no comando entrypoint ou substitua manualmente
sv_hostname "Test City — QA de Script"
sets tags "qa,testing,fivemx"
sv_maxclients 2
onesync on
sv_scriptHookAllowed 0
sv_enforceGameBuild 3095
# ---------- Rede ----------
endpoint_add_tcp "0.0.0.0:30120"
endpoint_add_udp "0.0.0.0:30120"
# ---------- Banco de Dados (oxmysql) ----------
set mysql_connection_string "mysql://%{MYSQL_USER}%:%{MYSQL_PASSWORD}%@db:3306/%{MYSQL_DATABASE}%?charset=utf8mb4"
# ---------- Recursos Principais ----------
ensure mapmanager
ensure chat
ensure spawnmanager
ensure sessionmanager
ensure hardcap
ensure baseevents
# ---------- Datastore ----------
ensure oxmysql
# ---------- Em Teste ----------
# Coloque sua pasta de script em resources/custom/ e habilite aqui:
# ensure myscript
# ---------- Auxiliares de QA ----------
# Logs detalhados em dev
setr con_minSeverity info
# Habilitar painel txAdmin (opcional)
setr txAdminPort 40120
Habilite seu script: copie-o para
dados do servidor/recursos/personalizado/myscript/e adicionegarantir meu scriptpara o bloco inferior.
Execute-o
cd test-city docker compose build docker compose up -d # Administrador em http://localhost:8080 (servidor: db, usuário: fivem, senha: fivempw) # Conectar cliente FiveM → Conexão direta: your-docker-host:30120
Parte 2 — Lista de verificação de aceitação do roteiro (não pule)
Use isso sempre. Copie para o seu rastreador e marque os itens.
A. Pré-voo (antes da instalação)
- Tipo de fonte: Código aberto / parcialmente aberto / somente custódia.
- Dependências listadas: estrutura (ESX/QBCore/QBOX),
boi_lib,oxmysql,PoliZona, etc. - fxmanifest.lua:
lua54 'sim', corretojogo 'gta5',versão_fxnão antigo. - Documentação: etapas de instalação, exemplos de configuração, permissões, localidades, conflitos conhecidos.
- Licença/Termos de Serviço: direitos de uso, política de reembolso, atualizações, canal de suporte.
B. Instalabilidade
- Nenhum erro de console em
garantir: nenhum rastreamento de pilha ou spam de ativos ausentes. - Não
nativos depreciadosspam. - Carregamentos de configuração limpos: sem erros de sintaxe JSON/Lua.
- Migrações de banco de dados: crie tabelas uma vez; reinicializações não reaplicam nem interrompem.
C. Funcional
- Essencial fluxos de trabalho: caminho feliz testado (por exemplo, compra, fluxo de trabalho, criação).
- Casos extremos: entradas erradas, permissões ausentes, quantidades fora do intervalo.
- Localização: nenhuma sequência de caracteres codificada se as localidades forem prometidas.
- Permissões: comandos de equipe/administrador restritos; sem acesso livre do lado do cliente.
D. Desempenho (cliente e servidor)
resmon: ocioso ≤ 0,10 ms, ativo ≤ 0,50 ms (cliente).- Saúde do servidor: sem avisos de problemas longos sob uso normal.
- Consultas ao BD: sem loops apertados; instruções preparadas usadas; N+1 mínimo.
E. Segurança
- Validação do lado do servidor: cada evento do servidor valida
fonte, permissões e tipos de entrada. - Nenhuma confiança no cliente: mudanças de dinheiro/inventário somente pela lógica do servidor.
- Nenhuma avaliação/
cadeia de carga/código remoto padrões. - Antiabuso: limites de taxa/limitações em endpoints de spam.
- Integridade do depósito em garantia: sem backdoors em carregadores de configuração não-escrow.
Bom padrão de evento (exemplo):
RegisterNetEvent('myscript:buy', function(item, amount)
local src = source
if type(item) ~= 'string' or type(amount) ~= 'number' or amount < 1 then return end
if not HasPermission(src, 'shop.buy') then return end
local xPlayer = GetPlayer(src) -- adaptador de framework
if not xPlayer then return end
-- validar preço no servidor, verificar limites de inventário, fazer DB em uma transação
end)
F. Compatibilidade e Limpeza
- Adaptadores de estrutura presentes (ESX/QBCore/QBOX) ou claramente declarado sem suporte.
- Nenhum vazamento global, nomes de eventos exclusivos, sem suposições de nomes de recursos.
- Desinstalar limpo: remover o recurso não quebra os outros.
Parte 3 — Modelo de pontuação de risco quantitativo (0–100)
Use isso para decidir "enviar/manter/rejeitar". Quanto menor, melhor.
| Fator | Peso | Como pontuar (0=bom → 5=ruim) |
|---|---|---|
| Desempenho | 0.20 | resmon ocioso: 0=≤0,10ms, 1=≤0,20, 3=≤0,50, 5=>0,50; picos adicionam +1 |
| Segurança | 0.25 | 0=todos os limites de taxa + validados pelo servidor; 3=algumas lacunas; 5=confia no cliente / eventos inseguros |
| Estabilidade | 0.15 | 0=sem erros; 3=avisos ocasionais; 5=erros/problemas frequentes |
| Compatibilidade | 0.10 | 0=adaptadores/testes; 3=apenas uma estrutura; 5=quebra dependências comuns |
| Manutenibilidade | 0.10 | 0=documentação/registro de alterações/versões semânticas; 5=sem documentação/abandonado |
| Cadeia de suprimentos/Fornecedor | 0.20 | 0=reputável, histórico, reembolsos; 5=desconhecido, sem política |
Fórmula
Pontuação de Risco = 100 * Σ(peso_i * (pontuação_i / 5))
Bandas e Ações
- 0–24 (baixo): Enviar para preparação, monitorar.
- 25–49 (Moderado): Correções necessárias antes do lançamento.
- 50–74 (Alto): Esperar; solicitar patches do fornecedor ou substituir.
- 75–100 (Crítico): Rejeitar.
Exemplo
- Perf=1, Sec=3, Estabilidade=1, Compat=1, Manutenção=2, Fornecedor=1
- Risco = 100*(.2*.2 + .25*.6 + .15*.2 + .1*.2 + .1*.4 + .2*.2) = 34 → Moderado
Parte 4 — Rubrica de verificação de fornecedores (pontuação de 0 a 5 para cada um, quanto maior for melhorar)
| Critério | Como é o "bom" | Notas |
|---|---|---|
| Identidade e Histórico | Marca clara, anos de atividade, manuseio consistente | Evite lojas de produtos descartáveis |
| Documentação | Instalar + configurar + permissões + solução de problemas | Ajuda com capturas de tela/gifs |
| Atualizar cadência | Log de alterações, versões semânticas, confirmações/lançamentos recentes | Trimestral+ está bom |
| Qualidade de suporte | SLAs de tickets/Discord, correções reproduzíveis, não apenas “reiniciar” | Respostas de exemplo |
| Transparência de Emissão | Problemas públicos conhecidos e roteiro | Honestidade > perfeição |
| Clareza sobre reembolso/ToS | Período de reembolso, condições, termos de licença | Sem padrões escuros |
| Prova de teste | Vídeo de preparação, métricas de desempenho, lista de estruturas | Melhor ainda: servidor de demonstração |
| Segurança Higiene | Menciona verificações do lado do servidor, sem chaves sensíveis, sem avaliação | Pergunte sobre auditorias |
| Política de compatibilidade | ESX/QBCore/QBOX declarado, adaptadores, matriz de versão | Construções apoiadas pelo estado |
| Preço e valor | Justo em termos de complexidade, sem paywalls de dependência | Cuidado com as armadilhas de upsell |
Pontuação da rubrica (0–50):
- 40–50: Forte — fornecedor preferencial
- 30–39: Aceitável — monitor
- 20–29: Fraco — prossiga com cautela
- <20: Evitar
Dica profissional: Faça uma referência cruzada com marketplaces confiáveis. Comece aqui: Melhores Lojas Tebex.
Parte 5 — Manual de Manutenção (Após o Envio)
- Fixação de versão: lançamentos de script de bloqueio + versões de dependência (por exemplo,
oxmysql,boi_lib). - Primeira preparação: todas as atualizações chegam Cidade de Teste; execute a lista de verificação de aceitação novamente.
- Backups e reversão: Instantâneo do banco de dados + arquivos de recursos antes de cada atualização. Mantenha um Rollback.md com passos exatos.
- Teste de fumaça de CI (opcional, recomendado): conexão de cliente sem interface + macro de comando para atingir os fluxos principais; analisar o console do servidor em busca de erros.
- Métricas operacionais: mantenha um registro simples por script: média de respostas (ocioso/ativo), contagem de erros/sessão, notas de incidentes.
- Disciplina de registro de alterações: exigir registros de alterações do fornecedor; manter suas próprias notas de integração.
- Eventos programados sem risco: atualizar fora dos horários de pico; anunciar janelas de manutenção.
Parte 6 — Modelos que você pode copiar
A. Plano de Teste (por script)
Plano de teste de script # — ## Framework(s) de Contexto: ESX/QBCore/QBOX Dependências: oxmysql vX, ox_lib vY, PolyZone vZ Migrações de Banco de Dados: sim/não Escrow: sim/não ## Casos Funcionais - [ ] Caso 1: - [ ] Caso 2: - [ ] Negativo 1: ## Desempenho resmon ocioso: ____ ms resmon ativo: ____ ms (cenário: ______) ## Verificações de Segurança - [ ] Todos os eventos do servidor validam origem/permissão/entrada - [ ] Limites de taxa presentes - [ ] Nenhuma mutação de dinheiro/estoque confiável para o cliente ## Logs e Erros Cole o trecho (servidor + F8): ## Resultado Aprovado/Reprovado + Observações
B. Rollback.md (esqueleto)
Reversão do # — 1) Disable script: `stop ` 2) Restore resource files from backup: 3) Restore DB snapshot: 4) Restart FXServer 5) Verify: console clean, perf normal, flows ok
C. Modelo de Problema
**Resumo** O que aconteceu versus o esperado, com registros de data e hora. **Etapas de reprodução** 1) ... 2) ... **Ambiente** Construção do artefato: Estrutura e versões: Versão do script: Outras dependências: **Logs** Console do servidor: F8: **Anexos** Telas/vídeo, se possível.
Como usar este guia com eficiência
- Cidade de teste Bootstrap uma vez, mantenha-o limpo.
- Para cada script candidato:
- Cair em
recursos/personalizado/, habilitar emservidor.cfg. - Execute o Lista de verificação de aceitação.
- Calcular o Pontuação de Risco.
- Verifique o vendedor com o Rubrica do Fornecedor.
- Cair em
- Se for aprovado, entre na preparação; caso contrário, solicite correções ou vá embora.
Precisa de mais guias de testes? Aprenda a medir o desempenho do script com Resmon em FiveM, corrigir avisos de engate de thread do servidor, e construir o servidor de teste Parte 1 com Docker para FiveM.
Depois que o fluxo de trabalho de teste estiver pronto, compare o framework exato, dependências, arquivos entregues e notas de configuração no marketplace de scripts FiveM.