Déploiement de SOGo avec MySQL ou PostgreSQL via Docker Compose

SOGo est une solution groupware open-source qui offre des fonctionnalités telles que la gestion des courriels, des calendriers et des contacts. Dans cet article, nous allons voir comment déployer SOGo à l’aide de Docker Compose en utilisant MySQL ou PostgreSQL comme base de données backend.

Nous fournirons deux exemples de fichiers docker-compose.yml : un pour MySQL et un pour PostgreSQL. Vous pourrez choisir celui qui correspond le mieux à votre environnement.


Déploiement de SOGo avec MySQL

Le fichier docker-compose.yml suivant configure SOGo pour qu’il fonctionne avec une base de données MySQL. Nous utilisons l’image Docker personnalisée pmietlicki/sogo-from-sources pour exécuter SOGo, et une image MySQL officielle pour la base de données.

services:
  sogo:
    image: pmietlicki/sogo-from-sources
    container_name: sogo
    ports:
      - "80:80"       # HTTP
      - "443:443"     # HTTPS
      - "8800:8800"   # Port pour Apple devices
    volumes:
      - sogo-conf:/srv/etc
      - sogo-data:/srv/lib/sogo
    environment:
      - MEMCACHED=64 # 64 MiB pour memcached, ajustez selon vos besoins
      - SOGoMailingMechanism=smtp
      - SOGoSMTPServer=smtp-server.localdomain.local
      - SOGoIMAPServer=imaps://imap-server.localdomain.local:143
      - WOWorkersCount=8
      - MYSQL_HOST=db
      - MYSQL_PORT=3306
      - MYSQL_DATABASE=sogo
      - MYSQL_USER=sogo
      - MYSQL_PASSWORD=sogo_password

    depends_on:
      - db

  db:
    image: mysql:8.0
    container_name: sogo-mysql
    environment:
      - MYSQL_ROOT_PASSWORD=root_password
      - MYSQL_DATABASE=sogo
      - MYSQL_USER=sogo
      - MYSQL_PASSWORD=sogo_password
    volumes:
      - mysql-data:/var/lib/mysql

volumes:
  sogo-conf:
    driver: local
  sogo-data:
    driver: local
  mysql-data:
    driver: local

Explications :

  • Volumes :
  • sogo-conf : Stocke la configuration de SOGo pour persistance.
  • sogo-data : Stocke les données de SOGo telles que les profils utilisateurs.
  • mysql-data : Stocke les données MySQL pour persistance.
  • Variables d’environnement :
  • MYSQL_HOST, MYSQL_PORT, MYSQL_DATABASE, MYSQL_USER, MYSQL_PASSWORD : Configurent les paramètres de connexion à la base de données MySQL.
  • Ports :
  • 80, 443, 8800 : Ports exposés pour SOGo, couvrant HTTP, HTTPS et les appareils Apple.

Déploiement de SOGo avec PostgreSQL

Le fichier docker-compose.yml suivant configure SOGo pour qu’il fonctionne avec une base de données PostgreSQL.

services:
  sogo:
    image: pmietlicki/sogo-from-sources
    container_name: sogo
    ports:
      - "80:80"       # HTTP
      - "443:443"     # HTTPS
      - "8800:8800"   # Port pour Apple devices
    volumes:
      - sogo-conf:/srv/etc
      - sogo-data:/srv/lib/sogo
    environment:
      - MEMCACHED=64 # 64 MiB pour memcached, ajustez selon vos besoins
      - SOGoMailingMechanism=smtp
      - SOGoSMTPServer=smtp-server.localdomain.local
      - SOGoIMAPServer=imaps://imap-server.localdomain.local:143
      - WOWorkersCount=8
      - POSTGRESQL_HOST=db
      - POSTGRESQL_PORT=5432
      - POSTGRESQL_DATABASE=sogo
      - POSTGRESQL_USER=sogo
      - POSTGRESQL_PASSWORD=sogo_password

    depends_on:
      - db

  db:
    image: postgres:13
    container_name: sogo-postgres
    environment:
      - POSTGRES_PASSWORD=root_password
      - POSTGRES_DB=sogo
      - POSTGRES_USER=sogo
    volumes:
      - postgres-data:/var/lib/postgresql/data

volumes:
  sogo-conf:
    driver: local
  sogo-data:
    driver: local
  postgres-data:
    driver: local

Explications :

  • Volumes :
  • sogo-conf : Stocke la configuration de SOGo pour persistance.
  • sogo-data : Stocke les données de SOGo telles que les profils utilisateurs.
  • postgres-data : Stocke les données PostgreSQL pour persistance.
  • Variables d’environnement :
  • POSTGRESQL_HOST, POSTGRESQL_PORT, POSTGRESQL_DATABASE, POSTGRESQL_USER, POSTGRESQL_PASSWORD : Configurent les paramètres de connexion à la base de données PostgreSQL.
  • Ports :
  • 80, 443, 8800 : Ports exposés pour SOGo, couvrant HTTP, HTTPS et les appareils Apple.

Usage

  1. Créez lefichier docker-compose.yml avec le contenu correspondant à votre choix de base de données (MySQL ou PostgreSQL).
  2. Placez-le dans le répertoire de votre projet où vous souhaitez déployer SOGo.
  3. Lancez le déploiement avec la commande suivante :
   docker-compose up -d
  1. Vérifiez les logs pour vous assurer que SOGo et la base de données démarrent correctement :
   docker-compose logs -f

Bonus : Création de la Table sogo_users et d’un Compte Utilisateur

Pour permettre à SOGo de gérer les utilisateurs, il est nécessaire de créer une table appropriée dans la base de données choisie (MySQL ou PostgreSQL). Cette table contiendra les informations des utilisateurs, y compris les identifiants et les mots de passe. Voici comment procéder pour créer cette table et ajouter un compte utilisateur.

1. Création de la Table sogo_users dans MySQL

Une fois que votre service MySQL est en cours d’exécution, connectez-vous à la base de données pour créer la table sogo_users :

docker exec -it sogo-mysql mysql -u root -p

Ensuite, créez la table en exécutant les commandes suivantes :

USE sogo;

CREATE TABLE sogo_users (
    c_uid VARCHAR(255) NOT NULL PRIMARY KEY,       -- Identifiant unique (nom d'utilisateur)
    c_name VARCHAR(255) NOT NULL,                  -- Nom unique ou adresse email
    c_password VARCHAR(255) NOT NULL,              -- Mot de passe haché
    mail VARCHAR(255) NOT NULL,                    -- Adresse email principale
    aliases TEXT,                                  -- Autres adresses email ou alias
    c_cn VARCHAR(255),                             -- Nom complet (Common Name)
    last_login TIMESTAMP                           -- Dernière date de connexion (facultatif)
);

2. Création de la Table sogo_users dans PostgreSQL

Pour PostgreSQL, connectez-vous à la base de données avec la commande suivante :

docker exec -it sogo-postgres psql -U sogo -d sogo

Ensuite, créez la table en exécutant les commandes suivantes :

CREATE TABLE sogo_users (
    c_uid VARCHAR(255) PRIMARY KEY,                -- Identifiant unique (nom d'utilisateur)
    c_name VARCHAR(255) NOT NULL,                  -- Nom unique ou adresse email
    c_password VARCHAR(255) NOT NULL,              -- Mot de passe haché
    mail VARCHAR(255) NOT NULL,                    -- Adresse email principale
    aliases TEXT,                                  -- Autres adresses email ou alias
    c_cn VARCHAR(255),                             -- Nom complet (Common Name)
    last_login TIMESTAMP                           -- Dernière date de connexion (facultatif)
);

3. Ajout d’un Compte Utilisateur

Après avoir créé la table, vous pouvez ajouter un utilisateur avec les informations suivantes :

  • Nom d’utilisateur : john.doe
  • Email : [email protected]
  • Mot de passe : password123 (haché en MD5)
INSERT INTO sogo_users (c_uid, c_name, c_password, mail, aliases, c_cn)
VALUES ('john.doe', '[email protected]', MD5('password123'), '[email protected]', '[email protected]', 'John Doe');

Cette commande crée un utilisateur john.doe avec l’adresse email [email protected] et un mot de passe haché password123.

4. Test de Connexion

Avec la table et le compte utilisateur configurés, vous pouvez maintenant vous connecter à SOGo avec les identifiants que vous avez créés :

  • Nom d’utilisateur ou Email : john.doe ou [email protected]
  • Mot de passe : password123

Si vous rencontrez des problèmes lors de la connexion, vérifiez les logs des conteneurs SOGo pour toute erreur liée à l’authentification.


Vérification des Logs

Si vous rencontrez des problèmes lors de la connexion, vérifiez les logs de SOGo pour identifier toute erreur liée à l’authentification ou à la configuration. Les logs de SOGo se trouvent dans le fichier suivant à l’intérieur du conteneur :

/var/log/sogo/sogo.log

Vous pouvez accéder aux logs avec la commande suivante :

docker exec -it sogo tail -f /var/log/sogo/sogo.log

Cela vous permettra de suivre les événements et les erreurs en temps réel.


Conclusion

Ces configurations docker-compose.yml vous permettent de déployer SOGo avec MySQL ou PostgreSQL selon vos besoins. Les volumes persistent les données et les configurations, assurant que votre instance SOGo est maintenue même après un redémarrage des conteneurs. Les variables d’environnement facilitent la personnalisation sans modifier l’image Docker elle-même.

Pour plus d’informations ou de personnalisation, consultez la documentation officielle de SOGo.