19 guías paso a paso para Docker® Compose, sistemas operativos, NAS y proveedores de alojamiento

Despliegue mediante Docker® Compose, servicio de Windows® (sin Docker®), Linux®, NAS, Proxmox® y los principales proveedores de alojamiento

Elija su plataforma exacta: desde ejemplos de Docker® Compose listos para usar y un servicio nativo de Windows Server® sin Docker® hasta Proxmox® VE, Raspberry Pi®, Synology®, ASUSTOR, UGREEN, TerraMaster y Unraid, además de la configuración exacta de PTR y firewall en netcup, Hetzner, IONOS, ALL-INKL.COM, Hostinger, Strato y OVHcloud.

# Linux & macOS: SHA-256-geprüfter Installer & Updater v1.0.0 (Docker Compose, .deb oder systemd)
curl -fsSL https://nextxch.com/install.sh | sudo bash

# Windows Server (2019 / 2022 / 2025): Lädt das .msi, prüft SHA-256 & startet den Assistenten
irm https://nextxch.com/install.ps1 | iex

# Gepinnter Container-Start (Version 1.0.0 für linux/amd64 & linux/arm64)
docker run -d --name nextxch -p 25:25 -p 465:465 -p 587:587 -p 993:993 -p 80:80 -p 443:443 \
  -v nextxch-data:/app/data nextxch/server:1.0.0
En marcha en 60 segundos

Un único binario unificado en lugar de siete demonios frágiles.

Deje de ensamblar Postfix, Dovecot, Rspamd, OpenDKIM, Certbot, Redis y un webmail PHP heredado: nextxch incluye transporte de correo, groupware, Webmail PWA, Admin Cockpit, CLI/API y Let's Encrypt con SNI en 0 ms en un único paquete autónomo.

Instaladores de terminal de una línea y paquetes nativos verificados v1.0.0 (.msi, .deb, .tar.gz)

Verifica automáticamente los resúmenes SHA-256, solicita de forma interactiva el dominio, el nombre de host, el administrador y el almacenamiento, o realiza una actualización del servicio en el sitio

v1.0.0 · Verificado con SHA-256
# === Linux (Debian / Ubuntu / RHEL) & macOS - Interaktiver Installer & Updater (v1.0.0) ===
curl -fsSL https://nextxch.com/install.sh | sudo bash

# Späteres Update auf neue Release-Version mit einem Befehl:
curl -fsSL https://nextxch.com/install.sh | sudo bash -s -- --update

# === Windows Server (2019 / 2022 / 2025) - Lädt .msi, prüft SHA-256 & startet den Assistenten ===
irm https://nextxch.com/install.ps1 | iex

Docker® y Docker® Compose (versión fijada v1.0.0 para Linux®, Windows®, macOS® y NAS)

Imagen OCI multiarquitectura reproducible (nextxch/server:1.0.0 · linux/amd64 y linux/arm64) con SQLite WAL o PostgreSQL® 18, CalDAV/CardDAV, S3 Object Lock y OpenTelemetry

OCI v1.0.0
Nota sobre el registro de contenedores: en producción recomendamos encarecidamente etiquetas de versión fijadas (1.0.0 en lugar de :latest). Mientras la réplica pública en Docker® Hub se despliega por fases, la ejecución de install.sh --mode docker verifica automáticamente SHA256SUMS.txt desde nextxch.com y compila nextxch/server:1.0.0 localmente en su host.
  1. Opción A: Compose compacto de un solo contenedor (SQLite WAL + Zstandard): ideal para hasta miles de buzones en un único VPS, servidor dedicado o NAS, sin dependencias de bases de datos externas y con ~40 MB de RAM en reposo.
  2. Opción B: Compose de producción Enterprise (PostgreSQL® 18 + S3 WORM + OpenTelemetry): escalado horizontal, S3 Object Lock conforme a GoBD y trazas, métricas y registros OpenTelemetry OTLP.
# === VARIANTE A: Kompakter Einzelcontainer-Stack (docker-compose.yml) ===
services:
  nextxch:
    image: nextxch/server:1.0.0
    container_name: nextxch
    hostname: mail.firma.de
    restart: unless-stopped
    ports:
      - "25:25"       # ESMTP-Eingang (MX)
      - "465:465"     # SMTPS-Einlieferung (Implicit TLS)
      - "587:587"     # SMTP-Einlieferung (STARTTLS)
      - "143:143"     # IMAP4rev2 (STARTTLS)
      - "993:993"     # IMAPS (Implicit TLS)
      - "4190:4190"   # ManageSieve (Filter & Abwesenheit)
      - "80:80"       # Let's Encrypt HTTP-01 & Autoconfig
      - "443:443"     # Admin-Cockpit, Webmail PWA, JMAP, CalDAV/CardDAV, Mobile Push (WBXML) & REST API
    environment:
      Urls: "http://*:80;https://*:443"
      Bootstrap__DefaultDomain: "firma.de"
      Bootstrap__AdminEmail: "admin@firma.de"
      Bootstrap__AdminPassword: "BitteSofortAendern!2026"
      Storage__Provider: "Sqlite"
      Storage__DataDirectory: "/var/lib/nextxch"
      Storage__BlobBackend: "FileSystem"
      Storage__Compression: "Zstd"
      Smtp__ServerHostName: "mail.firma.de"
      Imap__ServerHostName: "mail.firma.de"
      OpenTelemetry__Enabled: "true"
      OpenTelemetry__ServiceName: "nextxch"
    volumes:
      - ./nextxch-data:/var/lib/nextxch

# Starten (oder automatischer lokaler Image-Build via install.sh --mode docker):
# docker compose up -d && docker compose logs -f nextxch
# === VARIANTE B: Enterprise-Stack mit PostgreSQL 18, S3 Object Lock & OpenTelemetry ===
services:
  nextxch:
    image: nextxch/server:1.0.0
    restart: unless-stopped
    depends_on: [postgres, otel-collector]
    ports: ["25:25", "465:465", "587:587", "993:993", "4190:4190", "80:80", "443:443"]
    environment:
      Urls: "http://*:80;https://*:443"
      Storage__Provider: "Postgres"
      Storage__PostgresConnectionString: "Host=postgres;Database=nextxch;Username=nextxch;Password=${PG_PASSWORD}"
      Storage__BlobBackend: "Hybrid"
      Storage__Compression: "Zstd"
      Storage__S3Endpoint: "https://s3.eu-central-1.ionoscloud.com"
      Storage__S3Bucket: "firma-gobd-mail-archive"
      OpenTelemetry__Enabled: "true"
      OpenTelemetry__ServiceName: "nextxch-Prod"
      OpenTelemetry__OtlpEndpoint: "http://otel-collector:4317"
    volumes:
      - nextxch-nvme-cache:/var/lib/nextxch

  postgres:
    image: postgres:18-alpine
    restart: unless-stopped
    environment:
      POSTGRES_DB: nextxch
      POSTGRES_USER: nextxch
      POSTGRES_PASSWORD: "${PG_PASSWORD}"
    volumes:
      - pg-data:/var/lib/postgresql

  otel-collector:
    image: otel/opentelemetry-collector-contrib:0.112.0
    restart: unless-stopped
    ports: ["127.0.0.1:4317:4317"]

volumes:
  nextxch-nvme-cache:
  pg-data:

Windows Server® (2019 / 2022 / 2025): servicio nativo de Windows® sin Docker®

Daemon real del Service Control Manager (SCM) de Windows®, sin sobrecarga de Docker®, Hyper-V ni WSL2

Servicio nativo de Windows®
  1. Recomendado: asistente oficial .msi para Windows® (v1.0.0): en una instalación nueva solicita de forma interactiva el dominio, el nombre de host MX, el inicio de sesión del administrador, SQLite WAL frente a Microsoft® SQL Server® (2019-2025 / Express / Azure® SQL) frente a PostgreSQL® 18, Let's Encrypt ACME, Windows® Firewall y un token de licencia opcional. Ejecutar un .msi más reciente realiza con 1 clic una actualización en el sitio del servicio de Windows®, conservando appsettings.Production.json y los datos de correo.
  2. CLI silenciosa desatendida para Ansible, GPO y Microsoft® Intune: pase cualquier propiedad de configuración sin interfaz mediante msiexec.exe /qn.
# Variante A: Einzeiler in PowerShell (prüft SHA-256, lädt .msi & startet den Assistenten)
irm https://nextxch.com/install.ps1 | iex

# Variante B: Unbeaufsichtigte Installation / Dienst-Aktualisierung per msiexec.exe
curl.exe -fLO https://nextxch.com/downloads/Nextxch-Setup-win-x64.msi
msiexec.exe /i Nextxch-Setup-win-x64.msi /qn `
  DEFAULT_DOMAIN="firma.de" `
  MAIL_HOSTNAME="mail.firma.de" `
  ADMIN_EMAIL="admin@firma.de" `
  ADMIN_PASSWORD="BitteSofortAendern!2026" `
  STORAGE_PROVIDER="Sqlite" `
  DATA_DIR="C:\ProgramData\nextxch"

Daemon nativo de Linux® sin Docker® (systemd y .deb)

Debian® · Ubuntu® · Red Hat® · Rocky
  1. Usuario dedicado sin privilegios de root: se ejecuta sin root con CAP_NET_BIND_SERVICE para los puertos 25/443.
  2. Activar la unidad systemd nativa Type=notify: se integra de forma nativa con journald y con la señal de disponibilidad de systemd.
# Schnellweg für Debian 12 / Ubuntu 24.04 LTS:
curl -fLO https://nextxch.com/downloads/nextxch_1.0.0_amd64.deb
sudo dpkg -i nextxch_1.0.0_amd64.deb

# Alternativ für RHEL / Rocky / AlmaLinux via .tar.gz + systemd:
sudo useradd -r -s /usr/sbin/nologin -d /var/lib/nextxch nextxch
sudo mkdir -p /opt/nextxch /var/lib/nextxch
curl -fsSL https://nextxch.com/downloads/nextxch-linux-x64.tar.gz | sudo tar -xz -C /opt/nextxch
sudo chown -R nextxch:nextxch /var/lib/nextxch
sudo cp /opt/nextxch/nextxch.service /etc/systemd/system/
sudo systemctl enable --now nextxch

macOS® (Apple® Silicon M1-M4 & Intel)

macOS® · ARM64 · launchd
  1. Apple® Silicon ARM64 nativo: ideal para servidores Mac mini® / Mac Studio® de oficina y entornos de staging locales en MacBook Pro®.
  2. Ejecución persistente mediante launchd: se inicia automáticamente al arrancar, con un uso de ~40 MB de RAM.
sudo mkdir -p /usr/local/nextxch /usr/local/var/nextxch/logs
curl -fsSL https://nextxch.com/downloads/nextxch-osx-arm64.tar.gz | sudo tar -xz -C /usr/local/nextxch
sudo xattr -dr com.apple.quarantine /usr/local/nextxch
sudo bash /usr/local/nextxch/install-macos.sh

# Alternativ per OrbStack / Docker Desktop auf macOS:
docker run -d --name nextxch -p 2525:25 -p 2993:993 -p 8080:80 \
  -v ~/nextxch-data:/app/data \
  nextxch/server:1.0.0

Clúster Kubernetes® activo-activo (EKS, AKS, GKE, K3s, OpenShift®) & Podman sin root

100 % PostgreSQL® 18 · sin Redis · Helm v3
  1. Motor de clúster 100 % PostgreSQL® 18 (sin Redis/Kafka): las réplicas distribuyen el push en tiempo real de IMAP IDLE y JMAP SSE en < 2 ms mediante PostgreSQL® LISTEN/NOTIFY, comparten desafíos efímeros y límites de tasa mediante tablas UNLOGGED y eligen los líderes de ACME/retención mediante pg_try_advisory_lock.
  2. Protocolo PROXY v1/v2 de HAProxy y sesiones sin estado: conserva las IP reales de los clientes detrás de balanceadores de carga L4 para comprobaciones SPF/DMARC/CIDR precisas; los tokens firmados permiten escalado HPA sin sesiones persistentes.
  3. Licencias Ed25519 aptas para clúster: un único token de licencia cubre pods ilimitados y se sincroniza automáticamente en todos los nodos al activarse en /admin/.
# Offizielles Helm v3 Chart installieren (gepinnter Release-Tag 1.0.0, skaliert per HPA auf 3 bis 12 Pods)
helm upgrade --install nextxch ./deploy/helm/nextxch -n nextxch --create-namespace \
  --set image.repository=nextxch/server \
  --set image.tag=1.0.0 \
  --set replicaCount=3 \
  --set cluster.enabled=true \
  --set cluster.enableProxyProtocol=true \
  --set storage.provider=Postgres \
  --set storage.blobBackend=S3 \
  --set service.externalTrafficPolicy=Local

# Oder direkt per Kustomize-Manifesten (/health/live & /health/ready + PDB + Anti-Affinity):
kubectl apply -k ./deploy/kubernetes/

# Alternativ: Rootless Podman (RHEL 9 / Fedora / AlmaLinux ohne Docker-Daemon)
podman run -d --name nextxch --restart=always \
  -p 25:25 -p 465:465 -p 587:587 -p 993:993 -p 4190:4190 -p 8443:443 \
  -v /var/lib/nextxch:/app/data:Z \
  nextxch/server:1.0.0
Virtualización, ARM64 y dispositivos NAS

Instalación en Proxmox®, Raspberry Pi®, Synology®, ASUSTOR, UGREEN, TerraMaster y Unraid

Proxmox® VE (LXC & KVM)

Proxmox® VE 8+ · ZFS / NVMe
  1. Crear un contenedor LXC: cree un contenedor LXC Debian® 12 sin privilegios (2 vCPU, 1024 MB de RAM) con un punto de montaje ZFS/NVMe en /var/lib/nextxch.
  2. Directamente mediante .deb / systemd: dentro de LXC, ejecute el servicio nativo .deb/systemd para evitar la sobrecarga de contenedores anidados y obtener snapshots instantáneos de Proxmox® Backup Server.
  3. Firewall de Proxmox®: permita el tráfico entrante TCP 25, 465, 587, 993, 4190, 80 y 443 en Datacenter/CT Firewall.
# Auf dem Proxmox-Host (erstellt schlanken Debian-LXC CT 210 & installiert nativ):
pct create 210 local:vztmpl/debian-12-standard_12.7-1_amd64.tar.zst \
  --hostname mail --cores 2 --memory 1024 --net0 name=eth0,bridge=vmbr0,ip=dhcp \
  --storage local-zfs --rootfs local-zfs:32 --unprivileged 1 --start 1
pct exec 210 -- bash -c "curl -fsSL https://nextxch.com/install.sh | bash -s -- --mode native -y"

Raspberry Pi® 4 & Raspberry Pi® 5

linux/arm64 · ~40 MB de RAM
  1. Sistema de 64 bits y NVMe en lugar de tarjeta SD: use Raspberry Pi® OS Lite de 64 bits y coloque /var/lib/nextxch en un HAT NVMe M.2 o en un SSD USB 3 en lugar de una microSD.
  2. Consejo para conexión doméstica (smarthost): en IP dinámicas residenciales, establezca Smtp__OutboundSmartHost en el relay de su ISP/proveedor de alojamiento para una entrega saliente fiable.
# Nativ per ARM64-.deb-Paket oder Container (v1.0.0) auf Raspberry Pi 4 / 5:
curl -fLO https://nextxch.com/downloads/nextxch_1.0.0_arm64.deb
sudo dpkg -i nextxch_1.0.0_arm64.deb

Synology® NAS (DSM 7.2+)

Container Manager · Btrfs
  1. Crear la carpeta en File Station: cree /volume1/docker/nextxch en File Station en su volumen Btrfs/SSD.
  2. Evitar conflictos de puertos: asegúrese de que Synology® MailPlus esté detenido para que los puertos 25, 465, 587 y 993 estén libres.
  3. Abrir Container Manager: abra Container Manager -> Project -> Create, seleccione /volume1/docker/nextxch y pegue:
services:
  nextxch:
    image: nextxch/server:1.0.0
    container_name: nextxch
    restart: unless-stopped
    ports:
      - "25:25"
      - "465:465"
      - "587:587"
      - "993:993"
      - "4190:4190"
      - "8443:443"
    volumes:
      - /volume1/docker/nextxch:/app/data
    environment:
      Storage__Provider: "Sqlite"
      Storage__Compression: "Zstd"

ASUSTOR NAS (ADM 4.x)

App Central · Docker®-CE · Portainer
  1. Instalar Docker®-CE & Portainer CE: instale Docker®-CE y Portainer CE desde ADM App Central.
  2. Carpeta persistente: cree /volume1/Docker/nextxch en ADM File Explorer.
  3. Desplegar el stack: despliegue un stack en Portainer que asigne /volume1/Docker/nextxch:/app/data y permita los puertos de correo en ADM Defender.
mkdir -p /volume1/Docker/nextxch
docker run -d --name nextxch --restart unless-stopped \
  -p 25:25 -p 465:465 -p 587:587 -p 993:993 -p 8443:443 \
  -v /volume1/Docker/nextxch:/app/data \
  nextxch/server:1.0.0

UGREEN NASync (UGOS Pro)

UGOS Pro · proyecto Docker®
  1. Usar el pool de almacenamiento NVMe: en los modelos UGREEN NASync DXP, coloque /volume1/docker/nextxch en su pool NVMe M.2 para búsquedas instantáneas.
  2. App Docker® de UGOS Pro: abra UGOS Pro Docker® -> Project -> Create, pegue el archivo Compose y haga clic en Deploy.
# UGOS Pro -> Docker -> Projekt -> Compose-Konfiguration:
services:
  nextxch:
    image: nextxch/server:1.0.0
    restart: always
    ports: ["25:25", "465:465", "587:587", "993:993", "4190:4190", "8443:443"]
    volumes:
      - ./data:/app/data

NAS TerraMaster (TOS 5 / TOS 6)

TOS Docker® Manager
  1. Instalar Docker® Manager: instale Docker® Manager desde el TOS App Center y cree /Volume1/docker/nextxch.
  2. Desplegar el proyecto: en Docker® Manager -> Projects -> Add, pegue el stack YAML e inícielo.
volumes:
  - /Volume1/docker/nextxch:/app/data
# Admin-Cockpit nach Start: https://TERRAMASTER-IP:8443/admin/

Unraid Server (6.12+ / 7.x)

Unraid · NVMe de caché · Custom br0
  1. Colocar appdata en la NVMe de caché: asigne /mnt/cache/appdata/nextxch para que los discos del array de paridad puedan detenerse mientras los índices funcionan a velocidad NVMe.
  2. IP de LAN propia mediante el tipo de red Custom: br0 (recomendado): asigne el tipo de red Custom br0 con una IP de LAN dedicada para que los puertos 80/443/25 nunca entren en conflicto con la WebGUI de Unraid.
# Unraid Terminal oder Docker Compose Manager Plugin:
docker run -d --name nextxch --net=br0 --ip=192.168.178.25 --restart=unless-stopped \
  -v /mnt/cache/appdata/nextxch:/app/data \
  -e ASPNETCORE_URLS="http://*:80;https://*:443" \
  -e Bootstrap__DefaultDomain="firma.de" \
  nextxch/server:1.0.0
Guías de proveedores de alojamiento y DNS

Guías de configuración para netcup, Hetzner, IONOS, ALL-INKL.COM, Hostinger, Strato y OVHcloud

Una entrega fiable en la bandeja de entrada de Gmail™, Outlook® y los gateways corporativos requiere una reputación limpia de la IP del remitente y tres ajustes del proveedor de alojamiento: acceso saliente al puerto 25, DNS inverso PTR IPv4/IPv6 coincidente y registros SPF/DKIM/DMARC alineados.

netcup.de (Root-Server & VPS)

SCP · DNS de CCP · puerto 25 abierto
  1. Configurar el DNS inverso (PTR) en el SCP: en netcup SCP -> Network, configure el DNS inverso (PTR) tanto de su dirección IPv4 como de su dirección IPv6 principal a mail.yourdomain.de.
  2. Gestionar el DNS en el CCP: en netcup CCP -> Domains -> DNS, añada los registros A, AAAA, MX (prio 10), SPF y TXT de DKIM.
  3. Instalación: despliegue una ISO de Debian® 12 o Windows Server® en el SCP e instale de forma nativa o mediante Docker®.

hetzner.de (Cloud CX/CAX & Dedicated)

Cloud Console · x64 & Ampere ARM64
  1. Desbloqueo del puerto 25 para clientes nuevos: las cuentas nuevas de Hetzner Cloud bloquean inicialmente el tráfico saliente 25/465; solicite el desbloqueo del puerto en Cloud Console -> Limits después de su primera factura.
  2. Configurar PTR de IPv4 & IPv6: en Hetzner Cloud Console -> Networking -> Edit Reverse DNS, tanto en la IPv4 principal como en IPv6::1, a mail.yourdomain.de.
  3. Consejo de relación calidad-precio: se ejecuta de forma nativa en las instancias ultraeficientes Hetzner CAX ARM64 y se combina directamente con Hetzner S3 Object Storage.

ionos.de (VPS & Cloud Server)

IONOS Cloud Panel · S3 Object Lock
  1. Abrir el firewall externo de IONOS: abra IONOS Cloud Panel -> Network -> Firewall Policies y permita el tráfico entrante TCP 25, 80, 443, 465, 587, 993 y 4190.
  2. Configurar el DNS inverso: establezca el DNS inverso en Red -> IP públicas como mail.yourdomain.de en cuanto el registro A se resuelva.
  3. Archivo GoBD con IONOS S3: combínelo con IONOS S3 Object Storage en Fráncfort/Berlín con S3 Object Lock nativo (COMPLIANCE).

ALL-INKL.COM (KAS DNS & Smarthost)

Herramientas DNS de KAS · Smarthost
  1. Variante A (dominio en ALL-INKL, nextxch en VPS propio): en ALL-INKL KAS -> Tools -> DNS Tools, apunte A/AAAA para mail y MX a su IP de nextxch y añada los registros TXT de SPF/DKIM/DMARC.
  2. Variante B (nextxch en la oficina / NAS con ALL-INKL como relay de envío): ¿Ejecuta nextxch en un NAS/Proxmox® de oficina con IP dinámica? Configure w01abc.kasserver.com:587 como Smtp__OutboundSmartHost y añada include:_spf.kasserver.com a SPF.

Hostinger (KVM VPS & hPanel)

hPanel · KVM 2 / KVM 4
  1. Registro PTR en el área VPS: en Hostinger hPanel -> VPS -> IP Addresses, configure el registro PTR como mail.yourdomain.de.
  2. Tenga en cuenta el puerto 25 / relay: verifique que el puerto 25 saliente esté desbloqueado en su plan KVM o configure en nextxch un smarthost autenticado en el puerto 587.
  3. Gestión DNS en hPanel: sustituya las entradas MX predeterminadas en el editor de zonas DNS de hPanel por mail.yourdomain.de y sus registros TXT de SPF/DKIM/DMARC.

Strato (V-Server Linux®/Windows® & Dedicated)

Inicio de sesión en servidores STRATO · Windows® & Linux®
  1. Ideal para Windows Server® sin Docker®: en los V-Servers Windows® de STRATO, instálelo directamente como servicio nativo de Windows® con el comando de PowerShell® anterior.
  2. DNS inverso en el STRATO Server Login: en STRATO Server Login -> IP Addresses, configure el DNS inverso para IPv4 e IPv6 como mail.yourdomain.de.
  3. Gestión de dominios de STRATO: en STRATO Domain Management -> DNS Settings, cambie el MX a un servidor de correo propio (mail.yourdomain.de) y añada los registros TXT.

OVHcloud (VPS, Dedicated & Public Cloud)

Panel de control de OVHcloud · S3 WORM en la UE
  1. Orden importante para el PTR en OVHcloud: OVHcloud valida el DNS directo antes de aceptar un cambio de PTR: cree primero los registros A y AAAA para mail.yourdomain.de y, después, configure el DNS inverso en Network -> Public IPs.
  2. Firewall de red & S3 Object Lock: permita los puertos de correo en OVHcloud Edge Network Firewall y, opcionalmente, conecte OVHcloud S3 Object Storage (Limburgo/Estrasburgo) para el archivado GoBD WORM inmutable.