19 Step-by-Step Docker® Compose, OS, NAS & Hoster Guides
Deploy via Docker® Compose, Windows® Service (No Docker®), Linux®, NAS, Proxmox® & Major Hosters
Pick your exact platform: from ready-to-run Docker® Compose examples and a native Windows Server® Service without Docker® to Proxmox® VE, Raspberry Pi®, Synology®, ASUSTOR, UGREEN, TerraMaster, and Unraid, plus exact PTR & firewall setup on netcup, Hetzner, IONOS, ALL-INKL.COM, Hostinger, Strato, and OVHcloud.
Container Registry Note:
We strictly recommend pinned release tags (1.3.1 rather than :latest) in production. Whenever public Docker® Hub mirroring is undergoing staged rollout, running install.sh --mode docker automatically verifies SHA256SUMS.txt from nextxch.com and builds nextxch/server:1.3.1 locally on your host.
Option A: Compact Single-Container Compose (SQLite WAL + Zstandard): Ideal for up to thousands of mailboxes on a single VPS, dedicated server, or NAS with zero external database dependencies and ~40 MB idle RAM.
Windows Server® (2019 / 2022 / 2025) Native Windows® Service Without Docker®
True Windows® Service Control Manager (SCM) daemon with zero Docker®, Hyper-V, or WSL2 overhead
Native Windows® Service
Recommended: Official Windows® .msi Wizard (v1.3.1): Prompts interactively on fresh install for Domain, MX Hostname, Admin login, SQLite WAL vs. Microsoft® SQL Server® (2019–2025 / Express / Azure® SQL) vs. PostgreSQL® 18, Let's Encrypt ACME, Windows® Firewall, and optional License Token. Running a newer .msi performs a 1-click in-place Windows® Service upgrade while preserving appsettings.Production.json and mail data.
Unattended Silent CLI for Ansible, GPO & Microsoft® Intune: Pass any configuration property headlessly via msiexec.exe /qn.
100% PostgreSQL® 18 Cluster Engine (Zero Redis/Kafka): Replicas fan out IMAP IDLE and JMAP SSE real-time push in < 2 ms via PostgreSQL® LISTEN/NOTIFY, share ephemeral challenges/rate-limits via UNLOGGED tables, and elect ACME/Retention leaders via pg_try_advisory_lock.
HAProxy PROXY Protocol v1/v2 & Stateless Sessions: Preserves real client IPs behind L4 LoadBalancers for accurate SPF/DMARC/CIDR checks; signed tokens enable zero-sticky-session HPA scaling.
Cluster-Safe Ed25519 Licensing: One license token covers unlimited pods and syncs across all nodes automatically when activated in /admin/.
LXC-Container erstellen: Create an unprivileged Debian® 12 LXC container (2 vCPU, 1024 MB RAM) with a ZFS/NVMe mountpoint at /var/lib/nextxch.
Direkt per .deb / systemd: Inside LXC, run the native .deb/systemd service for zero nested container overhead and instant Proxmox® Backup Server snapshots.
64-Bit-System & NVMe statt SD-Karte: Use 64-bit Raspberry Pi® OS Lite and place /var/lib/nextxch on an M.2 NVMe HAT or USB 3 SSD rather than microSD.
Heimanschluss-Tipp (Smarthost): On residential dynamic IPs, set Smtp__OutboundSmartHost to your ISP/hoster relay for reliable outbound delivery.
# Nativ per ARM64-.deb-Paket oder Container (v1.3.1) auf Raspberry Pi 4 / 5:
curl -fLO https://nextxch.com/downloads/nextxch_1.3.1_arm64.deb
sudo dpkg -i nextxch_1.3.1_arm64.deb
Synology® NAS (DSM 7.2+)
Container Manager · Btrfs
Ordner in File Station erstellen: Create /volume1/docker/nextxch in File Station on your Btrfs/SSD volume.
Portkonflikt vermeiden: Ensure Synology® MailPlus is stopped so ports 25, 465, 587, and 993 are free.
Container Manager öffnen: Open Container Manager -> Project -> Create, select /volume1/docker/nextxch, and paste:
Docker® Manager installieren: Install Docker® Manager from TOS App Center and create /Volume1/docker/nextxch.
Projekt bereitstellen: In Docker® Manager -> Projects -> Add, paste the YAML stack and start.
volumes:
- /Volume1/docker/nextxch:/data
# Admin-Cockpit nach Start: https://TERRAMASTER-IP:8443/admin/
Unraid Server (6.12+ / 7.x)
Unraid · Cache NVMe · Custom br0
Appdata auf Cache-NVMe legen: Map /mnt/cache/appdata/nextxch so parity array disks can spin down while indexes run at NVMe speed.
Eigene LAN-IP über Netzwerktyp Custom: br0 (Empfohlen): Assign Network Type: Custom br0 with a dedicated LAN IP so ports 80/443/25 never collide with the Unraid WebGUI.
Reliable inbox delivery at Gmail™, Outlook®, and corporate gateways requires clean sender IP reputation plus three hoster settings: outbound port 25 access, matching IPv4/IPv6 PTR reverse DNS, and aligned SPF/DKIM/DMARC records.
netcup.de (Root-Server & VPS)
SCP · CCP DNS · Port 25 offen
Reverse-DNS (PTR) im SCP setzen: In netcup SCP -> Network, set Reverse DNS (PTR) for both your IPv4 and primary IPv6 address to mail.yourdomain.de.
DNS im CCP pflegen: In netcup CCP -> Domains -> DNS, add A, AAAA, MX (prio 10), SPF, and DKIM TXT records.
Installation: Deploy Debian® 12 or Windows Server® ISO in SCP and install natively or via Docker®.
hetzner.de (Cloud CX/CAX & Dedicated)
Cloud Console · x64 & Ampere ARM64
Port-25-Freischaltung bei Neukunden: New Hetzner Cloud accounts block outbound 25/465 initially; request the port unblock via Cloud Console -> Limits after your first invoice.
IPv4- & IPv6-PTR setzen: In Hetzner Cloud Console -> Networking -> Edit Reverse DNS on both Primary IPv4 and IPv6::1 to mail.yourdomain.de.
Preis-Leistungs-Tipp: Runs natively on ultra-efficient Hetzner CAX ARM64 instances and pairs directly with Hetzner S3 Object Storage.
ionos.de (VPS & Cloud Server)
IONOS Cloud Panel · S3 Object Lock
Externe IONOS-Firewall öffnen: Open IONOS Cloud Panel -> Network -> Firewall Policies and allow inbound TCP 25, 80, 443, 465, 587, 993, and 4190.
Reverse-DNS konfigurieren: Set Reverse DNS under Network -> Public IPs to mail.yourdomain.de once the A record resolves.
GoBD-Archiv mit IONOS S3: Pair with IONOS S3 Object Storage in Frankfurt/Berlin with native S3 Object Lock (COMPLIANCE).
ALL-INKL.COM (KAS DNS & Smarthost)
KAS DNS-Werkzeuge · Smarthost
Variante A (Domain bei ALL-INKL, nextxch auf eigenem VPS): In ALL-INKL KAS -> Tools -> DNS Tools, point A/AAAA for mail and MX to your nextxch IP, and add SPF/DKIM/DMARC TXT records.
Variante B (nextxch im Büro / NAS mit ALL-INKL als Versand-Relay): Running nextxch on an office NAS/Proxmox® behind dynamic IP? Configure w01abc.kasserver.com:587 as Smtp__OutboundSmartHost and add include:_spf.kasserver.com to SPF.
Hostinger (KVM VPS & hPanel)
hPanel · KVM 2 / KVM 4
PTR-Eintrag im VPS-Bereich: In Hostinger hPanel -> VPS -> IP Addresses, set the PTR record to mail.yourdomain.de.
Port 25 / Relay beachten: Verify outbound port 25 is unlocked on your KVM plan, or configure an authenticated port 587 Smarthost in nextxch.
hPanel DNS-Verwaltung: Replace default MX entries in hPanel DNS Zone Editor with mail.yourdomain.de and your SPF/DKIM/DMARC TXT records.
Strato (V-Server Linux®/Windows® & Dedicated)
STRATO Server-Login · Windows® & Linux®
Ideal für Windows Server® ohne Docker®: On STRATO Windows® V-Servers, install directly as a native Windows® Service using the PowerShell® command above.
Reverse-DNS im STRATO Server-Login: In STRATO Server Login -> IP Addresses, set Reverse DNS for IPv4 and IPv6 to mail.yourdomain.de.
STRATO Domainverwaltung: In STRATO Domain Management -> DNS Settings, switch MX to custom mail server (mail.yourdomain.de) and add TXT records.
OVHcloud (VPS, Dedicated & Public Cloud)
OVHcloud Control Panel · EU S3 WORM
Wichtige Reihenfolge für OVHcloud PTR: OVHcloud validates forward DNS before accepting a PTR change: create A and AAAA records for mail.yourdomain.de first, then set Reverse DNS under Network -> Public IPs.
Netzwerk-Firewall & S3 Object Lock: Allow mail ports in OVHcloud Edge Network Firewall and optionally connect OVHcloud S3 Object Storage (Limburg/Strasbourg) for immutable GoBD WORM archiving.