Chat · sem KYC
Hospede Matrix (Synapse) em um VPS offshore
Execute seu próprio homeserver Matrix em uma VPS offshore e sem KYC, e tenha em mãos as chaves da sua própria rede de chat federada e criptografada de ponta a ponta.
O que é
Synapse é a implementação de referência do servidor Matrix, um protocolo aberto para chat, voz e vídeo em tempo real, descentralizados e criptografados de ponta a ponta. Hospedar o próprio Synapse te dá um homeserver próprio, que pode se federar com toda a rede Matrix ou permanecer totalmente privado, com cada mensagem, arquivo de mídia e conta hospedados em hardware sob seu controle.
Por que hospedar offshore
Metadados de chat (quem fala com quem, quando e de onde) são exatamente o tipo de dado que plataformas centralizadas e as jurisdições onde estão hospedadas registram e repassam. Em uma VPS offshore, sem KYC e paga em cripto, o homeserver que guarda as mensagens e as chaves de criptografia da sua comunidade não está registrado em nome de nenhuma identidade do mundo real e fica em uma jurisdição favorável à privacidade, fora do alcance do seu país de origem.
A implantação
Uma configuração de referência funcional
Copie isto para uma instância nova do ChainVPS. Substitua os placeholders e depois coloque no ar.
# ── Configuração única, executada nesta ordem no Ubuntu 24.04 (Docker + compose-plugin instalados) ──
#
# 1. Gere a configuração do Synapse (substitua matrix.example.com pelo seu domínio real):
# mkdir -p synapse-data pgdata
# docker run --rm -v "$(pwd)/synapse-data:/data" \
# -e SYNAPSE_SERVER_NAME=matrix.example.com \
# -e SYNAPSE_REPORT_STATS=no \
# ghcr.io/element-hq/synapse:latest generate
#
# 2. Em synapse-data/homeserver.yaml, SUBSTITUA o bloco sqlite `database:`
# gerado pelo bloco postgres mostrado no final deste arquivo, e adicione
# `x_forwarded: true` no listener da porta 8008 (você está atrás de um proxy).
#
# 3. Suba a stack: docker compose up -d
#
# 4. Crie seu usuário admin:
# docker compose exec synapse register_new_matrix_user \
# -u admin -a -c /data/homeserver.yaml http://localhost:8008
#
# 5. Coloque um proxy reverso TLS (Caddy/nginx) na porta 443 -> 127.0.0.1:8008 e sirva
# /.well-known/matrix/server + /.well-known/matrix/client para federação.
services:
db:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_USER: synapse
POSTGRES_PASSWORD: CHANGE_ME_STRONG_DB_PASSWORD
POSTGRES_DB: synapse
# O Synapse EXIGE que o banco use locale C — isto é um requisito obrigatório:
POSTGRES_INITDB_ARGS: "--encoding=UTF8 --locale=C"
volumes:
- ./pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U synapse"]
interval: 10s
timeout: 5s
retries: 5
synapse:
image: ghcr.io/element-hq/synapse:latest
restart: unless-stopped
depends_on:
db:
condition: service_healthy
environment:
SYNAPSE_SERVER_NAME: matrix.example.com
SYNAPSE_REPORT_STATS: "no"
volumes:
- ./synapse-data:/data
ports:
# HTTP de cliente + federação. Vinculado a localhost — o TLS é encerrado pelo
# seu proxy reverso. Nunca exponha a porta 8008 para a internet em texto puro.
- "127.0.0.1:8008:8008"
# ── Cole isto em synapse-data/homeserver.yaml, substituindo o bloco sqlite ──
# database:
# name: psycopg2
# args:
# user: synapse
# password: CHANGE_ME_STRONG_DB_PASSWORD
# dbname: synapse
# host: db
# port: 5432
# cp_min: 5
# cp_max: 10
Firewall
Portas a abrir
| Porta | Protocolo | Finalidade |
|---|---|---|
| 443 | TCP | Proxy reverso HTTPS: API do Element/cliente + delegação de federação via /.well-known (a única porta que precisa ficar exposta à internet) |
| 8008 | TCP | Listener HTTP de cliente+federação do Synapse — vincule somente a 127.0.0.1, com o TLS tratado pelo proxy |
| 8448 | TCP | Porta opcional de federação direta; necessária apenas se você NÃO usar a delegação via .well-known (exige seu próprio TLS) |
| 5432 | TCP | PostgreSQL — apenas na rede interna do Docker, nunca publique para o host ou para a internet |
Dimensionamento adequado
Qual plano você precisa
VPS Nano / Small (2 vCPU, 2-4 GB RAM)
Servidor pessoal ou familiar, com menos de ~10 usuários, com pouca ou nenhuma federação. O Synapse consome bastante memória — 2 GB é o mínimo realista, 4 GB se você participar de salas públicas grandes.
VPS Pro (4 vCPU, 8 GB RAM)
Comunidade pequena, de dezenas a algumas centenas de usuários, com federação ativa. Ajuste os caches do Synapse e o shared_buffers do Postgres; armazenamento SSD é importante para mídia e banco de dados.
Dedicated (8+ cores, 16-32 GB RAM)
Centenas a milhares de usuários, ou participação em salas federadas muito grandes. Divida o Synapse em workers (federation sender, sync, media) e faça um ajuste dedicado no Postgres; a largura de banda ilimitada mantém o tráfego de mídia/federação sem limites.
Melhores localizações: Escolha uma localização de nível privacidade para um servidor de comunicação: Suíça e Islândia oferecem jurisdições fortes em proteção de dados e são um lar natural para um homeserver que guarda metadados de mensagens e chaves, enquanto Holanda e Luxemburgo oferecem rotas de baixa latência e bem conectadas (peering) para a Europa, garantindo chat e voz em tempo real mais fluidos. Como o Matrix funciona em tempo real, priorize a região de nível privacidade mais próxima dos seus usuários principais; largura de banda ilimitada e proteção contra DDoS incluída são importantes, pois um homeserver federado e exposto à internet é um alvo constante.
Bloqueie tudo
Checklist de hardening
- Desative o registro aberto: defina enable_registration: false, ou restrinja os cadastros com registration_requires_token e tokens por convite — um servidor Matrix aberto é encontrado e inundado por bots de spam em poucos dias.
- Controle de federação: use a delegação via /.well-known/matrix/server para manter seu server_name limpo (@user:example.com) e, se o servidor for privado, defina federation_domain_whitelist (ou desative a federação por completo) para impedir que servidores desconhecidos cheguem até você.
- Restrinja as pré-visualizações de URL e a mídia: url_preview_enabled busca URLs arbitrárias no lado do servidor (risco de SSRF) — mantenha o padrão url_preview_ip_range_blacklist para faixas privadas, limite o max_upload_size e execute retenção/limpeza periódica de mídia, pois o armazenamento de mídia cresce sem limite.
- Reforce os limites de taxa (rate limits) atrás do proxy: defina x_forwarded: true no listener da porta 8008 para que o Synapse veja os IPs reais dos clientes, e então ajuste rc_login, rc_registration e rc_message para conter força bruta e abusos; a proteção DDoS da ChainVPS cobre a camada L3/4 abaixo disso.
- Faça backup do Postgres e da chave de assinatura: gere dumps do banco regularmente e copie synapse-data/*.signing.key para um local externo — perder a chave de assinatura significa que a identidade do seu servidor e toda a confiança de federação se perdem para sempre.
- Mantenha tudo atualizado: fixe e atualize regularmente a tag ghcr.io/element-hq/synapse, mantenha report_stats: no e nunca publique as portas 8008 ou 5432 para a internet — apenas a 443 (e opcionalmente a 8448) deve ficar acessível.
Perguntas
Hospedagem Matrix (Synapse) — FAQ
Preciso ter meu próprio domínio?
Sim. Os IDs de usuário do Matrix e a federação estão vinculados a um domínio (ex.: @you:example.com). Você precisa de um domínio com DNS sob seu controle para apontar para a VPS e servir os registros de federação /.well-known. O domínio pode ser registrado por meio de um registrador que respeite a privacidade; o servidor em si continua sem KYC.
Posso rodar o Synapse totalmente privado, sem federação?
Sim. Defina um federation_domain_whitelist vazio ou omita o listener de federação para que seu homeserver nunca se comunique com a rede pública do Matrix. Seus usuários continuam tendo chat, voz e vídeo totalmente criptografados de ponta a ponta entre si, inteiramente no seu servidor offshore.
Por que PostgreSQL em vez do SQLite padrão?
O Synapse vem com SQLite apenas para testes rápidos. Ele não lida bem com concorrência ou carga de federação e não pode ser escalado com workers. Qualquer implantação real deve usar PostgreSQL criado com locale C (o arquivo compose acima faz isso automaticamente para você); migrar depois é doloroso, então comece direto no Postgres.
De quanta RAM o Synapse realmente precisa?
Mais do que as pessoas esperam. Um servidor tranquilo, de um único usuário, cabe em ~1,5-2 GB, mas assim que você entra em salas federadas grandes, os caches por sala fazem a memória disparar. Reserve 4 GB para uma comunidade pequena e ajuste os caches (caches: global_factor) conforme sua RAM, em vez de deixá-los crescer sem controle.
Qual cliente meus usuários devem instalar?
O Element (web, desktop, iOS, Android) é o cliente padrão do Matrix e se conecta ao seu homeserver a partir da URL informada. O registro /.well-known/matrix/client que você serve na porta 443 permite que o Element descubra seu servidor automaticamente apenas a partir do ID Matrix do usuário.
Hospedar offshore prejudica a federação ou a qualidade das chamadas?
Não. A federação funciona sobre HTTPS padrão independentemente da localização, e a proteção DDoS incluída mantém o servidor exposto à internet estável. Para voz/vídeo em tempo real, escolha a localização de nível privacidade mais próxima dos seus usuários para minimizar a latência; Holanda e Luxemburgo têm boa conectividade (peering) para tráfego europeu.
Mais para hospedar você mesmo
Outros stacks de um clique
Implante Matrix (Synapse)
nos próximos 60 segundos.
Banda ilimitada · DDoS incluído · 21 criptomoedas · sem KYC.