OnlyOffice Docker

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 
Sinon suivre le tuto suivant : Déployer Nextcloud Docker
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.
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:
      - office-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:
      - office-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:
      - office-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
      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
      REDIS_SERVER_HOST: redis-onlyoffice
      REDIS_SERVER_PORT: 6379
      JWT_ENABLED: true
      JWT_SECRET: ${ONLYOFFICE_DOCUMENT_JWT_SECRET}
      JWT_HEADER: Authorization
      JWT_IN_BODY: 'true'
    networks:
      - office-network
      - bddnetwork
    ports: 
      - 8081:80
    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
Vérification que le nouveau network existe : 
sudo docker network ls
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>
Tester la configuration : 
sudo apachectl configtest
Activation du nouveau host : 
a2ensite office.miraceti.net.conf
Vérifier que l'accès via L’URL 
office.miraceti.net est bien accessible en HTTP. 
 Une fois accessible, il faut rendre sécurisé (HTTPS) l'accès à cette URL :
sudo certbot --apache -d office.miraceti.net
Ce qui générera le fichier suivant  
office.miraceti.net-le-ssl.conf. Ajouter la configuration suivante à la fin du fichier avant la balise de fin "
<VirtualHost>" : 
SetEnvIf Host "^(.*)$" THE_HOST=$1
RequestHeader setifempty X-Forwarded-Proto https
RequestHeader setifempty X-Forwarded-Host %{THE_HOST}e
ProxyAddHeaders Off
ProxyPass /.well-known !
ProxyPassMatch (.*)(\/websocket)$ "ws://localhost:8081/$1$2"
ProxyPass / http://localhost:8081/
ProxyPassReverse / http://localhost:8081/
Ce qui donne le fichier final : 
<IfModule mod_ssl.c>
<VirtualHost *:443>
		ServerName office.miraceti.net
		ErrorLog ${APACHE_LOG_DIR}/office.miraceti.net.log
        CustomLog ${APACHE_LOG_DIR}/office.miraceti.net.log combined
        SetEnvIf Host "^(.*)$" THE_HOST=$1
        RequestHeader setifempty X-Forwarded-Proto https
        RequestHeader setifempty X-Forwarded-Host %{THE_HOST}e
        ProxyAddHeaders Off
        ProxyPass /.well-known !
        ProxyPassMatch (.*)(\/websocket)$ "ws://localhost:8081/$1$2"
        ProxyPreserveHost On
        ProxyRequests Off        
        ProxyPass / http://localhost:8081/
        ProxyPassReverse / http://localhost:8081/
        <IfModule mod_dav.c>
           Dav off
        </IfModule>
		<Proxy *>
          Order deny,allow
          Allow from all
        </Proxy>
        SSLCertificateFile /etc/letsencrypt/live/office.miraceti.net/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/office.miraceti.net/privkey.pem
        Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>