Kennisbank › Email › Configurer Roundcube webmail sur un serveur Linux
email gemiddeld 27 September 2026

Configurer Roundcube webmail sur un serveur Linux

Configurer Roundcube webmail sur un serveur Linux Roundcube est une webmail en PHP qui parle IMAP et SMTP : tu la poses sur ton serveur, tu pointes un

C'est la solution qu'on choisit quand on héberge déjà son propre mail et qu'on veut une interface correcte pour les utilisateurs qui ne veulent pas entendre parler de Thunderbird. Elle ne remplace pas Dovecot ni Postfix : elle se branche dessus. Si ton serveur IMAP est cassé, Roundcube ne le réparera pas. Il affichera juste l'erreur plus joliment.

Prérequis

Avant de commencer, il te faut :
  • Un serveur Linux (Debian 12 ou Ubuntu 24.04 LTS dans cet article — les chemins diffèrent légèrement sur RHEL et dérivés).
  • Un serveur IMAP fonctionnel. Dovecot 2.3 ou plus récent fait très bien l'affaire, avec un accès en IMAP sur le port 993 (TLS) ou 143 (STARTTLS).
  • Un serveur SMTP pour l'envoi. Postfix 3.7 ou plus récent, avec soumission authentifiée sur le port 587.
  • PHP 8.1 minimum. Roundcube 1.6.x exige PHP 8.1 ; la branche 1.5.x se contente de PHP 7.4 mais n'est plus maintenue activement.
  • Une base de données. MySQL 8.0, MariaDB 10.6 ou PostgreSQL 14 — au choix. Roundcube y stocke les contacts, les préférences utilisateur et le cache de session.
  • Un accès root ou sudo sur la machine.
  • Un nom d'hôte et un certificat TLS valide. Roundcube sert des sessions authentifiées ; le HTTP en clair n'est pas une option.
Une note sur le choix de la base : SQLite fonctionne aussi et simplifie l'installation pour un usage à un seul utilisateur. Dès que tu passes à plusieurs comptes, la concurrence en écriture devient pénible. MySQL ou PostgreSQL coûtent une dépendance de plus et t'évitent ce mur.

Étapes

1. Installer les paquets système

Sur Debian et Ubuntu, Roundcube est packagé. L'installation par paquet te donne les mises à jour de sécurité automatiques et les bons chemins par défaut. L'installation depuis l'archive upstream te donne la version la plus récente, au prix d'une mise à jour manuelle à chaque correctif.

Pour cet article on part sur les paquets.

```bash sudo apt update sudo apt install -y roundcube roundcube-mysql \ php-fpm php-mysql php-intl php-xml php-mbstring php-gd php-curl \ php-zip php-ldap ```

Le paquet `roundcube-mysql` tire le schéma de base de données. Si tu préfères PostgreSQL, remplace-le par `roundcube-pgsql` et adapte les commandes qui suivent.

Sur Debian 12, l'installation place le code dans `/usr/share/roundcube` et la configuration dans `/etc/roundcube`. C'est cette séparation qui rend les mises à jour indolores : `apt upgrade` écrase le code, jamais ta config.

2. Créer la base de données et l'utilisateur

Roundcube a besoin d'un utilisateur MySQL dédié. Ne réutilise pas root. Une injection SQL dans un plugin tiers ne doit pas te donner les droits sur tout le serveur.

```bash sudo mysql -u root <<'SQL' CREATE DATABASE roundcube CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'roundcube'@'localhost' IDENTIFIED BY 'MotDePasseSolideIci'; GRANT ALL PRIVILEGES ON roundcube.* TO 'roundcube'@'localhost'; FLUSH PRIVILEGES; SQL ```

Remplace le mot de passe. `utf8mb4` n'est pas un détail : sans lui, les emojis dans les objets de mail cassent l'insertion, et tu passes une soirée à chercher pourquoi certains messages disparaissent.

Charge ensuite le schéma initial :

```bash sudo mysql -u roundcube -p roundcube < /usr/share/roundcube/SQL/mysql.initial.sql ```

Sur PostgreSQL, le fichier s'appelle `pgsql.initial.sql` et la commande passe par `psql`.

3. Configurer la connexion à la base

Le fichier principal est `/etc/roundcube/config.inc.php`. Il contient déjà des valeurs par défaut ; tu n'écrases que ce qui doit changer.

```bash sudo cp /etc/roundcube/config.inc.php /etc/roundcube/config.inc.php.bak sudo nano /etc/roundcube/config.inc.php ```

Ajoute ou adapte le bloc suivant :

```php $config['db_dsnw'] = 'mysql://roundcube:MotDePasseSolideIci@localhost/roundcube'; $config['db_dsnr'] = ''; ```

`db_dsnw` est la connexion en écriture, `db_dsnr` en lecture. Laisser `db_dsnr` vide force Roundcube à tout faire sur la même connexion. C'est plus simple et parfaitement suffisant jusqu'à quelques centaines d'utilisateurs. Au-delà, tu sépares et tu ajoutes des replicas — mais tu n'en es pas là.

4. Renseigner les serveurs IMAP et SMTP

C'est ici que la plupart des installations échouent. Roundcube ne devine rien : tu lui donnes l'hôte, le port et le mode de chiffrement pour chaque protocole.

```php $config['imap_host'] = 'ssl://mail.example.be:993'; $config['smtp_host'] = 'tls://mail.example.be:587'; $config['smtp_user'] = '%u'; $config['smtp_pass'] = '%p'; ```

Le `%u` et le `%p` sont remplacés par le login et le mot de passe saisis dans le formulaire. C'est ce qui permet à un utilisateur de se connecter avec ses identifiants IMAP et d'envoyer sans configuration supplémentaire.

Utilise `ssl://` pour le port 993 (TLS implicite) et `tls://` pour le 587 (STARTTLS). Inverser les deux donne une erreur de handshake qui ne dit pas son nom. Si ton certificat est auto-signé, ajoute `$config['imap_conn_options']` avec le chemin du CA — mais la vraie réponse est de ne pas avoir de certificat auto-signé en production.

5. Définir la clé de chiffrement

Roundcube chiffre certains champs en base (mots de passe stockés pour les plugins, préférences sensibles). Sans clé explicite, il en génère une à la volée — et la perd au premier redémarrage propre.

```bash sudo openssl rand -base64 32 ```

Colle le résultat dans la config :

```php $config['des_key'] = 'la_chaine_generee_ici'; ```

Cette clé doit rester stable. Si tu la changes, tous les secrets chiffrés deviennent illisibles. Sauvegarde-la avec le reste de ta configuration, pas dans le dépôt Git public.

6. Activer le plugin password (optionnel mais utile)

Sans ce plugin, tes utilisateurs ne peuvent pas changer leur mot de passe depuis la webmail. Ils appellent. Tu réponds. À 3 heures du matin.

```php $config['plugins'] = ['archive', 'zipdownload', 'password', 'managesieve']; ```

Le plugin `password` a besoin de savoir où écrire. Pour Dovecot avec un backend SQL :

```php $config['password_driver'] = 'sql'; $config['password_db_dsn'] = 'mysql://roundcube:MotDePasseSolideIci@localhost/mail'; $config['password_query'] = 'UPDATE users SET password=%c WHERE username=%u'; ```

Adapte la requête à ton schéma. Si ton Dovecot utilise `doveadm`, passe plutôt par `password_driver = 'dovecot'` et la socket correspondante. Le driver SQL est plus rapide, le driver dovecot est plus sûr si tu as des règles de hash complexes.

7. Brancher Roundcube sur Nginx

Roundcube a besoin d'un serveur web. Nginx 1.24 fait le travail. Le bloc ci-dessous suppose que tu as déjà un certificat Let's Encrypt pour `webmail.example.be`.

```nginx server { listen 443 ssl http2; server_name webmail.example.be;

ssl_certificate /etc/letsencrypt/live/webmail.example.be/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/webmail.example.be/privkey.pem;

root /usr/share/roundcube; index index.php;

location / { try_files $uri $uri/ /index.php$is_args$args; }

location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.2-fpm.sock; }

location ~ ^/(config|temp|logs|SQL)/ { deny all; }

location ~ /\. { deny all; } } ```

Le bloc `deny all` sur `/config` et `/temp` n'est pas décoratif. Sans lui, un `curl https://webmail.example.be/config/config.inc.php` peut servir ton mot de passe de base de données en texte clair. Vérifie ce point avant de passer à la suite.

Recharge Nginx :

```bash sudo nginx -t sudo systemctl reload nginx ```

8. Ajuster les permissions

Nginx tourne sous `www-data`. Roundcube écrit dans `temp/` et `logs/`. Ces deux répertoires doivent appartenir à l'utilisateur du serveur web, pas à root.

```bash sudo chown -R www-data:www-data /var/lib/roundcube/temp /var/lib/roundcube/logs sudo chmod 750 /var/lib/roundcube/temp /var/lib/roundcube/logs sudo chmod 640 /etc/roundcube/config.inc.php /etc/roundcube/debian-db.php ```

Le reste du code reste en lecture seule pour `www-data`. Un fichier PHP modifiable par le processus qui l'exécute, c'est une porte ouverte le jour où un plugin a une faille d'upload.

Vérification

Ouvre `https://webmail.example.be` dans un navigateur. Tu dois voir le formulaire de connexion Roundcube.

Connecte-toi avec un compte IMAP existant. Si la page se charge, que le login passe et que la boîte de réception s'affiche, l'essentiel est en place.

Pour vérifier côté serveur, contrôle les logs :

```bash sudo tail -f /var/log/nginx/error.log sudo tail -f /var/lib/roundcube/logs/errors.log ```

Les erreurs de connexion IMAP atterrissent dans `errors.log`. Les erreurs PHP dans le log Nginx ou dans `/var/log/php8.2-fpm.log` selon la configuration.

Teste aussi l'envoi : compose un message vers une adresse externe et vérifie qu'il arrive. Un IMAP qui marche avec un SMTP cassé, c'est une webmail en lecture seule — et personne ne s'en aperçoit avant d'avoir besoin de répondre à un client pressé.

Problèmes courants

« Connection to storage server failed » au login. Le couple hôte/port IMAP est faux, ou le certificat TLS n'est pas accepté. Vérifie d'abord à la main avec `openssl s_client -connect mail.example.be:993 -crlf`. Si la poignée de main passe, le problème est dans `imap_host` — souvent un `ssl://` manquant ou un port 143 au lieu de 993.

Page blanche après le login. Active le debug temporairement dans `config.inc.php` :

```php $config['debug_level'] = 4; $config['log_driver'] = 'file'; ```

Regarde `logs/errors.log`. Neuf fois sur dix, c'est une extension PHP manquante — `php-intl` et `php-mbstring` sont les deux qu'on oublie.

Les mails envoyés finissent en spam chez le destinataire. Ce n'est pas Roundcube, c'est ta configuration DNS. SPF, DKIM et DMARC doivent être en place sur le domaine expéditeur. Roundcube envoie ce que Postfix lui donne ; si Postfix n'a pas de DKIM, Gmail classe en spam et ton utilisateur t'appelle.

Roundcube n'est pas la seule webmail possible. SnappyMail est plus léger, plus rapide sur les grosses boîtes, et se contente d'un dossier sans base de données. Il est moins extensible et sa communauté est plus petite. Si ton besoin se résume à lire et envoyer du courrier pour trois personnes, SnappyMail te coûtera moins de soirées. Si tu veux des plugins, des skins et une base d'utilisateurs qui grandit, Roundcube reste la valeur sûre — à condition d'accepter que « valeur sûre » veut dire « je maintiens ça moi-même ».

← Terug naar kennisbank
← Terug naar kennisbank