19 guides pas à pas Docker® Compose, OS, NAS & hébergeurs

Déploiement via Docker® Compose, service Windows® (sans Docker®), Linux®, NAS, Proxmox® & grands hébergeurs

Choisissez votre plateforme exacte : des exemples Docker® Compose prêts à l'emploi et d'un service Windows Server® natif sans Docker® jusqu'à Proxmox® VE, Raspberry Pi®, Synology®, ASUSTOR, UGREEN, TerraMaster et Unraid, ainsi que la configuration exacte du PTR et du pare-feu chez netcup, Hetzner, IONOS, ALL-INKL.COM, Hostinger, Strato et 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 ligne en 60 secondes

Un seul binaire unifié au lieu de sept démons fragiles.

Cessez d'assembler Postfix, Dovecot, Rspamd, OpenDKIM, Certbot, Redis et un ancien webmail PHP : nextxch réunit transport du courrier, groupware, Webmail PWA, Admin Cockpit, CLI/API et Let's Encrypt SNI en 0 ms dans un seul paquet autonome.

Installateurs en une ligne de terminal & paquets natifs vérifiés v1.0.0 (.msi, .deb, .tar.gz)

Vérifie automatiquement les empreintes SHA-256, demande de manière interactive le domaine, le nom d'hôte, l'administrateur et le stockage, ou effectue une mise à jour du service sur place

v1.0.0 · Vérifié 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® & Docker® Compose (version épinglée v1.0.0 pour Linux®, Windows®, macOS® & NAS)

Image OCI multi-architecture reproductible (nextxch/server:1.0.0 · linux/amd64 & linux/arm64) avec SQLite WAL ou PostgreSQL® 18, CalDAV/CardDAV, S3 Object Lock & OpenTelemetry

OCI v1.0.0
Remarque sur le registre de conteneurs : en production, nous recommandons fortement des tags de version épinglés (1.0.0 plutôt que :latest). Tant que la mise en miroir publique sur Docker® Hub est en déploiement progressif, install.sh --mode docker vérifie automatiquement SHA256SUMS.txt depuis nextxch.com et construit nextxch/server:1.0.0 localement sur votre hôte.
  1. Option A : Compose compact à conteneur unique (SQLite WAL + Zstandard) : idéal jusqu'à plusieurs milliers de boîtes aux lettres sur un seul VPS, serveur dédié ou NAS, sans aucune dépendance à une base de données externe et avec ~40 Mo de RAM au repos.
  2. Option B : Compose de production Enterprise (PostgreSQL® 18 + S3 WORM + OpenTelemetry) : mise à l'échelle horizontale, S3 Object Lock conforme GoBD et traces, métriques & journaux 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) : service Windows® natif sans Docker®

Véritable démon Windows® Service Control Manager (SCM) sans aucune surcharge Docker®, Hyper-V ou WSL2

Service Windows® natif
  1. Recommandé : assistant .msi officiel pour Windows® (v1.0.0) : lors d'une nouvelle installation, il demande de manière interactive le domaine, le nom d'hôte MX, l'identifiant administrateur, le choix entre SQLite WAL, Microsoft® SQL Server® (2019–2025 / Express / Azure® SQL) et PostgreSQL® 18, Let's Encrypt ACME, le pare-feu Windows® et un jeton de licence facultatif. L'exécution d'un .msi plus récent effectue en 1 clic une mise à niveau sur place du service Windows® tout en conservant appsettings.Production.json et les données de messagerie.
  2. CLI silencieuse sans surveillance pour Ansible, GPO & Microsoft® Intune : transmettez n'importe quelle propriété de configuration sans interface via 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"

Démon Linux® natif sans Docker® (systemd & .deb)

Debian® · Ubuntu® · Red Hat® · Rocky
  1. Utilisateur non-root dédié : s'exécute sans droits root avec CAP_NET_BIND_SERVICE pour les ports 25/443.
  2. Activer l'unité systemd native Type=notify : s'intègre nativement à journald et à la signalisation de disponibilité 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 natif : idéal pour les serveurs Mac mini® / Mac Studio® de bureau et l'environnement de préproduction local sur MacBook Pro®.
  2. Exécution persistante via launchd : démarre automatiquement au boot avec environ 40 Mo 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

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

100 % PostgreSQL® 18 · sans Redis · Helm v3
  1. Moteur de cluster 100 % PostgreSQL® 18 (sans Redis/Kafka) : les réplicas diffusent le push temps réel IMAP IDLE et JMAP SSE en < 2 ms via PostgreSQL® LISTEN/NOTIFY, partagent les challenges éphémères et limites de débit via des tables UNLOGGED et élisent les leaders ACME/conservation via pg_try_advisory_lock.
  2. Protocole PROXY HAProxy v1/v2 & sessions sans état : conserve les IP réelles des clients derrière des répartiteurs de charge L4 pour des contrôles SPF/DMARC/CIDR précis ; des jetons signés permettent une mise à l'échelle HPA sans sessions persistantes.
  3. Licences Ed25519 compatibles cluster : un seul jeton de licence couvre un nombre illimité de pods et se synchronise automatiquement sur tous les nœuds une fois activé dans /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
Virtualisation, ARM64 & appliances NAS

Installation sur Proxmox®, Raspberry Pi®, Synology®, ASUSTOR, UGREEN, TerraMaster & Unraid

Proxmox® VE (LXC & KVM)

Proxmox® VE 8+ · ZFS / NVMe
  1. Créer un conteneur LXC : créez un conteneur LXC Debian® 12 non privilégié (2 vCPU, 1024 Mo de RAM) avec un point de montage ZFS/NVMe sur /var/lib/nextxch.
  2. Directement via .deb / systemd : dans un LXC, exécutez le service natif .deb/systemd pour éviter toute surcharge de conteneurs imbriqués et bénéficier de snapshots instantanés Proxmox® Backup Server.
  3. Pare-feu Proxmox® : autorisez en entrée TCP 25, 465, 587, 993, 4190, 80, 443 dans le pare-feu Datacenter/CT.
# 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 Mo de RAM
  1. Système 64 bits & NVMe au lieu d'une carte SD : utilisez Raspberry Pi® OS Lite 64 bits et placez /var/lib/nextxch sur un HAT NVMe M.2 ou un SSD USB 3 plutôt que sur une microSD.
  2. Conseil pour connexion résidentielle (smarthost) : sur les IP dynamiques résidentielles, définissez Smtp__OutboundSmartHost sur le relais de votre FAI/hébergeur pour une remise sortante 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

NAS Synology® (DSM 7.2+)

Container Manager · Btrfs
  1. Créer un dossier dans File Station : créez /volume1/docker/nextxch dans File Station sur votre volume Btrfs/SSD.
  2. Éviter les conflits de ports : assurez-vous que Synology® MailPlus est arrêté afin que les ports 25, 465, 587 et 993 soient libres.
  3. Ouvrir Container Manager : ouvrez Container Manager -> Projet -> Créer, sélectionnez /volume1/docker/nextxch et collez :
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. Installer Docker®-CE & Portainer CE : installez Docker®-CE et Portainer CE depuis ADM App Central.
  2. Dossier persistant : créez /volume1/Docker/nextxch dans l'explorateur de fichiers ADM.
  3. Déployer la stack : déployez une stack dans Portainer avec le mappage /volume1/Docker/nextxch:/app/data et autorisez les ports de messagerie dans 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 · projet Docker®
  1. Utiliser le pool de stockage NVMe : sur les modèles UGREEN NASync DXP, placez /volume1/docker/nextxch sur votre pool NVMe M.2 pour une recherche instantanée.
  2. Application Docker® pour UGOS Pro : ouvrez UGOS Pro Docker® -> Project -> Create, collez le fichier Compose et cliquez sur 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. Installer Docker® Manager : installez Docker® Manager depuis le TOS App Center et créez /Volume1/docker/nextxch.
  2. Déployer le projet : dans Docker® Manager -> Projects -> Add, collez la pile YAML et démarrez-la.
volumes:
  - /Volume1/docker/nextxch:/app/data
# Admin-Cockpit nach Start: https://TERRAMASTER-IP:8443/admin/

Serveur Unraid (6.12+ / 7.x)

Unraid · Cache NVMe · Custom br0
  1. Placer Appdata sur le cache NVMe : mappez /mnt/cache/appdata/nextxch afin que les disques de l'array de parité puissent se mettre en veille pendant que les index tournent à la vitesse du NVMe.
  2. IP LAN dédiée via le type de réseau Custom: br0 (recommandé) : attribuez le type de réseau Custom br0 avec une IP LAN dédiée afin que les ports 80/443/25 n'entrent jamais en conflit avec la WebGUI d'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
Guides hébergeurs & DNS

Guides de configuration pour netcup, Hetzner, IONOS, ALL-INKL.COM, Hostinger, Strato & OVHcloud

Une remise fiable en boîte de réception chez Gmail™, Outlook® et sur les passerelles d'entreprise exige une réputation propre de l'IP d'envoi ainsi que trois réglages chez l'hébergeur : accès sortant au port 25, DNS inverse PTR IPv4/IPv6 concordant et enregistrements SPF/DKIM/DMARC alignés.

netcup.de (serveur root & VPS)

SCP · DNS CCP · port 25 ouvert
  1. Définir le DNS inverse (PTR) dans le SCP : dans netcup SCP -> Network, définissez le DNS inverse (PTR) de votre adresse IPv4 et de votre adresse IPv6 principale sur mail.yourdomain.de.
  2. Gérer le DNS dans le CCP : dans netcup CCP -> Domains -> DNS, ajoutez les enregistrements A, AAAA, MX (prio 10), SPF et TXT DKIM.
  3. Installation : déployez l'ISO Debian® 12 ou Windows Server® dans le SCP et installez en natif ou via Docker®.

hetzner.de (Cloud CX/CAX & Dedicated)

Cloud Console · x64 & Ampere ARM64
  1. Déblocage du port 25 pour les nouveaux clients : les nouveaux comptes Hetzner Cloud bloquent d'abord les ports sortants 25/465 ; demandez le déblocage du port via Cloud Console -> Limits après votre première facture.
  2. Définir les PTR IPv4 & IPv6 : dans Hetzner Cloud Console -> Networking -> Edit Reverse DNS, sur l'IPv4 principale et sur IPv6::1, vers mail.yourdomain.de.
  3. Conseil rapport qualité-prix : fonctionne nativement sur les instances Hetzner CAX ARM64 ultra-efficaces et s'associe directement au stockage objet Hetzner S3.

ionos.de (VPS & Cloud Server)

IONOS Cloud Panel · S3 Object Lock
  1. Ouvrir le pare-feu externe IONOS : ouvrez IONOS Cloud Panel -> Network -> Firewall Policies et autorisez en entrée les ports TCP 25, 80, 443, 465, 587, 993 et 4190.
  2. Configurer le DNS inverse : définissez le Reverse DNS sous Network -> Public IPs sur mail.yourdomain.de dès que l'enregistrement A est résolu.
  3. Archive GoBD avec IONOS S3 : à associer au stockage objet IONOS S3 à Francfort/Berlin avec S3 Object Lock natif (COMPLIANCE).

ALL-INKL.COM (DNS KAS & smarthost)

Outils DNS KAS · Smarthost
  1. Variante A (domaine chez ALL-INKL, nextxch sur votre propre VPS) : dans ALL-INKL KAS -> Tools -> DNS Tools, faites pointer A/AAAA de mail et le MX vers l'IP de votre nextxch, puis ajoutez les enregistrements TXT SPF/DKIM/DMARC.
  2. Variante B (nextxch au bureau / sur NAS avec ALL-INKL comme relais d'envoi) : vous exécutez nextxch sur un NAS/Proxmox® de bureau derrière une IP dynamique ? Configurez w01abc.kasserver.com:587 comme Smtp__OutboundSmartHost et ajoutez include:_spf.kasserver.com au SPF.

Hostinger (KVM VPS & hPanel)

hPanel · KVM 2 / KVM 4
  1. Enregistrement PTR dans l'espace VPS : dans Hostinger hPanel -> VPS -> IP Addresses, définissez l'enregistrement PTR sur mail.yourdomain.de.
  2. Attention au port 25 / relais : vérifiez que le port 25 sortant est débloqué sur votre offre KVM, ou configurez dans nextxch un smarthost authentifié sur le port 587.
  3. Gestion DNS dans hPanel : remplacez les entrées MX par défaut dans l'éditeur de zone DNS de hPanel par mail.yourdomain.de et vos enregistrements TXT SPF/DKIM/DMARC.

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

Connexion serveur STRATO · Windows® & Linux®
  1. Idéal pour Windows Server® sans Docker® : sur les V-Servers Windows® de STRATO, installez directement en tant que service Windows® natif à l'aide de la commande PowerShell® ci-dessus.
  2. DNS inverse dans le STRATO Server-Login : dans STRATO Server Login -> IP Addresses, définissez le DNS inverse pour IPv4 et IPv6 sur mail.yourdomain.de.
  3. Gestion de domaine STRATO : dans STRATO Domain Management -> DNS Settings, faites pointer le MX vers un serveur de messagerie personnalisé (mail.yourdomain.de) et ajoutez les enregistrements TXT.

OVHcloud (VPS, Dedicated & Public Cloud)

OVHcloud Control Panel · S3 WORM UE
  1. Ordre important pour le PTR chez OVHcloud : OVHcloud valide le DNS direct avant d'accepter une modification du PTR : créez d'abord les enregistrements A et AAAA pour mail.yourdomain.de, puis définissez le DNS inverse sous Network -> Public IPs.
  2. Pare-feu réseau & S3 Object Lock : autorisez les ports de messagerie dans l'OVHcloud Edge Network Firewall et connectez en option OVHcloud S3 Object Storage (Limbourg/Strasbourg) pour un archivage GoBD WORM immuable.