Skip to content

Utiliser la distribution légère de S-Filer Portal

Ce manuel

À qui s'adresse ce guide

Ce guide est destiné aux administrateurs de S-Filer Portal.

Afin de permettre aux administrateurs de S-Filer Portal d'installer facilement une instance de la solution ou de créer des images Docker personnalisées, nous avons rendu disponible une distribution légère de chacune des composantes de la solution. Cette distribution ne contient que les fichiers nécessaires au fonctionnement d'une instance fonctionnelle de la solution et ne possède pas d'utilitaire facilitant l'installation de la solution.

Composants

Les composants S-Filer Portal suivants sont livrés avec la distribution légère :

ComposanteUtilité
sfiler-serverComposante principale de la solution S-Filer Portal
sfiler-gatewayComposante exposé à l'externe qui reçoit les fichiers via un ensemble de protocoles
sfiler-config-cliOutil en ligne de commande utilisé pour configurer la solution S-Filer Portal
sfiler-admin-cliOutil en ligne de commande utilisé pour administrer la solution S-Filer Portal
sfiler-cliOutil en ligne de commande utilisé pour accéder, télécharger et téléverser des fichiers avec la solution S-Filer Portal

Requis système

Afin d'utiliser la distribution légère, vous aurez besoin d'un environnement d'exécution Java (JDK) valide. N'importe quel JDK devrait fonctionner (à condition d'utiliser la version correspondante). Normalement, en utilisant l'installateur ou les images Dockers offertes publiquement, le JDK d'Eclipse Temurin est celui utilisé.

La distribution S-Filer Portal légère est également livrée avec une version compilée de sfiler-admin-cli et sfiler-cli pour Windows. Par conséquent, un JRE n'est pas nécessaire pour utiliser uniquement l'une ou l'autre de ces composantes.

Récupérer la distribution légère

Tout d'abord, vous devez accéder aux fichiers de la distribution légère. Pour ce faire, connectez-vous à l'instance d'Okiok S-Filer Portal (https://sfiler.okiok.com/sfiler/) en utilisant les identifiants qui vous ont été fournis. Vous pouvez les récupérer les fichiers en utilisant plusieurs protocoles tels que SFTP ou HTTPS. La distribution légère de S-Filer Portal est téléchargée dans un partage appelé S-Filer_Portal_Distributions. Les distributions sont triées à l'intérieur par versions majeures (par exemple 4.19.x) et ensuite par versions (par exemple 4.19.0).

Les images Docker officielles sont basées sur la version Alpine Linux d'Eclipse Temurin, Alpine étant une distribution Linux légère basée sur BusyBox. Si vous avez besoin que vos images Docker soient basées sur une autre distribution Linux spécifique, vous devrez les construire vous-même.

Utiliser la distribution légère

Les sections suivantes permettent la construction personnalisé des images Docker pour les composantes de S-Filer Portal. Si vous n'avez pas besoin de construire des images Docker personnalisées, vous pouvez simplement utiliser les images Docker officielles disponibles publiquement.

Note

Les fichiers présents dans les sections suivantes sont fournis à titre d'exemple uniquement et peuvent être modifiés pour s'adapter à votre propre utilisation de la solution.

Note

Alors que les Dockerfile sont typiquement utilisés pour configurer l'environnement pour l'utilisation d'un certain logiciel, les entrypoint sont des scripts Bash utilisés pour définir les commandes à exécuter lorsque le conteneur est démarré.

Construire une images Docker personnalisées pour le config-cli S-Filer

Le fichier Docker suivant peut être utilisé pour construire une image Docker pour le config-cli S-Filer :

Dockerfile
FROM eclipse-temurin:17-jre-alpine
LABEL maintainer="support@okiok.com"

RUN apk update && apk add --no-cache dos2unix bash gettext

COPY ./sfiler-config-cli/sfiler-config-cli-dist-linux.zip ./sfiler-config-cli-dist-linux.zip
RUN unzip sfiler-config-cli-dist-linux.zip && rm sfiler-config-cli-dist-linux.zip && mv ./sfiler-config-cli/ ./app/

# Add docker-compose-wait tool -------------------
ADD https://github.com/ufoscout/docker-compose-wait/releases/download/2.12.0/wait /dockerWait
RUN chmod +x /dockerWait

WORKDIR /app

COPY entrypoint-config-cli.sh ./entrypoint.sh
RUN dos2unix ./entrypoint.sh

RUN ln -s /opt/java/openjdk ./jre

RUN mkdir /app/conf && touch /app/conf/sfiler.conf

RUN chgrp -R 0 * && chmod -R 770 *

VOLUME /app/conf
VOLUME /app/ext/lib

ENTRYPOINT ["bash", "./entrypoint.sh"]

Fichier entrypoint-server.sh

shell
#!/bin/bash
set -e

if [ ! -z $CONFIG_DB_PASSWORD_FILE ]; then
  CONFIG_DB_PASSWORD=$(cat $CONFIG_DB_PASSWORD_FILE)
  echo "CONFIG_DB_PASSWORD_FILE provided, using it to set CONFIG_DB_PASSWORD"
fi

export WAIT_HOSTS=$(echo "$CONFIG_DB_URL" | sed -n 's/jdbc:[^:]\+:\/\/\([^/]\+\)\/.*/\1/p')
export WAIT_TIMEOUT=7200
export WAIT_SLEEP_INTERVAL=20

/dockerWait

{
  echo "cfg.server.local.config.url=$CONFIG_DB_URL"
  echo "cfg.server.local.config.driver=$CONFIG_DB_DRIVER"
  echo "cfg.server.local.config.hibernate.dialect=$CONFIG_DB_HIBERNATE_DIALECT"
} >> ./conf/sfiler.conf

echo "Saved local configuration to ./conf/sfiler.conf"

echo "====== < ./conf/sfiler.conf > ======"
cat ./conf/sfiler.conf
echo "====== < ./conf/sfiler.conf > ======"

echo "Substituting environment variables in /app/script.sfiler"
mkdir -p /app/int
envsubst < /app/script.sfiler > /app/script.sfiler.tmp
mv /app/script.sfiler.tmp /app/int/script.sfiler

if [ ! -s "/app/script.sfiler" ] && [ -z "$CONFIG_CLI_COMMAND" ]; then
  echo -e "\e[31mError: You need to provide at least one command to the SFiler Configuration CLI \e[0m"
  echo "Provide only 1 command using the CONFIG_CLI_COMMAND environment variable"
  echo "or provide multiple configuration commands by binding a file to the /app/script.sfiler file, inside of the container"
  exit 1
fi

if [ -n "$CONFIG_CLI_COMMAND" ]; then
    echo "Executing ./sfiler-config-cli.sh -cf ./conf/sfiler.conf -l $CONFIG_DB_USER -p <CONFIG_DB_PASSWORD> $CONFIG_CLI_COMMAND"
    ./sfiler-config-cli.sh -cf ./conf/sfiler.conf -l "$CONFIG_DB_USER" -p "$CONFIG_DB_PASSWORD" "$CONFIG_CLI_COMMAND"
fi

if [ -s /app/script.sfiler ]; then
  echo "Executing SFiler configuration script"
  echo "Executing ./sfiler-config-cli.sh -x /app/script.sfiler -cf ./conf/sfiler.conf -l $CONFIG_DB_USER -p <CONFIG_DB_PASSWORD>"
  ./sfiler-config-cli.sh -x /app/int/script.sfiler -cf ./conf/sfiler.conf -l "$CONFIG_DB_USER" -p "$CONFIG_DB_PASSWORD"
fi

echo "Exporting Gateway configuration..."
./sfiler-config-cli.sh -cf ./conf/sfiler.conf -l "$CONFIG_DB_USER" -p "$CONFIG_DB_PASSWORD" export-config -n ${SFILER_GATEWAY_INSTANCE_NAME} -ccf /app/configs/sfiler.conf

echo "Exporting GUI configuration..."
./sfiler-config-cli.sh -cf ./conf/sfiler.conf -l "$CONFIG_DB_USER" -p "$CONFIG_DB_PASSWORD" export-config -n ${SFILER_GUI_INSTANCE_NAME} -ccf /app/configs/gui.conf

Construire une images Docker personnalisées pour le serveur S-Filer

Le fichier Docker suivant peut être utilisé pour construire une image Docker pour le serveur S-Filer :

Dockerfile
FROM eclipse-temurin:17-jre-alpine
LABEL maintainer="support@okiok.com"

RUN apk update && apk add --no-cache dos2unix bash curl libc6-compat gcompat openssl

WORKDIR /app

COPY ./sfiler-server/ ./
COPY ./entrypoint-server.sh ./entrypoint.sh
COPY ./sfiler-server/cli-admin.jar bin/cli-admin.jar
COPY ./sfiler-server/config-cli-commands ./

RUN dos2unix ./entrypoint.sh

RUN ["mkdir", "/app/tmp"]
RUN ["mkdir", "/app/logs"]
RUN ["mkdir", "/app/files"]

RUN ["rm", "-rf", "ext/lib"]
RUN ["ln", "-s", "/ext/lib", "ext/lib"]

RUN ["ln", "-s", "/opt/java/openjdk", "../jre"]
RUN ["sed", "-i", "s/XXX_SFILER_SERVER_JRE_XXX/java/", "/app/conf/wrapper.conf"]
RUN ["sed", "-i", "s|XXX_SFILER_TEMP_FOLDER_XXX|/app/tmp|", "/app/conf/wrapper.conf"]

RUN chgrp -R 0 * && chmod -R 770 *

VOLUME /app/conf
VOLUME /app/logs
VOLUME /app/files
VOLUME /app/report

ENTRYPOINT ["bash", "./entrypoint.sh"]

Fichier entrypoint-server.sh

shell
#!/bin/bash

if [ ! -z $CONFIG_DB_PASSWORD_FILE ]; then
  CONFIG_DB_PASSWORD=$(cat $CONFIG_DB_PASSWORD_FILE)
  echo "CONFIG_DB_PASSWORD_FILE provided, using it to set CONFIG_DB_PASSWORD"
fi

if [ ! -f /app/conf/sfiler.conf ]; then
  echo "cfg.sfiler.instance.name=${SFILER_SERVER_INSTANCE_NAME}" > conf/sfiler.conf
  echo "cfg.server.configurator.start=${CONFIGURATOR_START}" >> conf/sfiler.conf
  echo "cfg.server.webserver.configurator.jetty.server.ssl=${CONFIGURATOR_SSL}" >> conf/sfiler.conf
  echo "cfg.server.webserver.configurator.jetty.server.ssl.sni.host.check=${CONFIGURATOR_SSL_SNI_HOST_CHECK}" >> conf/sfiler.conf
  echo "cfg.server.webserver.configurator.jetty.server.ssl.cipher.management.mode=${CONFIGURATOR_SSL_CIPHER_MANAGEMENT_MODE}" >> conf/sfiler.conf
  echo "cfg.server.webserver.configurator.jetty.server.ssl.custom.ciphers=${CONFIGURATOR_SSL_CUSTOM_CIPHERS}" >> conf/sfiler.conf
  echo "cfg.server.webserver.configurator.jetty.server.port=${CONFIGURATOR_PORT}" >> conf/sfiler.conf
  echo "cfg.sfiler.keystore.password=${KEYSTORE_PASSWORD}" >> conf/sfiler.conf
  echo "cfg.sfiler.keystore=${KEYSTORE}" >> conf/sfiler.conf
  echo "cfg.configurator.private.key=${CONFIGURATOR_PRIVATE_KEY}" >> conf/sfiler.conf
  echo "cfg.configurator.clickjacking.protection=${CONFIGURATOR_CLICKJACKING_PROTECTION}" >> conf/sfiler.conf
  echo "cfg.configurator.hsts.header.support=${CONFIGURATOR_HSTS_HEADER_SUPPORT}" >> conf/sfiler.conf
  echo "cfg.configurator.hsts.header.support.max.age=${CONFIGURATOR_HSTS_HEADER_SUPPORT_MAX_AGE}" >> conf/sfiler.conf
  echo "cfg.server.local.config.user=${CONFIG_DB_USER}" >> conf/sfiler.conf
  echo "cfg.server.local.config.password=${CONFIG_DB_PASSWORD}" >> conf/sfiler.conf

  echo "cfg.server.local.config.url=${CONFIG_DB_URL}" >> conf/sfiler.conf
  echo "cfg.server.local.config.driver=${CONFIG_DB_DRIVER}" >> conf/sfiler.conf
  echo "cfg.server.local.config.hibernate.dialect=${CONFIG_DB_HIBERNATE_DIALECT}" >> conf/sfiler.conf
fi

sed "s/cfg.server.local.config.password=$CONFIG_DB_PASSWORD/cfg.server.local.config.password=****/g" conf/sfiler.conf

if [[ $CONFIGURATOR_START == "false" ]]; then
  CONFIGURATOR_KEY="configurator-key-$RANDOM"
  CERTIFICATES=$(./sfiler-config-cli.sh -l ${SFILER_INT_TEST_DB_USER} -p ${SFILER_INT_TEST_DB_PASSWORD} -cf ./conf/sfiler.conf list-certificates)
  if [[ $CERTIFICATES != *${CONFIGURATOR_KEY}* ]]; then
    echo "Generate ${CONFIGURATOR_KEY} ..."
    ./sfiler-config-cli.sh -l ${CONFIG_DB_USER} -p ${CONFIG_DB_PASSWORD} generate-key-pair -a $CONFIGURATOR_KEY -apply-configurator -d 10 -h ${SFILER_SERVER_INSTANCE_NAME} -ks 4096
  else
    echo "Certificate ${CONFIGURATOR_KEY} already exists."
  fi
fi

# Run the wrapper executable in the background
./wrapperLinux64 conf/wrapper.conf &
wrapperPID=$!

if [ "$LOGS" == "silent" ]; then
  wait $wrapperPID
else
  touch logs/server.log
  tail -f logs/server.log
fi

Construire une images Docker personnalisées pour la passerelle S-Filer

Le fichier Docker suivant peut être utilisé pour construire une image Docker pour la passerelle S-Filer :

Dockerfile
FROM eclipse-temurin:17-jre-alpine
LABEL maintainer="support@okiok.com"

RUN apk update && apk add --no-cache dos2unix bash openssl libc6-compat gcompat

WORKDIR /app

COPY ./sfiler-gateway/ ./
COPY ./entrypoint-gateway.sh ./entrypoint.sh

RUN dos2unix ./entrypoint.sh

RUN ["mkdir", "/app/tmp"]
RUN ["mkdir", "/app/logs"]

RUN ["ln", "-s", "/opt/java/openjdk", "../jre"]
RUN ["sed", "-i", "s/XXX_SFILER_SERVER_JRE_XXX/java/", "/app/conf/wrapper.conf"]
RUN ["sed", "-i", "s|XXX_SFILER_TEMP_FOLDER_XXX|/app/tmp|", "/app/conf/wrapper.conf"]
RUN chmod -R 744 /opt/java/openjdk/lib/security/cacerts

# Add docker-compose-wait tool -------------------
ADD https://github.com/ufoscout/docker-compose-wait/releases/download/2.12.0/wait /dockerWait
RUN chmod +x /dockerWait
VOLUME /app/conf
VOLUME /app/logs

ENTRYPOINT ["bash", "./entrypoint.sh"]

Fichier entrypoint-gateway.sh

shell
#!/bin/bash

if [[ "$DOCKER_COMPOSE_WAIT" == "true" ]]; then
  /dockerWait
fi

echo "Copying the generated configuration into the effective configuration that will be used by the wrapper..."
cp /app/configs/sfiler.conf /app/conf/
cp /app/configs/gui.conf /app/conf/

echo ""
echo "Using the following configuration for the Gateway:"
cat /app/conf/sfiler.conf
echo ""

echo ""
echo "Using the following configuration for the GUI:"
cat /app/conf/gui.conf
echo ""

echo ""
echo "Using the following configuration for the Wrapper:"
cat conf/wrapper.conf
echo ""

# Run the wrapper executable in the background
./wrapperLinux64 conf/wrapper.conf &
wrapperPID=$!

if [ "$LOGS" == "silent" ]; then
  wait $wrapperPID
else
  touch logs/gateway.log
  tail -f logs/gateway.log
fi