Page:
compile_only_office
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 :
- cloner le repo git suivant : https://github.com/ONLYOFFICE/build_tools.git
- aller au tag de son choix (ici 7.2.0-209)
- changer le nombre d'utilisateurs dans le script
scripts/build_server.py
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
-
cloner le repo https://github.com/ONLYOFFICE/document-server-package dans le même dossier que build_tools
-
lancer un conteneur debian
docker run -it -v $HOME/onlyoffice:/build debian bash
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