13 compile_only_office
tobias ollive edited this page 2022-12-17 20:20:26 +01:00

Prérequis

Attention, recompiler onlyoffice à partir des sources prend un certain temps même sur une machine assez puissante et nécessite au moins 25Go d'espace libre.

On part du principe que tout se passe dans le dossier $HOME/onlyoffice

Compilation :

   base.replaceInFileRE(server_build_dir + "/Common/sources/commondefines.js", "const buildNumber = [0-9]*", "const buildNumber = " + build_number)
   base.replaceInFileRE(server_build_dir + "/Common/sources/license.js", "const buildDate = '[0-9-/]*'", "const buildDate = '" + cur_date + "'")
   base.replaceInFileRE(server_build_dir + "/Common/sources/commondefines.js", "const buildVersion = '[0-9.]*'", "const buildVersion = '" + product_version + "'")
+ # nombre d'utilisateurs fixé arbitrairement à 500
+  base.replaceInFileRE(server_build_dir + "/Common/sources/constants.js", "LICENSE_CONNECTIONS = [0-9.]*", "LICENSE_CONNECTIONS = 500")
  • Changer le dockerfile pour supprimer une erreur liée au dossier tmp. Attention, il faut compiler l'integralité de onlyoffice. Ne compiler que la partie serveur conduit à un problème pendant l'édition des liens.
- CMD	 cd tools/linux/ & \
-    python3 ./automate.py
+ CMD   chmod 1777 /tmp & cd tools/linux/ & \
+    python3 ./automate.py
  • créer le conteneur
docker build -t onlyoffice_build .
  • lancer la compilation
docker run -e PRODUCT_VERSION='7.2.1' -e BUILD_NUMBER='9' -e NODE_ENV='production' -v $PWD/out:/build_tools/out onlyoffice_build

Une fois cette étape terminée, onlyoffice est compilé dans le dossier out.

Packaging

apt install build-essential m4 npm
npm install -g pkg
apt install debhelper

PRODUCT_VERSION='7.2.1' BUILD_NUMBER='1' make deb

le paquet deb est disponible dans le répertoire $HOME/onlyoffice/package-document-server/deb/

Création de l'image docker

  • rendre accessible le paquet sur internet
  • cloner le repo https://github.com/ONLYOFFICE/Docker-DocumentServer
  • modifier le dockerfile
+++ b/Dockerfile
@@ -1,5 +1,4 @@
 FROM ubuntu:22.04 as documentserver
-LABEL maintainer Ascensio System SIA <support@onlyoffice.com>
 
 ENV LANG=en_US.UTF-8 LANGUAGE=en_US:en LC_ALL=en_US.UTF-8 DEBIAN_FRONTEND=noninteractive PG_VERSION=14
 
@@ -64,6 +63,7 @@ RUN echo "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d && \
     service rabbitmq-server stop && \
     service supervisor stop && \
     service nginx stop && \
+    apt-get clean && \
     rm -rf /var/lib/apt/lists/*
 
 COPY config /app/ds/setup/config/
@@ -74,24 +74,24 @@ EXPOSE 80 443
 ARG COMPANY_NAME=onlyoffice
 ARG PRODUCT_NAME=documentserver
 ARG PRODUCT_EDITION=
-ARG PACKAGE_VERSION=0.0.0-0
+ARG PACKAGE_VERSION=7.2.1-9
 ARG TARGETARCH
-ARG PACKAGE_BASEURL="http://download.onlyoffice.com/install/documentserver/linux"
-ARG PACKAGE_FILE="${COMPANY_NAME}-${PRODUCT_NAME}${PRODUCT_EDITION}_${PACKAGE_VERSION}_${TARGETARCH}.deb"
 
 ENV COMPANY_NAME=$COMPANY_NAME \
     PRODUCT_NAME=$PRODUCT_NAME \
     PRODUCT_EDITION=$PRODUCT_EDITION
 
-RUN wget -q -P /tmp "$PACKAGE_BASEURL/$PACKAGE_FILE" && \
+
+RUN wget "__URL__DU__PAQUET__" -O /tmp/onlyoffice.deb && \
     apt-get -y update && \
     service postgresql start && \
-    apt-get -yq install /tmp/$PACKAGE_FILE && \
+    apt-get -yq install /tmp/onlyoffice.deb && \
     service postgresql stop && \
     service supervisor stop && \
     chmod 755 /app/ds/*.sh && \
-    rm -f /tmp/$PACKAGE_FILE && \
     rm -rf /var/log/$COMPANY_NAME && \
+    rm -rf /tmp/onlyoffice.deb \
+    apt-get clean && \
     rm -rf /var/lib/apt/lists/*

Ajout de l'option forcesave dans le fichier run-document-server.sh

Les options deviennent accessible via les variable d'environement : 

  • FORCESAVE_ENABLE
  • FORCESAVE_INTERVAL
  • FORCESAVE_STEP
+++ b/run-document-server.sh
@@ -75,6 +75,10 @@ NGINX_CONFIG_PATH="/etc/nginx/nginx.conf"
 NGINX_WORKER_PROCESSES=${NGINX_WORKER_PROCESSES:-1}
 NGINX_WORKER_CONNECTIONS=${NGINX_WORKER_CONNECTIONS:-$(ulimit -n)}
 
+FORCESAVE_ENABLE=${FORCESAVE_ENABLE:-false}
+FORCESAVE_INTERVAL=${FORCESAVE_INTERVAL:-5m}
+FORCESAVE_STEP=${FORCESAVE_STEP:-1m}
+
 JWT_ENABLED=${JWT_ENABLED:-true}
 
 # validate user's vars before usinig in json
@@ -328,6 +332,11 @@ update_ds_settings(){
   ${JSON} -I -e "this.services.CoAuthoring.token.inbox.inBody = ${JWT_IN_BODY}"
   ${JSON} -I -e "this.services.CoAuthoring.token.outbox.inBody = ${JWT_IN_BODY}"
 
+  ${JSON} -I -e "if(this.services.CoAuthoring.autoAssembly===undefined)this.services.CoAuthoring.autoAssembly={};"
+  ${JSON} -I -e "this.services.CoAuthoring.autoAssembly.enable = ${FORCESAVE_ENABLE}"
+  ${JSON} -I -e "this.services.CoAuthoring.autoAssembly.interval = '${FORCESAVE_INTERVAL}'"
+  ${JSON} -I -e "this.services.CoAuthoring.autoAssembly.step = '${FORCESAVE_STEP}'"
+
   if [ -f "${ONLYOFFICE_EXAMPLE_CONFIG}" ]; then
     ${JSON_EXAMPLE} -I -e "this.server.token.enable = ${JWT_ENABLED}"
     ${JSON_EXAMPLE} -I -e "this.server.token.secret = '${JWT_SECRET}'"

  • build l'image docker
docker build -t onlyoffice_500:7.2.1_forcesave
  • exporter l'image docker :
docker save onlyoffice_500:7.2.1_forcesave | gzip > onlyoffice.tar.gz
  • importer l'image sur le serveur : 
tar xf onlyoffice.tar.gz
docker load onlyoffice_500:7.2.1_forcesave