Skip to main content

Mise en place de Seafile Community + OnlyOffice

Prérequis :
  • Avoir une base de donnée MariaDB déployé en local 
    • Voir déploiement MariaDB
  • Avoir un nom de domaine
    • Dans notre cas le nom de domaine utilisé est : miraceti.net


Il existe plusieurs manière de mettre en place Seafile Docker. Dans notre cas nous allons utiliser une base de données MariaDbMySQL déjà déployé avec Docker car nous allons utiliséutiliser la version community de SeafileSeafile.

Configuration nom de domaine

Grâce à notre nom de domaine, nous allons pouvoir créer des sous domaine (en CNAME A).

Sur le site de nom de domaine respectif, dans la section DNS, ajouter l'entrée suivante : 

  • drive.miraceti.net      A       ip.adress.server
    • Sera utilisé pour redirigé sur l'interface Web de Seafile
    office.miraceti.net      A       ip.adress.server
      Sera utilisé pour éditer les documents avec onlyoffice


      Configuration Docker Compose

      Pour accéder à notre base de données externe, nous devons importer le network  lié à la base de donnée (dans notre cas le network est "bddnetwork"). 

      Fichier docker-compose.yaml : 

      services:
       
        # Service de cache pour Seafile
        memcached:
          image: memcached:1.6
          container_name: seafile-memcached
          restart: unless-stopped
          networks:
            - seafile-net
          entrypoint: memcached -m 256
      
        seafile:
          image: seafileltd/seafile-mc:latest
          container_name: seafile
          restart: unless-stopped
          depends_on:
            - memcached
          ports:
            - "8082:80"   # Port HTTP Seafile (interface web)
            - "8086:8083:8080" # Port WebDAV (SeafDAV)
          environment:
            DB_HOST: mariadb	# Nom du conteneur de MariaDB
            DB_ROOT_PASSWD: myRootPasswordMariaDB   # Mot de passe admin de MariaDB
            SEAFILE_SERVER_LETSENCRYPT: "false"
            SEAFILE_SERVER_HOSTNAME: drive.miraceti.net
            SEAFILE_MYSQL_DB_USER: seafile
            SEAFILE_MYSQL_DB_PASSWORD: myPasswordDBSeafile
            SEAFILE_MYSQL_DB_HOST: mariadb
            INIT_SEAFILE_MYSQL_ROOT_PASSWORD: myRootPasswordMariaDB
            TIME_ZONE: Europe/Paris
            MEMCACHED_HOST: seafile-memcached  # Nom du conteneur de cache
          volumes:
            - /my/path/to/seafile/data:/shared  # Emplacement des conf + data
          networks:
            - bddnetwork
            - seafile-net
      
        onlyoffice:
          image: onlyoffice/documentserver:latest
          container_name: onlyoffice
          restart: unless-stopped
          depends_on:
            - seafile
          ports:
            - "8081:80"
          environment:
            - JWT_ENABLED=true
            - JWT_SECRET=MyJwtTokenSecretGenerateByOnlyOffice
            - JWT_HEADER=Authorization
          volumes:
            - /my/path/to/onlyoffice/data:/var/www/onlyoffice/Data
            - /my/path/to/onlyoffice/logs:/var/log/onlyoffice
          networks:
            - seafile-net
      
      networks:
        seafile-net:  # Réseau interne de seafile
        bddnetwork:
          external: true

      Le mot de passe INIT_SEAFILE_MYSQL_ROOT_PASSWORD est nécessaire seulement la première fois pour initialiser la base de donnée et créer l'utilisateur.

      Démarrage de seafile

      FichierNous allons démarrer seulement le service seafile du docker compose pour initialiser la base de donnée et générer les fichiers de configuration. 

      docker compose up -d seafile

      Les logs doivent ressembler à : 

      ocker compose logs seafile
      seafile  | *** Running /etc/my_init.d/01_create_data_links.sh..env.
      seafile  | *** Booting runit daemon...
      seafile  | *** Runit started as PID 21
      seafile  | *** Running /scripts/enterpoint.sh...
      seafile  | 2025-10-09 16:48:48 Nginx ready 
      seafile  | 2025-10-09 16:48:48 This is an idle script (infinite loop) to keep container running. 
      seafile  | [2025-10-09 16:48:48] Skip running setup-seafile-mysql.py because there is existing seafile-data folder.
      seafile  | [10/09/2025 16:48:48][upgrade]: The container was recreated, start fix the media symlinks
      seafile  | [10/09/2025 16:48:48][upgrade]: Done
      seafile  | 
      seafile  | Starting seafile server, please wait ...
      seafile  | Seafile server started
      seafile  | 
      seafile  | Done.
      seafile  | 
      seafile  | Starting seahub at port 8000 ...
      seafile  | 
      seafile  | Seahub is started
      seafile  | 
      seafile  | Done.
      seafile  | 

      Dans le cas contraire, cela signifie que l'image seafile n'a pas démarré correctement, peut être du à la connexion à la base de donnée. 

      Maintenant nous pouvons éteindre le service (docker compose stop) pour passer à l'édition des fichiers de configurations. 


      Edition des fichier de configuration Seafile

      seafile.conf

      Editer le fichier se trouvant au chemin /my/path/to/seafile/data/seafile/conf/seafile.conf pour y mettre la configuration suivante : 

      [fileserver]
      port = 8082
      
      [database]
      type = mysql
      host = mariadb
      port = 3306
      user = seafile
      password = 1a180549-b891-4071-8cf5-70193e9bba3c
      db_name = seafile_db
      connection_charset = utf8
      
      [notification]
      enabled = false
      host = 127.0.0.1
      port = 8083
      log_level = info
      jwt_private_key = *****************
      seahub_settings.py

      Editer le fichier se trouvant au chemin /my/path/to/seafile/data/seafile/conf/seahub_settings.py pour y mettre la configuration suivante :

      # -*- coding: utf-8 -*-
      SECRET_KEY = "l*********************************@u#"
      SERVICE_URL = "https://drive.miraceti.net"
      
      DATABASES = {
          'default': {
              'ENGINE': 'django.db.backends.mysql',
              'NAME': 'seahub_db',
              'USER': 'seafile',
              'PASSWORD': '123456789-b891-4071-8cf5-123456789',
              'HOST': 'mariadb',
              'PORT': '3306',
              'OPTIONS': {'charset': 'utf8mb4'},
          }
      }
      
      
      CACHES = {
          'default': {
              'BACKEND': 'django_pylibmc.memcached.PyLibMCCache',
              'LOCATION': 'memcached:11211',
          },
          'locmem': {
              'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
          },
      }
      COMPRESS_CACHE_BACKEND = 'locmem'
      TIME_ZONE = 'Europe/Paris'
      
      # Security Settings
      ALLOWED_HOSTS = ['.miraceti.net']
      
      # Whether to use a secure cookie for the CSRF cookie
      CSRF_COOKIE_SECURE = True
      # The value of the SameSite flag on the CSRF cookie
      CSRF_COOKIE_SAMESITE = 'Strict'
      CSRF_TRUSTED_ORIGINS = ['https://drive.miraceti.net', 'https://office.miraceti.net']
      
      # OnlyOffice integration
      ENABLE_ONLYOFFICE = True
      VERIFY_ONLYOFFICE_CERTIFICATE = False
      ONLYOFFICE_APIJS_URL = 'https://office.miraceti.net/web-apps/apps/api/documents/api.js'
      ONLYOFFICE_FILE_EXTENSION = ('doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', 'odt', 'fodt', 'odp', 'fodp', 'ods', 'fods', 'csv', 'ppsx', 'pps')
      ONLYOFFICE_EDIT_FILE_EXTENSION = ('doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'odt', 'ods')
      ONLYOFFICE_JWT_SECRET = '<replace_by_your_jwt_token>'
      ONLYOFFICE_JWT_HEADER = 'Authorization'
      
      # Mail configuration
      EMAIL_USE_SSL = True
      EMAIL_HOST = ''        # smpt server
      EMAIL_HOST_USER = ''    # username and domain
      EMAIL_HOST_PASSWORD = ''    # password
      EMAIL_PORT = 526
      DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
      SERVER_EMAIL = EMAIL_HOST_USER
      
      # Webdav configuration
      ENABLE_SEAFDAV = True
      SEAFDAV_HOST = '0.0.0.0'
      SEAFDAV_PORT = 8080
      SEAFDAV_SSL = False
      FILE_SERVER_ROOT = 'https://drive.miraceti.net/seafhttp'
      seafdav.conf


      Editer le fichier se trouvant au chemin /my/path/to/seafile/data/seafile/conf/seafdav.conf pour y mettre la configuration suivante :

      [WEBDAV]
      enabled = true
      port = 8080
      host = 0.0.0.0
      workers = 5
      timeout = 1200
      share_name = /seafdav

       

      Démarrer le docker compose devrait rendre Nextcloud accessible en local, ou sur l'adresse IP de votre serveur sur le réseau local, sur le port 8082.  


      Configuration Apache2

      Création d'un nouveau host dans /etc/apache2/sites-available avec le nom suivant "cloud.miraceti.net.conf": 

       

      Vérification de la nouvelle configuration  :

      Activation de la nouvelle configuration :