Skip to main content

Mettre en place OnlyOffice Docker avec Nextcloud

Prérequis :
  • Avoir un nom de domaine 
    • Dans notre cas nous utiliserons le nom de domaine : miraceti.net
  • Avoir une configuration de Nextcloud Docker fonctionnel 


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 gestion de notre nom de domaine respectif, dans la section DNS, ajouter l'entrée suivante : 

 
    sub.domaine.ext         A       ip.adress.server
      Soit office.miraceti.net     A        12.34.56.78


      Préparation des fichiers de configuration

      Il est conseillé de rajouter les configurations suivantes (docker-compose.yml et .env)  directement dans les fichiers correspondants à la configuration Nextcloud. 
      Mais il est aussi possible de séparer la configuration Nextcloud et la configuration Onlyoffice. Cependant il faudra mettre le conteneur Nextcloud dans un même network que le conteneur Onlyoffice.

      Préparation des fichiers de configuration

      Se placer dans le dossier contenant les fichiers docker-compose.yml et .env de la configuration Nextcloud Docker.

      Edition du fichier docker-compose.yml :

       ...(services nextcloud)...
      
        postgres-onlyoffice:
          image: ${ONLYOFFICE_DOCUMENT_POSTGRES_IMAGE_TAG}
          container_name: postgres-onlyoffice
          volumes:
            - onlyoffice-document-postgres:/var/lib/postgresql/data
          environment:
            POSTGRES_DB: ${ONLYOFFICE_DOCUMENT_DB_NAME}
            POSTGRES_USER: ${ONLYOFFICE_DOCUMENT_DB_USER}
            POSTGRES_HOST_AUTH_METHOD: trust
          networks:
            - onlyoffice-network
          healthcheck:
            test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"]
            interval: 10s
            timeout: 5s
            retries: 3
            start_period: 60s
          restart: unless-stopped
      
        redis-onlyoffice:
          image: ${ONLYOFFICE_DOCUMENT_REDIS_IMAGE_TAG}
          container_name: redis-onlyoffice
          volumes:
            - redis-onlyoffice-document-data:/data
          networks:
            - onlyoffice-network
          healthcheck:
            test: ["CMD", "redis-cli", "ping"]
            interval: 10s
            timeout: 5s
            retries: 3
            start_period: 60s
          restart: unless-stopped
      
        rabbitmq-onlyoffice:
          image: ${ONLYOFFICE_DOCUMENT_RABBITMQ_IMAGE_TAG}
          container_name: rabbitmq-onlyoffice
          volumes:
            - rabbitmq-onlyoffice-document-data:/bitnami/rabbitmq/mnesia
          environment:
            RABBITMQ_USERNAME: ${ONLYOFFICE_DOCUMENT_RABBITMQ_USER}
            RABBITMQ_PASSWORD: ${ONLYOFFICE_DOCUMENT_RABBITMQ_PASSWORD}
            POSTGRES_PASSWORD: ${ONLYOFFICE_DOCUMENT_DB_PASSWORD}
            RABBITMQ_MANAGEMENT_ALLOW_WEB_ACCESS: true
          networks:
            - onlyoffice-network
          healthcheck:
            test: rabbitmq-diagnostics -q ping
            interval: 10s
            timeout: 5s
            retries: 3
            start_period: 90s
          restart: unless-stopped
      
        onlyoffice-document:
          image: ${ONLYOFFICE_DOCUMENT_IMAGE_TAG}
          container_name: onlyoffice
          volumes:
            - onlyoffice-document-data:/var/www/onlyoffice/Data
            - onlyoffice-document-log:/var/log/onlyoffice
            - onlyoffice-document-cache-files:/var/lib/onlyoffice/documentserver/App_Data/cache/files
            - onlyoffice-document-public-files:/var/www/onlyoffice/documentserver-example/public/files
            - onlyoffice-document-fonts:/usr/share/fonts
          environment:
            DB_TYPE: postgres
            DB_HOST: postgres-onlyoffice-document
            DB_PORT: 5432
            DB_NAME: ${ONLYOFFICE_DOCUMENT_DB_NAME}
            DB_USER: ${ONLYOFFICE_DOCUMENT_DB_USER}
            DB_PWD: ${ONLYOFFICE_DOCUMENT_DB_PASSWORD}
            AMQP_URI: amqp://${ONLYOFFICE_DOCUMENT_RABBITMQ_USER}:${ONLYOFFICE_DOCUMENT_RABBITMQ_PASSWORD}@rabbitmq-onlyoffice-document
            REDIS_SERVER_HOST: redis-onlyoffice-document
            REDIS_SERVER_PORT: 6379
            JWT_ENABLED: true
            JWT_SECRET: ${ONLYOFFICE_DOCUMENT_JWT_SECRET}
            JWT_HEADER: Authorization
            JWT_IN_BODY: 'true'
          networks:
            - onlyoffice-network
            - bddnetwork
          restart: unless-stopped
          depends_on:
            postgres-onlyoffice:
              condition: service_healthy
            rabbitmq-onlyoffice:
              condition: service_healthy
      #      nextcloud:
      #        condition: service_healthy

      Edition du fichier .env : 

      ...(Nextcloud Variables)..
      
      # OnlyOffice Variables
      ONLYOFFICE_DOCUMENT_POSTGRES_IMAGE_TAG=postgres:15
      ONLYOFFICE_DOCUMENT_REDIS_IMAGE_TAG=redis:7.2
      ONLYOFFICE_DOCUMENT_RABBITMQ_IMAGE_TAG=bitnami/rabbitmq:3.13.4
      ONLYOFFICE_DOCUMENT_IMAGE_TAG=onlyoffice/documentserver:8.1
      ONLYOFFICE_DOCUMENT_HOSTNAME=office.miraceti.net
      ONLYOFFICE_DOCUMENT_DB_NAME=onlyoffice
      ONLYOFFICE_DOCUMENT_DB_USER=onlyofficedbuser
      ONLYOFFICE_DOCUMENT_DB_PASSWORD=yVNyHP2keUeD5wD3vkrb
      ONLYOFFICE_DOCUMENT_JWT_SECRET=7bukHBGUEzvCjHrYKuT8
      ONLYOFFICE_DOCUMENT_RABBITMQ_USER=rabbitmqdb
      ONLYOFFICE_DOCUMENT_RABBITMQ_PASSWORD=FX7zuRA7y2wVUNkYwtwH

      Création du network pour OnlyOffice

      Nous allons créer un network "office-network" pour lier les conteneurs/services suivants entre eux : 

      • postgres-onlyoffice
      • redis-onlyoffice
      • rabbitmq-onlyoffice
      • onlyoffice
      sudo docker network create office-network

       

      Configuration Apache2

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

      <VirtualHost *:80>
              ServerName office.miraceti.net
      
      	ErrorLog ${APACHE_LOG_DIR}/office.miraceti.net.log
              CustomLog ${APACHE_LOG_DIR}/office.miraceti.net.log combined
      
      	ProxyPreserveHost On
      	ProxyRequests Off        
              ProxyPass / http://localhost:8083/			# Port Used by container OnlyOffice
              ProxyPassReverse / http://localhost:8083/	# Port Used by container OnlyOffice
      
              <IfModule mod_dav.c>
                 Dav off
              </IfModule>
      
      	  <Proxy *>
                Order deny,allow
                Allow from all
              </Proxy>
      </VirtualHost>