19 guide passo passo per Docker® Compose, sistemi operativi, NAS & provider di hosting

Deployment tramite Docker® Compose, servizio Windows® (senza Docker®), Linux®, NAS, Proxmox® & principali provider di hosting

Scelga la Sua piattaforma esatta: dagli esempi Docker® Compose pronti all'uso e da un servizio nativo Windows Server® senza Docker® fino a Proxmox® VE, Raspberry Pi®, Synology®, ASUSTOR, UGREEN, TerraMaster e Unraid, oltre alla configurazione esatta di PTR & firewall su netcup, Hetzner, IONOS, ALL-INKL.COM, Hostinger, Strato e 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
Operativo in 60 secondi

Un unico binario unificato al posto di sette fragili daemon.

Basta assemblare Postfix, Dovecot, Rspamd, OpenDKIM, Certbot, Redis e webmail PHP legacy: nextxch include trasporto della posta, groupware, Webmail PWA, Admin Cockpit, CLI/API e Let's Encrypt SNI in 0 ms in un unico pacchetto autonomo.

Installer da terminale a una riga & pacchetti nativi verificati v1.0.0 (.msi, .deb, .tar.gz)

Verifica automaticamente i digest SHA-256, chiede in modo interattivo dominio, nome host, admin e storage, oppure esegue un aggiornamento del servizio sul posto

v1.0.0 · verificato 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® e Docker® Compose (release v1.0.0 fissata per Linux®, Windows®, macOS® e NAS)

Immagine OCI multi-arch riproducibile (nextxch/server:1.0.0 · linux/amd64 e linux/arm64) con SQLite WAL o PostgreSQL® 18, CalDAV/CardDAV, S3 Object Lock e OpenTelemetry

OCI v1.0.0
Nota sul container registry: in produzione raccomandiamo vivamente tag di release fissi (1.0.0 anziché :latest). Finché il mirroring pubblico su Docker® Hub è in fase di rollout graduale, l'esecuzione di install.sh --mode docker verifica automaticamente SHA256SUMS.txt da nextxch.com e compila nextxch/server:1.0.0 localmente sul proprio host.
  1. Opzione A: Compose compatto a container singolo (SQLite WAL + Zstandard): ideale fino a migliaia di caselle di posta su un singolo VPS, server dedicato o NAS, senza dipendenze da database esterni e con circa 40 MB di RAM a riposo.
  2. Opzione B: Enterprise Production Compose (PostgreSQL® 18 + S3 WORM + OpenTelemetry): scalabilità orizzontale, S3 Object Lock conforme a GoBD e trace, metriche e log 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) servizio Windows® nativo senza Docker®

Vero demone Windows® Service Control Manager (SCM) senza alcun overhead di Docker®, Hyper-V o WSL2

Servizio Windows® nativo
  1. Consigliato: procedura guidata ufficiale Windows® .msi (v1.0.0): in una nuova installazione chiede in modo interattivo dominio, nome host MX, login amministratore, SQLite WAL oppure Microsoft® SQL Server® (2019-2025 / Express / Azure® SQL) oppure PostgreSQL® 18, Let's Encrypt ACME, Windows® Firewall e token di licenza facoltativo. L'esecuzione di un .msi più recente aggiorna sul posto il servizio Windows® con 1 clic, conservando appsettings.Production.json e i dati di posta.
  2. CLI silenziosa non presidiata per Ansible, GPO & Microsoft® Intune: passi qualsiasi proprietà di configurazione senza interfaccia tramite 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"

Linux® demone nativo senza Docker® (systemd e .deb)

Debian® · Ubuntu® · Red Hat® · Rocky
  1. Utente dedicato non root: viene eseguito senza privilegi root con CAP_NET_BIND_SERVICE per le porte 25/443.
  2. Attivare la unit systemd nativa Type=notify: si integra nativamente con journald e con la readiness di 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: ideale per server Mac mini® / Mac Studio® in ufficio e per lo staging locale su MacBook Pro®.
  2. Esecuzione persistente tramite launchd: si avvia automaticamente al boot con un utilizzo di ~40 MB di 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

Cluster Kubernetes® Active-Active (EKS, AKS, GKE, K3s, OpenShift®) & Podman rootless

100% PostgreSQL® 18 · zero Redis · Helm v3
  1. Motore cluster 100% PostgreSQL® 18 (zero Redis/Kafka): le repliche distribuiscono il push in tempo reale IMAP IDLE e JMAP SSE in < 2 ms tramite PostgreSQL® LISTEN/NOTIFY, condividono challenge effimere e rate limit tramite tabelle UNLOGGED ed eleggono i leader ACME/conservazione tramite pg_try_advisory_lock.
  2. HAProxy PROXY Protocol v1/v2 & sessioni stateless: mantiene gli IP reali dei client dietro load balancer L4 per controlli SPF/DMARC/CIDR accurati; i token firmati consentono lo scaling HPA senza sticky session.
  3. Licenze Ed25519 compatibili con i cluster: un unico token di licenza copre pod illimitati e si sincronizza automaticamente su tutti i nodi quando viene attivato in /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
Virtualizzazione, ARM64 & appliance NAS

Installazione su Proxmox®, Raspberry Pi®, Synology®, ASUSTOR, UGREEN, TerraMaster & Unraid

Proxmox® VE (LXC & KVM)

Proxmox® VE 8+ · ZFS / NVMe
  1. Creare un container LXC: crei un container LXC Debian® 12 non privilegiato (2 vCPU, 1024 MB di RAM) con un mountpoint ZFS/NVMe su /var/lib/nextxch.
  2. Direttamente tramite .deb / systemd: all'interno di LXC eseguire il servizio nativo .deb/systemd, senza overhead di container annidati e con snapshot istantanei di Proxmox® Backup Server.
  3. Firewall Proxmox®: consentire TCP in entrata 25, 465, 587, 993, 4190, 80, 443 nel 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 RAM
  1. Sistema a 64 bit & NVMe invece della scheda SD: usare Raspberry Pi® OS Lite a 64 bit e collocare /var/lib/nextxch su un HAT NVMe M.2 o su un SSD USB 3 anziché su microSD.
  2. Consiglio per connessioni domestiche (smarthost): con IP dinamici residenziali, impostare Smtp__OutboundSmartHost sul relay dell'ISP/hoster per un recapito in uscita affidabile.
# 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

NAS Synology® (DSM 7.2+)

Container Manager · Btrfs
  1. Creare una cartella in File Station: crei /volume1/docker/nextxch in File Station sul volume Btrfs/SSD.
  2. Evitare conflitti di porta: assicurarsi che Synology® MailPlus sia arrestato, in modo che le porte 25, 465, 587 e 993 siano libere.
  3. Aprire Container Manager: aprire Container Manager -> Project -> Create, selezionare /volume1/docker/nextxch e incollare:
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"

NAS ASUSTOR (ADM 4.x)

App Central · Docker® CE · Portainer
  1. Installare Docker®-CE & Portainer CE: installi Docker®-CE e Portainer CE da ADM App Central.
  2. Cartella persistente: crei /volume1/Docker/nextxch in ADM File Explorer.
  3. Distribuire lo stack: distribuisca uno stack in Portainer mappando /volume1/Docker/nextxch:/app/data e consenta le porte di posta in 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 · progetto Docker®
  1. Usare il pool di storage NVMe: sui modelli UGREEN NASync DXP collocare /volume1/docker/nextxch sul pool NVMe M.2 per una ricerca istantanea.
  2. App Docker® per UGOS Pro: aprire UGOS Pro Docker® -> Project -> Create, incollare il file Compose e fare clic su 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. Installare Docker® Manager: installare Docker® Manager dal TOS App Center e creare /Volume1/docker/nextxch.
  2. Distribuire il progetto: in Docker® Manager -> Projects -> Add, incollare lo stack YAML e avviarlo.
volumes:
  - /Volume1/docker/nextxch:/app/data
# Admin-Cockpit nach Start: https://TERRAMASTER-IP:8443/admin/

Unraid Server (6.12+ / 7.x)

Unraid · Cache NVMe · Custom br0
  1. Spostare appdata sulla cache NVMe: mappare /mnt/cache/appdata/nextxch in modo che i dischi dell'array di parità possano andare in standby mentre gli indici funzionano alla velocità NVMe.
  2. IP LAN dedicato tramite il tipo di rete Custom: br0 (consigliato): assegni il tipo di rete Custom br0 con un IP LAN dedicato, così le porte 80/443/25 non entrano mai in conflitto con la WebGUI di 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
Guide per provider di hosting & DNS

Guide di configurazione per netcup, Hetzner, IONOS, ALL-INKL.COM, Hostinger, Strato & OVHcloud

Un recapito affidabile nella posta in arrivo di Gmail™, Outlook® e dei gateway aziendali richiede una reputazione pulita dell'IP mittente e tre impostazioni presso l'hoster: accesso alla porta 25 in uscita, DNS inverso PTR IPv4/IPv6 corrispondente e record SPF/DKIM/DMARC allineati.

netcup.de (Root Server & VPS)

SCP · CCP DNS · porta 25 aperta
  1. Impostare il reverse DNS (PTR) nell'SCP: in netcup SCP -> Network imposti il reverse DNS (PTR) sia per l'indirizzo IPv4 sia per l'indirizzo IPv6 primario su mail.yourdomain.de.
  2. Gestire il DNS nel CCP: in netcup CCP -> Domains -> DNS aggiungere i record A, AAAA, MX (prio 10), SPF e DKIM TXT.
  3. Installazione: distribuire l'ISO di Debian® 12 o Windows Server® nel SCP e installare in modo nativo o tramite Docker®.

hetzner.de (Cloud CX/CAX & Dedicated)

Cloud Console · x64 & Ampere ARM64
  1. Sblocco della porta 25 per i nuovi clienti: i nuovi account Hetzner Cloud bloccano inizialmente 25/465 in uscita; richiedere lo sblocco della porta tramite Cloud Console -> Limits dopo la prima fattura.
  2. Impostare i PTR IPv4 & IPv6: in Hetzner Cloud Console -> Networking -> Edit Reverse DNS impostare sia l'IPv4 primario sia l'IPv6 ::1 su mail.yourdomain.de.
  3. Consiglio qualità-prezzo: funziona in modo nativo sulle istanze ultra efficienti Hetzner CAX ARM64 e si abbina direttamente a Hetzner S3 Object Storage.

ionos.de (VPS & Cloud Server)

IONOS Cloud Panel · S3 Object Lock
  1. Aprire il firewall esterno IONOS: aprire IONOS Cloud Panel -> Network -> Firewall Policies e consentire TCP in entrata 25, 80, 443, 465, 587, 993 e 4190.
  2. Configurare il DNS inverso: impostare il Reverse DNS in Network -> Public IPs su mail.yourdomain.de non appena il record A viene risolto.
  3. Archivio GoBD con IONOS S3: abbinare a IONOS S3 Object Storage a Francoforte/Berlino con S3 Object Lock nativo (COMPLIANCE).

ALL-INKL.COM (KAS DNS & smarthost)

Strumenti DNS KAS · Smarthost
  1. Variante A (dominio presso ALL-INKL, nextxch su un proprio VPS): in ALL-INKL KAS -> Tools -> DNS Tools puntare A/AAAA per mail e MX al vostro IP nextxch e aggiungere i record TXT SPF/DKIM/DMARC.
  2. Variante B (nextxch in ufficio / NAS con ALL-INKL come relay di invio): nextxch gira su un NAS/Proxmox® in ufficio dietro un IP dinamico? Configurare w01abc.kasserver.com:587 come Smtp__OutboundSmartHost e aggiungere include:_spf.kasserver.com a SPF.

Hostinger (KVM VPS & hPanel)

hPanel · KVM 2 / KVM 4
  1. Record PTR nell'area VPS: in Hostinger hPanel -> VPS -> IP Addresses impostare il record PTR su mail.yourdomain.de.
  2. Attenzione a porta 25 / relay: verificare che la porta 25 in uscita sia sbloccata nel proprio piano KVM, oppure configurare in nextxch uno smarthost autenticato sulla porta 587.
  3. Gestione DNS di hPanel: sostituire le voci MX predefinite nel DNS Zone Editor di hPanel con mail.yourdomain.de e con i propri record TXT SPF/DKIM/DMARC.

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

Login server STRATO · Windows® & Linux®
  1. Ideale per Windows Server® senza Docker®: sui V-Server Windows® di STRATO, installare direttamente come servizio Windows® nativo con il comando PowerShell® riportato sopra.
  2. Reverse DNS nel STRATO Server-Login: in STRATO Server Login -> IP Addresses impostare il Reverse DNS per IPv4 e IPv6 su mail.yourdomain.de.
  3. Gestione domini STRATO: in STRATO Domain Management -> DNS Settings, impostare l'MX su un mail server personalizzato (mail.yourdomain.de) e aggiungere i record TXT.

OVHcloud (VPS, Dedicated & Public Cloud)

OVHcloud Control Panel · EU S3 WORM
  1. Ordine importante per il PTR su OVHcloud: OVHcloud verifica il DNS diretto prima di accettare una modifica del PTR: creare prima i record A e AAAA per mail.yourdomain.de, poi impostare il Reverse DNS in Network -> Public IPs.
  2. Firewall di rete & S3 Object Lock: consenta le porte di posta nell'OVHcloud Edge Network Firewall e colleghi facoltativamente OVHcloud S3 Object Storage (Limburgo/Strasburgo) per l'archiviazione GoBD WORM immutabile.