Configuration SAINet
Les configurations spécifiques du serveur SAINet se trouvent dans le fichier <runtime>/server.properties
. Certaines d’entre elles
peuvent également être directement définies en tant que variable d’environnement (généralement pour une installation Docker).
Certaines peuvent ensuite être écrasées par une variable SYS22 dans SAINet (voir les variables applicatives en fin de page).
Les différentes définitions sont lues dans l’ordre ci-dessous. Lorsque l’une d’elle est définie, les définitions suivantes sont ignorées. Il est possible de voir la valeur d’une variable ainsi que sa source dans la tâche SYSSV.
- Variable SYS22.
- Variable d’environnement.
- Propriété système (
server.properties
). - Valeur par défaut.
Ces propriétés sont globales au serveur.
Propriété | Environnement | Type | Description |
---|---|---|---|
server.customerFile |
SAINET_CUSTOMER_FILE |
string | Configuration des modules du serveur. Doit contenir le nom d’un fichier (avec extension) existant dans modules/customers. |
server.webapp.enabled |
SAINET_WEBAPP_ENABLED |
boolean | Détermine si l’interface web doit être déployée (nécessite une compilation pour le développement). Cela n’a pas d’impact sur l’API JSON. |
server.port.http |
SAINET_PORT_HTTP |
int | Port HTTP (utiliser une valeur négative pour un lookup dynamique). Par défaut 9090. |
server.port.https |
SAINET_PORT_HTTPS |
int | Port HTTPS (utiliser une valeur négative pour un lookup dynamique). Par défaut 9191 (en mode développement), 0 (désactivé en production). |
server.port.admin |
int | Port d’administration (utiliser une valeur négative pour un lookup dynamique). | |
server.port.jmx |
int | Interne, ne pas utiliser. | |
server.port.jms |
int | Interne, ne pas utiliser. | |
server.port.iiop_orb |
int | Interne, ne pas utiliser. | |
server.port.iiop_ssl |
int | Interne, ne pas utiliser. | |
server.port.iiop_sslma |
int | Interne, ne pas utiliser. | |
SAINET_MOCK_SERVER_ENABLED |
boolean | Détermine si le mock-serveur doit être activé ou non (true par défaut). Permet notamment d’avoir une réponse lorsque le serveur SAINet en cours de (re)démarrage. Par défaut, true . |
|
SAINET_MOCK_SERVER_ALLOW_IDLE_CONNECTIONS |
boolean | Le mock-serveur garde la connexion ouverte tant que celle-ci n’est pas fermée par le client (typiquement par traefik). Par défaut, true . |
|
SAINET_VERBOSE |
boolean | Active le mode verbeux des logs. Peut être surtout utile en cas de problème lors du démarrage du service SAINet. Par défaut true dans Docker, false en mode service. |
Lorsque la valeur d’un port est négative, cela indique au serveur SAINet de faire une recherche dynamique d’un port ouvert.
Par exemple, si la valeur est -9301
, le serveur va essayer d’utiliser le port 9301. Si celui-ci n’est pas disponible, il va
essayer le 9302 et ainsi de suite jusqu’à 9601 (limite à 300). La valeur d’un port ne peut pas être mise à zéro.
L’utilisation d’un port en-dessous de 1024 requiert généralement les accès root/administrateur. Il est donc déconseillé de les utiliser.
Par défaut, le système va utiliser les port 9090 (HTTP) et 9191 (HTTPS) afin de ne pas entrer en conflit avec d’éventuelles autres applications qui sont généralement configurées par défaut sur les ports 8080 et 8181.
Ces propriétés sont globales au serveur et servent principalement à l’identifier.
Propriété | Environnement | Type | Description |
---|---|---|---|
server.sainet.instance.type |
SAINET_INSTANCE_TYPE |
string | Type de l’instance (MASTER_SINGLE , MASTER ou SLAVE ). Par défaut, MASTER_SINGLE . |
server.sainet.instance.name |
SAINET_INSTANCE_NAME |
string | Nom de l’instance (affiché dans le header SAINet). Par défaut, NA . |
server.sainet.domain.name |
SAINET_DOMAIN_NAME |
string | Nom du domaine. Cette valeur peut être utilisée pour facilier l’identification de serveur. Il est toutefois recommandé de la laisser vide. |
server.sainet.domain.env |
SAINET_ENV_NAME |
string | Environnement du serveur. Cette valeur doit correspondre à l’identifiant d’un des tags <environment> du fichier customer. |
SAINET_EXTERNAL_URL |
string | URL complète d’accès externe à SAINet (par exemple https://sainet.mydomain.com/SNV4SRV-ws-war/EPS ). Cette variable n’est pas nécessaire si l’environnement pointe déjà sur la bonne URL. |
Sur un serveur de production, généralement seule la variable server.sainet.domain.env
nécessite d’être définie afin que le
serveur puisse connaître l’URL par laquelle il est accédé (nécessaire pour le mobile).
Si plusieurs instances sont disponibles, il est nécessaire de définir les variables server.sainet.instance.name
(pour identifier l’instance) et
server.sainet.instance.type
. Seule une instance peut avoir le type MASTER
et toutes les autres doivent avoir le type SLAVE
. Dans le cas où il
n’y a qu’une seule instance, le type MASTER_SINGLE
doit être utilisé.
Toutes les instances doivent accéder à la même base de données ainsi qu’à la même GED.
Seule l’instance ayant le type MASTER
(ou MASTER_SINGLE
) va effectuer les modifications en base de données et autres migrations globales. C’est également elle qui doit être mise à jour, les instances de
type SLAVE
se pilotant automatiquement sur la version du MASTER
. Par défaut, l’instance MASTER
va vérifier tous les jours à 3h du matin si une nouvelle mise à jour
est disponible et l’applique automatiquement lorsque la variable sainet.update.restart
est à true
. L’heure de la vérification peut être personnalisée avec la propriété schedule.system.automatic_update_master
.
Une fois que l’instance MASTER
a été mise à jour (manuellement ou automatiquement), les instances SLAVE
se mettent
automatiquement à jour 15 minutes après, de manière échelonnée (si une instance SLAVE
est en cours de mise à jour, les autres attendent et réessaient 15 minutes plus tard). Ce laps de temps de vérification
peut être personnalisé dans la propriété schedule.system.automatic_update_slave
.
Lorsque le type d’instance est MASTER
, le package du serveur lui-même est copié dans la GED afin que les instances SLAVE
puisse le récupérer et se mettre à jour. Si le type MASTER_SINGLE
est utilisé, ce package n’est pas copié et aucun SLAVE
ne peut se mettre à jour, d’où l’importance de spécifier le type d’instance correct.
Ces propriétés sont utilisées par les descripteurs internes à SAINet et ont un impact sur les différentes URLs et resources JNDI.
Propriété | Environnement | Type | Description |
---|---|---|---|
sainet.context_root |
SAINET_CONTEXT_ROOT |
string | Racine de l’application (par défaut SNV4SRV-ws-war ). |
sainet.context_root_mobile |
SAINET_MOBILE_CONTEXT_ROOT |
string | Racine de l’application mobile (par défaut SNV4SRV-mobile-war ). |
sainet.jdbc_resource_ref_name |
string | Nom JNDI pour la resource JDBC (par défaut jdbc/sainet ) afin de se connecter à la base de données. |
|
sainet.mail_resource_ref_name |
string | Nom JNDI pour la resource MAIL (par défaut mail/sainet ) afin que l’application puisse envoyer des mails. |
A moins d’avoir des besoins spécifiques (généralement un environnement avec d’autres applications), il est recommandé de ne pas modifier ces variables.
Ces propriétés définissent où sont stockées les données de SAINet.
Depuis la version 4.11, il est recommandé d’utiliser les variables d’environnement génériques afin de configurer l’accès la base de données.
Lorsque l’URL complète est spécifiée, les variables d’environnement suivantes sont disponibles:
Variable | Type | Description |
---|---|---|
SAINET_DATABASE_URL |
string | URL complète vers la base de données. Doit commencer par jdbc:h2: , jdbc:mariadb:// ou jdbc:mysql:// . |
SAINET_DATABASE_USER |
string | Nom d’utilisateur. |
SAINET_DATABASE_PASSWORD |
string | Mot de passe. |
Il est possible de spécifier uniquement certaines parties des données:
Variable | Type | Description |
---|---|---|
SAINET_DATABASE_TYPE |
h2,mariadb | Type de base de données. Dans ce mode, H2 n’est pas supporté. Si cette valeur n’est pas spécifiée, mariadb est utilisé comme valeur par défaut. |
SAINET_DATABASE_HOST |
string | Adresse de l’hôte. |
SAINET_DATABASE_PORT |
int | Numéro du port. Par défaut 3306 pour mariadb et mysql. |
SAINET_DATABASE_SCHEMA |
string | Nom du schema. |
SAINET_DATABASE_USER |
string | Nom d’utilisateur. |
SAINET_DATABASE_PASSWORD |
string | Mot de passe. |
Depuis la version 4.11, il est recommandé d’utiliser partout les variables ‘MARIADB’ au lieu de ‘MYSQL’, toutefois ces dernières restent disponibles afin de faciliter la transition.
Propriété | Environnement | Type | Description |
---|---|---|---|
database.type |
h2,mariadb | Type de base de données. | |
database.h2.path |
SAINET_DATABASE_H2_URL |
string | Si h2 , chemin d’accès au fichier des données (relatif au dossier <runtime> ). |
database.mariadb.host |
SAINET_DATABASE_MARIADB_HOST |
string | Si mariadb , nom de l’hôte (par défaut localhost ). |
database.mariadb.port |
SAINET_DATABASE_MARIADB_PORT |
int | Si mariadb , numéro du port (par défaut 3306 ). |
database.mariadb.schema |
SAINET_DATABASE_MARIADB_SCHEMA |
string | Si mariadb , nom du schema. |
database.mariadb.user |
SAINET_DATABASE_MARIADB_USER |
string | Si mariadb , nom d’utilisateur. |
database.mariadb.password |
SAINET_DATABASE_MARIADB_PASSWORD |
string | Si mariadb , mot de passe utilisateur. |
database.parameter.<name> |
SAINET_DATABASE_<type>_PARAMS , SAINET_DATABASE_<type>_PARAMS_FILE |
string | Paramètre <name> supplémentaire pour la base de données. |
Généralement la base de données h2
est utilisée pour les tests. Pour une base de données en production,
il est recommandé d’utiliser MariaDB (configurable avec mariadb
).
Il est possible d’utiliser les variables d’environnement SAINET_DATABASE_H2_PARAMS
et SAINET_DATABASE_MARIADB_PARAMS
afin de spécifier des paramètres supplémentaires. La valeur de ces variables doit être donnée sous la forme key1=value1;key2=value2;...
. Il est également
possible d’utiliser les variables SAINET_DATABASE_H2_PARAMS_FILE
et SAINET_DATABASE_MARIADB_PARAMS_FILE
pour spécifier
un fichier .properties
avec les propriétés supplémentaires.
Si une des variables *_PARAMS
est spécifiée, la variable correspondante *_PARAMS_FILE
sera ignorée.
Ces propriétés définissent les différents emplacements qui touchent au système de fichier. Par défaut, aucune de ces
propriétés n’est obligatoire et les sous-dossiers nécessaires sont créés automatiquement dans <runtime>/edms
.
Propriété | Environnement | Type | Description |
---|---|---|---|
sainet.fs.root.ged |
SAINET_EDMS_GED |
string | Chemin absolu de l’emplacement de la GED. Par défaut dans <runtime>/edms/ged . |
sainet.fs.root.log |
SAINET_EDMS_LOG |
string | Chemin absolu de l’emplacement des fichiers de logs. Par défaut dans <runtime>/edms/log . |
sainet.fs.root.tmp |
SAINET_EDMS_TMP |
string | Chemin absolu de l’emplacement des fichiers temporaires. Par défaut dans <runtime>/edms/tmp . |
sainet.fs.root.bck |
SAINET_EDMS_BCK |
string | Chemin absolu de l’emplacement des fichiers de backups internes de la GED. Par défaut dans <runtime>/edms/bck . |
sainet.fs.root.conf |
SAINET_EDMS_CNF |
string | Chemin absolu de l’emplacement des fichiers de configuration. Par défaut dans <runtime>/edms/conf . |
En cas d’architecture multi-instances, l’emplacement de la GED doit être commun à toutes les instances. Il est donc nécessaire
de définir sainet.fs.root.ged
ou SAINET_EDMS_GED
.
De manière générale, les autres propriétés n’ont pas besoin d’êtres définies. Dans le cas où elles seraient définies, il est recommandé que les emplacements se situent sur le disque local de la machine afin de ne pas pénaliser les performances.
Ces propriétés permettent de configurer un serveur SMTP afin que SAINet puisse envoyer des emails.
La configuration du serveur SMTP peut être faite entièrement via SYS22.
Propriété | Environnement | Type | Description |
---|---|---|---|
mail.type |
none,local,simple | Type de resource. | |
mail.local.port |
SAINET_MAIL_LOCAL_PORT |
int | Si local , détermine le port local à utiliser. |
mail.simple.protocol |
SAINET_MAIL_STMP_PROTOCOL |
smtp,smtps | Si simple , protocole à utiliser (par défaut, smtp ). |
mail.simple.host |
SAINET_MAIL_STMP_HOST |
string | Si simple , nom de l’hôte. |
mail.simple.port |
SAINET_MAIL_STMP_PORT |
int | Si simple , numéro du port (optionnel). |
mail.simple.from |
SAINET_MAIL_STMP_FROM |
string | Si simple , adresse email à utiliser dans le From . |
mail.simple.user |
SAINET_MAIL_STMP_USER |
string | Si simple , nom d’utilisateur (si authentification nécessaire). |
mail.simple.password |
SAINET_MAIL_STMP_PASSWORD |
string | Si simple , mot de passe utilisateur. Implique la création (automatique) de la variable mail.smtp.auth=true . |
mail.simple.timeout |
SAINET_MAIL_SMTP_CONNECTION_TIMEOUT / SAINET_MAIL_SMTP_READ_TIMEOUT |
int | Si simple , détermine le timout (en millisecondes) pour la connexion et la lecture au serveur SMTP. Une valeur à zéro ou négative signifie un timeout infini. |
mail.* |
SAINET_MAIL_STMP_PARAMS , SAINET_MAIL_STMP_PARAMS_FILE |
Autre propriétés relatives à la configuration des mails (voir ici). |
Le type de mail local
est généralement utilisé pour les tests. Cela démarre un serveur SMTP local sur le port spécifié et stocke les mails
envoyés par SAINet afin qu’ils puissent être vérifiés par la suite (uniquement par API).
De la même manière que pour les paramètres de la base de données, il est possible d’utiliser la variable SAINET_MAIL_STMP_PARAMS
sous la
forme key1=value1;key2=value2;...
afin de spécifier des paramètres supplémentaires. Il est également possible d’utiliser la variable SAINET_MAIL_STMP_PARAMS_FILE
afin de pointer vers un fichier contenant les propriétés supplémentaires.
La configuration par propriétés/variables d’environnement est statique. En cas de changement, un redémarrage du serveur sera nécessaire. La configuration SYS22 est dynamique et ne nécessite pas de redémarrage.
Une liste de propriété étendue peut être trouvée ici.
Par exemple, la variable SAINET_MAIL_STMP_PARAMS
peut être définie comme suit: SAINET_MAIL_STMP_PARAMS_FILE=mail.smtp.from=noreply@mydomain.com;mail.smtp.starttls.required=true;...
.
Dans le cas de la varaible SAINET_MAIL_STMP_PARAMS_FILE
, le fichier spécifié contient les variables sous la forme suivante:
mail.smtp.from=noreply@mydomain.com
mail.smtp.starttls.required=true
...
Ces propriétés permettent de configurer comment un utilisateur est authentifié dans SAINet.
Par défaut, SAINet utiliser un JDBCRealm
qui utilise la base de données afin d’authentifier un utilisateur.
Propriété | Environnement | Type | Description |
---|---|---|---|
realm.classname |
SAINET_REALM_CLASSNAME |
string | Nom complet de la classe du Realm. |
realm.prop.<name> |
SAINET_REALM_PARAMS , SAINET_REALM_PARAMS_FILE |
string | Propriété relative au Realm. La partie <name> sera utilisée pour créer la propriété dans la configuration. |
La propriété realm.prop.jaas-context
doit généralement être spécifiée en relation avec le Realm autorisé. Elle peut prendre une des valeurs suivantes: fileRealm
, ldapRealm
, solarisRealm
, jdbcRealm
, jdbcDigestRealm
ou pamRealm
.
Les modules d’authentification fournis peuvent être trouvés ici. Les classes principales peuvent être les suivantes:
com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm
(Realm par défaut utilisé en arrière-plan)com.sun.enterprise.security.auth.realm.ldap.LDAPRealm
De la même manière que pour les paramètres de la base de données, il est possible d’utiliser la variable SAINET_REALM_PARAMS
sous la
forme key1=value1;key2=value2;...
afin de spécifier des paramètres supplémentaires. Il est également possible d’utiliser la variable SAINET_REALM_PARAMS_FILE
afin de pointer vers un fichier contenant les propriétés supplémentaires.
Typiquement, dans le cas d’un ActiveDirectory / LDAP, la variable SAINET_REALM_PARAMS
peut être définie comme ceci: SAINET_REALM_PARAMS=directory=ldap://<url>;base-dn=DC=domain,DC=lan;...
.
Dans le cas de la variable SAINET_REALM_PARAMS_FILE
, le fichier spécifié contiendra les variables sous la forme suivante:
directory=ldap://<url>
base-dn=DC=domain,DC=lan
...
Avant de configurer l’authentification LDAP, il est nécessaire de configurer la synchronisation Active Directory au niveau des paramètres SYS22.
Lorsque la synchronisation avec Active Directory est activée, les propriétés SYS22 relatives au salt (auth.password.salt
et auth.password.salt_fallback
) ne sont
plus prises en compte.
La documentation des différentes propriétés peut être trouvée ici.
realm.classname=com.sun.enterprise.security.auth.realm.ldap.LDAPRealm
realm.prop.directory=ldap://<url>
realm.prop.search-filter=(&(objectClass=user)(sAMAccountName=%s)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
realm.prop.search-bind-dn=<domain>\\<username>
realm.prop.base-dn=DC=domain,DC=lan
realm.prop.group-search-filter=(&(objectClass=group)(member=%d))
realm.prop.search-bind-password=<password>
realm.prop.group-base-dn=OU=UO-DataCenter,DC=domain,DC=lan
Les différentes valeurs sont composées de la manière suivante (voir également la RFC ou cette documentation):
%s
contiendra le nom du sujet (subject name).%d
contiendra le DN (Distingused Name) de l’utilisateur.(&...)
indique une liste de conditions AND.(|...)
indique une liste de conditions OR.(!(...))
indique une condition NOT.(<attr>:<matchingrule>:=<value>)
indique d’utiliser la règle avec OID<matchingrule>
pour vérifier la valeur de<attr>
dans le DN.
Le realm ne sert qu’à l’authentification de l’utilisateur. Il est nécessaire de configurer les variables relatives à l’Active Directory dans SYS22 afin de synchroniser les données une fois l’utilisateur authentifié.
L’utilisateur doit faire partie d’un ou plusieurs groupes (group-search-filter
) qui doivent correspondre à un rôle SAINet. Ces groupes sont:
USER
ouSAIUSER
ADMIN
ouSAIADMIN
SUPERADMIN
ouSAISUPERADMIN
Si l’utilisateur ne fait partie d’aucun de ces groupes, l’authentification sera refusée et il ne pourra pas accéder à SAINet.
La configuration des Managed Executor Service peut être trouvée ici. Toutes les propriétés ne sont pas listées, uniquement celles fournies en standard par SAINet.
Propriété | Environnement | Type | Description |
---|---|---|---|
executor.core-pool-size |
SAINET_EXECUTOR_CORE_POOL_SIZE |
int | Nombre de threads actifs, même si aucun processus en cours. Par défaut, 4. |
executor.maximum-pool-size |
SAINET_EXECUTOR_MAXIMUM_POOL_SIZE |
int | Nombre de threads maximum en parallèle. Par défaut, 128. |
executor.task-queue-capacity |
SAINET_EXECUTOR_TASK_QUEUE_CAPACITY |
int | Nombre de processus maximum en attente d’un thread. Par défaut, 8192. |
Ces propriétés permettent de configurer les mises à jour automatiques de l’application. Les données d’authentification sont stockées dans le fichier infra/auth/htpasswd.
Dans le cas d’un service, la configuration des mises à jour se fait dans le fichier <runtime>/services/<service>/sainet-vars.<ext>
(les parties <service>
et <ext>
dépendent du système d’exploitation).
Propriété | Environnement | Type | Description |
---|---|---|---|
sainet.update.url |
SAINET_UPDATE_URL |
string | URL pour le téléchargement des paquets de mise à jour (par défaut https://dev2.sai-erp.net/update ). |
sainet.update.username |
SAINET_UPDATE_USERNAME |
string | Nom d’utilisateur. |
sainet.update.password |
SAINET_UPDATE_PASSWORD |
string | Mot de passe. |
sainet.update.store |
SAINET_UPDATE_STORE |
string | Chemin d’accès complet où le paquet de mise à jour doit être téléchargé. |
sainet.update.mode |
SAINET_UPDATE_MODE |
snapshot,rc,release | Mode de mise à jour désiré (voir les types de version. |
sainet.update.restart |
SAINET_UPDATE_RESTART |
boolean | Détermine si le serveur doit être redémarré (par défaut false ). |
Pour que les mises à jour soient automatiquement appliquées, il faut mettre sainet.update.restart=true
car sinon, le paquet de mise à jour est seulement téléchargé.
Cette configuration s’applique uniquement pour la partie mobile, dans le cas où le cache redis est délocalisé.
Propriété | Environnement | Type | Description |
---|---|---|---|
sainet.mobile.redis.url |
SAINET_REDIS_URL |
string | URL du serveur Redis (par défaut redis://127.0.0.1:6379 ). |
Il est possible de déployer d’autres applications au sein du serveur SAINet.
Propriété | Type | Description |
---|---|---|
server.extra-wars |
string | Liste de fichiers WAR à déployer (séparés par des virgules). |
Cette configuration est utile pour les serveurs de tests uniquement. Les opérations suivantes sont effectuées:
- tous les utilisateurs sont déactivés (sauf ceux indiqués par
SAINET_SYSTEM_TEST_ENABLED_USERS
). - toutes les configurations SYS93 sont supprimées.
- toutes les configurations relatives aux emails en SYS22 sont supprimées. Si la propriété
SAINET_SYSTEM_TEST_MAILHOG
est définie, alors les propriétésmail.smtp.host
etmail.smtp.port
sont renseignées. - les propriétés relatives au portail en SYS22 sont mises à jour pour pointer sur l’URL du serveur de test (
portal.account.activation.url
,portal.reset.password.url
etportal.news.url
). - les propriétés relatives au chiffrage en SYS22 sont regénérées (
auth.token.encryption_key
etpassword.encryption_key
). Les mots de passe stockés dans l’application deviennent inaccessibles.
Environnement | Type | Description |
---|---|---|
SAINET_SYSTEM_TEST |
boolean | Active le mode test. |
SAINET_SYSTEM_TEST_ENABLED_USERS |
string | Désactive tous les utilisateurs, exceptés ceux listés dans cette propriété. Il est possible de lister plusieurs valeurs séparées par des virgules et d’utiliser des wildcards. Par défaut, sai,sai-* . |
SAINET_SYSTEM_TEST_MAILHOG |
string | Nom d’hôte du serveur mailhog pour l’envoi des mails (le port peut être précisé avec le format <host>:<port> ). Si pas spécifié, le serveur ne pourra pas envoyer de mail. |
Beaucoup d’autres variables sont utilisées au sein de SAINet, dont certaines peuvent êtres déclarées comme variables d’environnement. Une vue
complète de toutes ces variables peut être obtenue dans la tâche SYSSV
.
Toutes les variables applicatives utilisées dans SAINet sont déclarées au niveau du paramétrage:
Fichier | Description |
---|---|
sainet.properties | Contient les variables applicatives spéciales qui doivent être accessibles en dehors d’une configuration (par exemple, durant l’initialisation du serveur). |
system.properties | Contient toutes les variables applicatives utilisables de manière standard dans SAINet. Ce fichier peut être personnalisé par module afin de déclarer/modifier des variables en fonction de la modularisation. |
Toutes les propriétés préfixées par sainet.
sont également définies comme propriété système et peuvent donc être accédées dans le programme par System.getProperty(<id>)
.