Chat · sin KYC
Aloja Matrix (Synapse) en un VPS offshore
Ejecuta tu propio homeserver de Matrix en un VPS offshore sin KYC y conserva las claves de tu propia red de chat federada y cifrada de extremo a extremo.
Qué es
Synapse es la implementación de referencia del servidor de Matrix, un protocolo abierto para chat, voz y vídeo en tiempo real, descentralizado y cifrado de extremo a extremo. Alojar Synapse tú mismo te da tu propio homeserver, que puede federarse con la red Matrix más amplia o permanecer completamente privado, con cada mensaje, archivo multimedia y cuenta alojados en hardware que tú controlas.
Por qué alojarlo offshore
Los metadatos del chat (quién habla con quién, cuándo y desde dónde) son exactamente el tipo de datos que las plataformas centralizadas y las jurisdicciones de sus servidores registran y entregan. En un VPS offshore sin KYC y pagado con cripto, el homeserver que guarda los mensajes y las claves de cifrado de tu comunidad no está registrado a ninguna identidad real y se encuentra en una jurisdicción favorable a la privacidad, fuera del alcance de tu país de origen.
El despliegue
Una configuración de referencia funcional
Copia esto en una nueva instancia de ChainVPS. Sustituye los marcadores de posición y ponlo en marcha.
# ── One-time setup, run in order on Ubuntu 24.04 (Docker + compose-plugin installed) ──
#
# 1. Generate Synapse's config (replace matrix.example.com with your real domain):
# 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. In synapse-data/homeserver.yaml, REPLACE the generated sqlite `database:`
# block with the postgres block shown at the bottom of this file, and add
# `x_forwarded: true` under the port-8008 listener (you are behind a proxy).
#
# 3. Bring the stack up: docker compose up -d
#
# 4. Create your admin user:
# docker compose exec synapse register_new_matrix_user \
# -u admin -a -c /data/homeserver.yaml http://localhost:8008
#
# 5. Put a TLS reverse proxy (Caddy/nginx) on 443 -> 127.0.0.1:8008 and serve
# /.well-known/matrix/server + /.well-known/matrix/client for federation.
services:
db:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_USER: synapse
POSTGRES_PASSWORD: CHANGE_ME_STRONG_DB_PASSWORD
POSTGRES_DB: synapse
# Synapse REQUIRES the DB to use C locale — this is a hard requirement:
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:
# Client + federation HTTP. Bound to localhost — TLS is terminated by
# your reverse proxy. Never expose 8008 to the internet in the clear.
- "127.0.0.1:8008:8008"
# ── Paste this into synapse-data/homeserver.yaml, replacing the sqlite block ──
# 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
Puertos que debes abrir
| Puerto | Protocolo | Propósito |
|---|---|---|
| 443 | TCP | Proxy inverso HTTPS: API de Element/cliente + delegación de federación /.well-known (el único puerto que debe estar expuesto a internet) |
| 8008 | TCP | Listener HTTP de cliente+federación de Synapse — enlazar solo a 127.0.0.1, el TLS lo gestiona el proxy |
| 8448 | TCP | Puerto de federación directa opcional; solo necesario si NO usas la delegación .well-known (requiere su propio TLS) |
| 5432 | TCP | PostgreSQL — solo red interna de Docker, nunca publicar al host ni a internet |
Dimensionamiento adecuado
Qué plan necesitas
VPS Nano / Small (2 vCPU, 2-4 GB RAM)
Servidor personal o familiar, con menos de ~10 usuarios, con poca o ninguna federación. Synapse consume mucha memoria: 2 GB es el mínimo realista, 4 GB si te unes a salas públicas grandes.
VPS Pro (4 vCPU, 8 GB RAM)
Comunidad pequeña de decenas a unos pocos cientos de usuarios con federación activa. Ajusta las cachés de Synapse y el shared_buffers de Postgres; el almacenamiento SSD es importante para los archivos multimedia y la base de datos.
Dedicado (8+ núcleos, 16-32 GB RAM)
Cientos o miles de usuarios, o pertenencia a salas federadas muy grandes. Divide Synapse en workers (federation sender, sync, media) y ajusta Postgres por separado; el ancho de banda ilimitado mantiene el tráfico de multimedia/federación sin límites.
Mejores ubicaciones: Elige una ubicación de nivel privacidad para un servidor de comunicaciones: Suiza e Islandia ofrecen jurisdicciones con una fuerte protección de datos y son un hogar natural para un homeserver que guarda metadatos de mensajes y claves, mientras que Países Bajos y Luxemburgo ofrecen rutas de baja latencia y bien conectadas hacia Europa para un chat y voz en tiempo real más fluidos. Como Matrix funciona en tiempo real, prioriza la región de nivel privacidad más cercana a tus usuarios principales; el ancho de banda ilimitado y la protección DDoS incluida importan porque un homeserver federado y expuesto a internet es un objetivo permanente.
Blíndalo
Lista de verificación de hardening
- Desactiva el registro abierto: pon enable_registration: false, o protege los registros con registration_requires_token y tokens de invitación individuales — un servidor Matrix abierto es encontrado e inundado por bots de spam en cuestión de días.
- Control de federación: usa la delegación /.well-known/matrix/server para que tu server_name se mantenga limpio (@user:example.com), y si el servidor es privado, configura federation_domain_whitelist (o desactiva la federación por completo) para impedir que servidores desconocidos te contacten.
- Restringe las vistas previas de URL y los archivos multimedia: url_preview_enabled obtiene URLs arbitrarias en el servidor (riesgo de SSRF) — mantén el url_preview_ip_range_blacklist por defecto para los rangos privados, limita max_upload_size, y ejecuta una retención/purga periódica de multimedia, porque el almacenamiento multimedia crece sin límite.
- Ajusta los límites de tasa detrás del proxy: pon x_forwarded: true en el listener 8008 para que Synapse vea las IP reales de los clientes, y luego ajusta rc_login, rc_registration y rc_message para frenar la fuerza bruta y el abuso; la protección DDoS de ChainVPS cubre la capa L3/4 por debajo de esto.
- Haz copias de seguridad de Postgres y de la clave de firma: vuelca la base de datos regularmente y copia synapse-data/*.signing.key fuera del servidor — perder la clave de firma significa que la identidad de tu servidor y toda la confianza de federación desaparecen para siempre.
- Mantenlo actualizado: fija y actualiza periódicamente el tag de ghcr.io/element-hq/synapse, mantén report_stats: no, y nunca publiques el puerto 8008 ni el 5432 a internet — solo el 443 (y opcionalmente el 8448) deben ser accesibles.
Despliégalo en
El producto ChainVPS adecuado
Preguntas
Hosting Matrix (Synapse) — Preguntas frecuentes
¿Necesito mi propio dominio?
Sí. Los ID de usuario de Matrix y la federación están vinculados a un dominio (por ejemplo, @you:example.com). Necesitas un dominio con DNS que controles para apuntar al VPS y para servir los registros de federación /.well-known. El dominio puede registrarse a través de un registrador que respete la privacidad; el servidor en sí se mantiene sin KYC.
¿Puedo ejecutar Synapse de forma totalmente privada, sin federación?
Sí. Configura un federation_domain_whitelist vacío u omite el listener de federación para que tu homeserver nunca se comunique con la red pública de Matrix. Tus usuarios seguirán teniendo chat, voz y vídeo completamente cifrados de extremo a extremo entre ellos, todo en tu servidor offshore.
¿Por qué PostgreSQL en lugar de SQLite por defecto?
Synapse viene con SQLite solo para pruebas rápidas. No maneja bien la concurrencia ni la carga de federación y no se puede escalar con workers. Cualquier despliegue real debe usar PostgreSQL creado con la configuración regional C (el archivo compose de arriba lo hace por ti); migrar más adelante es complicado, así que empieza directamente con Postgres.
¿Cuánta RAM necesita realmente Synapse?
Más de lo que la gente espera. Un servidor tranquilo de un solo usuario cabe en ~1,5-2 GB, pero en el momento en que te unes a salas federadas grandes, las cachés por sala disparan el consumo de memoria. Reserva 4 GB para una comunidad pequeña y ajusta las cachés (caches: global_factor) a tu RAM en lugar de dejarlas crecer sin control.
¿Qué cliente deben instalar mis usuarios?
Element (web, escritorio, iOS, Android) es el cliente estándar de Matrix y se conecta a tu homeserver introduciendo su URL. El registro /.well-known/matrix/client que sirves en el puerto 443 permite que Element descubra automáticamente tu servidor solo a partir del ID de Matrix de un usuario.
¿Alojar el servidor offshore perjudica la federación o la calidad de las llamadas?
No. La federación funciona sobre HTTPS estándar sin importar la ubicación, y la protección DDoS incluida mantiene estable el servidor expuesto a internet. Para voz/vídeo en tiempo real, elige la ubicación de nivel privacidad más cercana a tus usuarios para minimizar la latencia; Países Bajos y Luxemburgo tienen muy buena conectividad para el tráfico europeo.
Más para autoalojar
Otros stacks de un clic
Desplegar Matrix (Synapse)
en los próximos 60 segundos.
Ancho de banda ilimitado · DDoS incluido · 21 criptomonedas · sin KYC.