Passer au contenu principal
Une fois le binaire installé, oximail setup met le serveur en route. L’assistant génère la configuration, la clé DKIM, la première organisation et le compte administrateur, écrit une unité systemd, démarre le service et le vérifie. L’assistant est le chemin recommandé pour un premier démarrage. Chaque action peut aussi être lancée comme sous-commande distincte pour les déploiements automatisés.
Cette page décrit ce que fait réellement l’assistant dans OxiMail v0.30.0, étape par étape, dans l’ordre d’exécution. Lorsqu’une étape est conditionnelle ou facultative, c’est précisé. Les étapes que l’assistant ne fait pas sont listées à la fin.

Lancer l’assistant

oximail setup
Par défaut, l’assistant lit et écrit la configuration du serveur dans /etc/oximail/oximail.toml. Il doit ouvrir des ports privilégiés et écrire dans /etc/oximail et /var/lib/oximail. Lancez-le donc en tant que root. Options :
OptionEffet
--config <chemin>Chemin du TOML serveur. Par défaut /etc/oximail/oximail.toml.
--config-file <chemin>Mode non interactif à partir d’un fichier TOML de setup (sans question).
--dry-runAffiche ce qui serait fait et la configuration générée, sans rien écrire ni démarrer le service.
Si /etc/oximail/oximail.toml existe déjà, l’assistant prévient et demande s’il faut l’écraser. Si vous refusez, le setup est annulé et la configuration existante est conservée.

Déroulé interactif (serveur principal)

L’assistant pose quelques questions, puis exécute les étapes ci-dessous dans l’ordre.

Questions posées au départ

  1. Domaine de messagerie principal (par exemple oximail.ch), c’est-à-dire la partie domaine de vos adresses.
  2. Nom d’hôte du serveur de messagerie (par défaut mail.<domaine>).
  3. Mode de déploiement : Primary mail server (serveur principal) ou Backup MX (MX secondaire). Le mode MX secondaire a son propre déroulé, décrit plus bas.
  4. Topologie de déploiement : Direct (OxiMail gère le TLS sur le port 443) ou Behind reverse proxy (derrière un proxy inverse comme Caddy ou Nginx). L’option proxy demande aussi le port HTTP local sur lequel OxiMail doit écouter (par défaut 8080).

Étape : vérification des ports

L’assistant tente d’ouvrir chaque port requis en local et affiche OK ou FAIL avec la raison (permission refusée, port déjà utilisé, ouverture impossible). Les ports requis sont :
PortUsage
25SMTP entrant (réception du courrier)
80HTTP (challenges de certificat ACME)
443HTTPS / JMAP
465SMTPS (soumission chiffrée)
587Soumission SMTP (envoi du courrier)
993IMAPS (lecture du courrier)
Si vous avez choisi le proxy inverse, les ports 80 et 443 sont ignorés (le proxy les gère). Des ports bloqués n’arrêtent pas l’assistant, mais le serveur peut ne pas fonctionner tant qu’ils ne sont pas ouverts dans votre pare-feu.

Étape : répertoires de données

L’assistant crée /var/lib/oximail, /var/lib/oximail/blobs, /etc/oximail, /etc/oximail/dkim et /etc/oximail/tls. Il n’y a pas de /var/log/oximail : les journaux partent sur la sortie standard et sont captés par journald.

Étape : DNS

L’assistant demande un jeton d’API Cloudflare (laissez vide pour configurer le DNS à la main). Il détecte votre IP publique automatiquement (et vous demande de la saisir si la détection échoue), puis contrôle les enregistrements DNS du domaine et affiche un rapport réussite/échec.
  • Avec un jeton, il peut créer les enregistrements manquants via l’API Cloudflare : A, MX (priorité 10), SPF, DMARC, MTA-STS (TXT et CNAME), TLS-RPT, les CNAME autoconfig et autodiscover, un enregistrement CAA qui limite l’émission de certificats à Let’s Encrypt, et des enregistrements SRV pour l’autoconfiguration des clients (_autodiscover, _imaps, _submission, _caldavs, _carddavs). Si un enregistrement MX en conflit existe, il demande avant de le remplacer. Il revérifie ensuite le DNS.
  • Sans jeton, il affiche les résultats du contrôle et vous indique de créer les enregistrements vous-même.

Étape : DKIM

L’assistant génère une paire de clés DKIM RSA (sélecteur default) dans /etc/oximail/dkim/<domaine>.default.key et affiche l’enregistrement DNS à publier. Si un jeton Cloudflare a été fourni, il publie aussi l’enregistrement TXT DKIM sur default._domainkey.<domaine> (en supprimant d’abord tout enregistrement obsolète pour ce sélecteur). La clé publiée est au format SPKI (v=DKIM1; k=rsa; p=...).
La publication DKIM via Cloudflare n’a lieu qu’à l’intérieur de l’assistant complet. Les domaines ajoutés plus tard, ou les installations sans jeton Cloudflare, n’ont aucun enregistrement TXT DKIM publié automatiquement. Générez et publiez ces enregistrements à la main (voir la section Génération de clé DKIM plus bas).

Étape : fichier de configuration

L’assistant demande l’adresse de l’administrateur (par défaut admin@<domaine>) et, pour un déploiement direct, l’adresse ACME (Let’s Encrypt) (par défaut l’adresse de l’administrateur). Derrière un proxy inverse, ACME est ignoré car le proxy gère le TLS. L’assistant écrit /etc/oximail/oximail.toml pour un serveur principal. Contenu principal :
  • [server] : nom d’hôte, URL de base, adresses d’écoute (direct : 0.0.0.0:443 et 0.0.0.0:80 ; proxy : 127.0.0.1:<port> avec trusted_proxies).
  • [storage] : SQLite dans /var/lib/oximail/data.db, blobs dans /var/lib/oximail/blobs, encrypted = true.
  • [auth] default_tenant = "default".
  • [mode] role = "primary".
  • [smtp] : ports d’écoute et un bloc [[smtp.dkim_keys]] pour le couple domaine/sélecteur.
  • [tls] : ACME activé (direct) ou désactivé (proxy).
  • [legacy] : IMAP, CalDAV et CardDAV activés.
  • [spam], [greylisting], [security] (fail2ban et IP de confiance), [rate_limit], [network] contribute et [logging] (JSON vers journald).
Pour un déploiement derrière un proxy inverse, l’assistant affiche un extrait de Caddyfile prêt à l’emploi et précise que les ports SMTP (25, 587, 465) et IMAP (993) écoutent en direct et ne passent pas par le proxy. Pour ajuster ces valeurs ensuite, voir Configuration.

Étape : unité systemd

L’assistant écrit /etc/systemd/system/oximail.service. L’unité lance oximail serve --config /etc/oximail/oximail.toml, redémarre en cas d’échec, relève la limite de descripteurs de fichiers et envoie la sortie vers journald sous l’identifiant oximail. S’il ne peut pas écrire le fichier (pas root), il affiche le contenu de l’unité pour que vous l’installiez à la main. Voir Installation pour le détail de l’unité.

Étape : organisation et compte administrateur

L’assistant crée la première organisation (un tenant au sens du stockage : id default, nom Default, domaine déduit de l’adresse de l’administrateur), puis le compte administrateur. La création est idempotente : si elle existe déjà, l’assistant le signale et continue. Le mot de passe administrateur est demandé, avec confirmation. Il doit faire au moins 8 caractères et contenir une majuscule, une minuscule et un chiffre ; la saisie se répète tant que le mot de passe est trop faible. Le compte est créé avec le rôle admin et la langue fr.
Tant qu’aucune organisation n’existe, le serveur démarre en mode assistant web (“no tenants”). L’assistant en ligne de commande crée toujours le tenant default avant le compte administrateur, donc un oximail setup terminé vous permet de vous connecter directement.

Étape : démarrage du service

L’assistant exécute systemctl daemon-reload, systemctl enable oximail et systemctl start oximail, puis interroge le port 443 pendant 90 secondes au maximum, le temps que le certificat ACME soit provisionné. Il indique si le serveur est devenu disponible et, sinon, vous renvoie vers journalctl -u oximail -f.

Étape : vérification

Il se connecte aux ports 25, 587, 993 et 443, contrôle le point d’accès JMAP sur https://<nom-d-hote>/.well-known/jmap (un code 401 compte comme disponible) et confirme la présence du répertoire DKIM et du fichier de configuration. En cas de réussite, l’assistant affiche l’URL de connexion (https://<nom-d-hote>/auth/login), le chemin de la configuration et la commande de consultation des journaux.

Étape : import facultatif de données

Enfin, l’assistant propose d’importer du courrier existant. Choix possibles : Skip (ignorer), From IMAP server (Dovecot, Exchange, Gmail, tout serveur IMAP4), From Stalwart (JMAP API) ou From mbox/Maildir files. Chaque choix demande les informations de connexion correspondantes. Cette étape a lieu après que le serveur est déjà configuré et démarré, donc un import en échec ne casse pas l’installation. Vous pouvez réessayer à tout moment avec oximail migrate. Voir Migration pour le flux d’import autonome.

Déroulé MX secondaire

Si vous choisissez Backup MX comme mode de déploiement, l’assistant lance un déroulé dédié. Il demande le nom d’hôte du MX principal (par défaut mail.<domaine>), les domaines de relais supplémentaires et le mode de transfert (queue pour accepter en local et réessayer vers le principal, avec rapports DSN en cas de rejet définitif ; ou proxy pour relayer en temps réel et propager la réponse du principal, avec repli sur queue si le principal est injoignable). Il crée ensuite le compte administrateur, génère le DKIM, écrit une configuration role = "backup", installe l’unité systemd, crée éventuellement les enregistrements DNS de secours (MX priorité 20, A, DKIM et SRV IMAP/soumission via Cloudflare), et vérifie le port 25 et la configuration.

Configuration non interactive

Pour des installations automatisées, écrivez un fichier TOML de setup et passez-le avec --config-file :
oximail setup --config-file setup.toml
Le fichier comporte une section [server] (domain, hostname, éventuellement deploy_mode = "primary" ou "backup", topology = "direct" ou "proxy", proxy_port), ainsi que des sections facultatives [dns] (jeton Cloudflare, replace_existing_mx), [tls] (acme_email), [admin] (email plus password ou password_file), [import] (source = "imap" | "jmap" | "mbox" | "skip" avec les champs de connexion correspondants) et, pour le mode secondaire, [backup] (primary_hostname, accepted_domains, mode, config_output_path). Les mêmes étapes s’exécutent sans question. S’il n’y a pas de section [admin], l’assistant ne crée pas le compte administrateur et vous indique d’en créer un avec oximail account create. Les mots de passe passés en mode non interactif sont quand même contrôlés en force, et un mot de passe trop faible interrompt l’exécution. Utilisez --dry-run avec l’une de ces commandes pour prévisualiser la configuration générée et les actions, sans rien écrire ni démarrer.

Sous-commandes de setup individuelles

Chaque étape de l’assistant est aussi une sous-commande autonome sous oximail setup, pratique pour rejouer un seul morceau :
oximail setup dns --domain <d> --hostname <h> [--cloudflare-api-token <t>] [--replace-mx]
oximail setup dkim --domain <d> [--selector default]
oximail setup admin --email <e> [--password <p> | --password-file <f>] [--tenant-id default] [--config <chemin>]
oximail setup verify [--hostname <h>] [--config <chemin>]
Toutes acceptent --dry-run.

Génération de clé DKIM

Il existe aussi une commande DKIM de premier niveau (distincte de oximail setup dkim), celle qui est citée dans le démarrage rapide :
oximail setup-dkim --domain <domaine> --selector <sélecteur> --config <chemin>
OptionValeur par défautRemarques
--domain(requis)Domaine à signer, par exemple oximail.ch.
--selector(requis)Sélecteur DKIM, par exemple default.
--algorithmrsaSeul rsa (RSA-2048) est accepté à l’exécution. ed25519 est refusé car le signataire à l’exécution ne charge que des clés RSA.
--config/etc/oximail/oximail.tomlSert à déterminer le répertoire de stockage de la clé.
Cette commande génère la paire de clés dans /etc/oximail/dkim/ et affiche l’enregistrement DNS DKIM à publier. Elle ne publie pas l’enregistrement sur Cloudflare : seul l’assistant complet le fait, et seulement si un jeton est fourni. Publiez vous-même la valeur affichée v=DKIM1; k=rsa; p=... sur <sélecteur>._domainkey.<domaine>.

Démarrer et vérifier à la main

Si vous avez sauté l’étape de démarrage de l’assistant, ou installé l’unité à la main :
systemctl daemon-reload
systemctl enable --now oximail
systemctl status oximail
journalctl -u oximail -f
Relancez les contrôles de l’assistant à tout moment :
oximail setup verify --hostname mail.<domaine>

Ce que l’assistant ne fait pas

  • Il n’installe pas le binaire. Mettez d’abord oximail sur l’hôte ; voir Installation.
  • Il ne publie pas le DNS sans Cloudflare. Sans jeton Cloudflare, il affiche les enregistrements (ou les résultats du contrôle) à ajouter chez votre fournisseur.
  • Il ne publie pas le DKIM en dehors de l’assistant complet. Les commandes autonomes setup-dkim et setup dkim génèrent et affichent l’enregistrement, mais ne le poussent pas vers le DNS.
  • Il ne configure pas le DKIM ed25519. Seules des clés RSA-2048 sont générées et chargées à l’exécution.
  • Il ne gère pas votre pare-feu. La vérification des ports se contente de signaler les ports bloqués ; leur ouverture dans le pare-feu du VPS ou le groupe de sécurité reste manuelle.
  • Il ne crée pas d’organisations ni de comptes supplémentaires. Il provisionne exactement un tenant default et un compte administrateur. Ajoutez-en d’autres avec oximail tenant create et oximail account create.

Étapes suivantes